×

Discuz最新版代码执行漏洞

标签: 暂无标签
0×00概述近期审计discuz最新版的时候发现配置文件写入导致代码执行的问题。cms安装的时候一般会分为几个步骤去进行,其中有对配置文件config进行写入的步骤,当写入的时候未严格限制传入的参数就存在代码执行问题。0×01 白盒审计源码信息:Discuz_X3.4_GIT_SC_UTF8问题文件: \\upload\install\index.php漏洞类型:配置文件写入导致代码执行站点地址:http://www.discuz.net/forum-10-1.html 直接看配置信息写入的代码段为 \\upload\install\index.php





Discuz最新版代码执行漏洞





看到save_config_file()函数是保存写入配置信息的,配置信息为$_config这个数组,我们跟踪下这个数组;

还是这个文件,代码段为第266行;


Discuz最新版代码执行漏洞





这里的$forceinstall参数即为通过POST接收的配置信息数值为二维数组,看到里面的dbinfo了,这里程序本身未对传入的POST值进行任何过滤,也就存在代码执行问题了。

0×02 漏洞利用

直接安装到写入配置信息的步骤;


Discuz最新版代码执行漏洞





填入正确的数据库用户名账号和密码之后抓包;





Discuz最新版代码执行漏洞





这时候看下具体配置文件,代码段为/upload/uc_server/data/config.inc.php;





Discuz最新版代码执行漏洞





我们以前缀dbinfo[table_pre]参数为利用,看到使用单引号和括号括起来,所以payload为;

payload = pre_’);phpinfo();//

发到上述抓包里点击安装即可写入配置文件;

这时候看这个配置文件;


Discuz最新版代码执行漏洞





直接访问这个文件即可执行;

http://127.0.0.1/Discuz_X3.4_GIT_SC_UTF8/dir_SC_UTF8/upload/uc_server/data/config.inc.php


Discuz最新版代码执行漏洞





0×03 防御

这个漏洞原理比较简单,针对其防御方法是需要对传入的配置信息进行转义处理,这里只要转义单引号就可以了,但是刚开始我有疑惑的点就是这里的payload在实际情况下,我们需要通过类似“爆破”的思路去测试大量payload,但是由于“安装锁”的存在,安装一次就会锁定程序生成install.lock文件防止重装,也就是“爆破”不了,那么这个漏洞是不是就利用不了呢?为了解决这个疑问,我重新看了下安装时候的源码信息,发现这个漏洞还是可以利用的;


Discuz最新版代码执行漏洞





还是在安装的文件里,第478行,可以看到在写入配置信息到config文件之后,下面还会判断当methon为ext_info的时候进行其他操作即生成安装锁文件进行锁定,到这个步骤才是完整的安装操作,也就是和之前的写入配置信息是“分开”进行的,也可通过抓包去看,比较明显,是两个不同的数据包,互相不会干涉,写入配置信息的数据包不会锁定安装程序,所以导致可通过“爆破”去利用,程序这么去设计也是业务逻辑的需求吧,如果写入配置信息的步骤即可生成安装锁文件并且结束安装的话,这个漏洞就利用不了了,除非存在任意文件删除漏洞可以去删除install.lock这个文件。
坑人啊哦

写了 291 篇文章,拥有财富 658,被 0 人关注

您需要登录后才可以回帖 登录 | 网赚注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

联系QQ:1150388920|长沙钢琴培训|网站地图|创富吧网赚论坛 |湘ICP备18012331号
Powered by 创富吧   © 2001-2019 Comsenz Inc.
返回顶部