Discuz!ML 3.x任意代码执行漏洞
#漏洞综述
漏洞类型:代码执行漏洞
影响系统及版本:Discuz!ML V3.2-3.4
漏洞原因:Discuz!ML 系统对cookie中的l接收的language参数内容未过滤,导致字符串拼接,从而执行php代码。
#漏洞poc
1 | GET /Discuz/upload/forum.php HTTP / 1.1 |
#漏洞分析
1.在PoC的代码中填充’.1.’使得代码出错,定位出错代码文件:
2.报错点1:portal.php 第35行,
紧接着定位libfile函数,文件加载路径函数(command+B)。该函数读取source目录下的$folder子目录作为基础部分。
该函数读取source目录下的$folder子目录作为基础部分,realpath函数为返回绝对路径函数,DISCUZ_ROOT为定义网站根目录的常量。
=>原因是系统因为找不到一个php文件而报的错。
3.报错2:source/moudle/portal_index.php
第32行
定位template函数,文件加载路径函数/source/function/function_core.php
(command+B)。该函数作用也是调用模版。
程序将缓存文件写在了/data/template/
目录下,文件名由DISCUZ_LANG等多个变量组成,追溯DISCUZ_LANG的输入为$_config['output']['language']
继续跟进该值(command+shift+F)
=>DISCUZ_LANG值为Cookie中获取到的language($lng),未设置过滤
4.总结
1 | 1.从cookie中获取了language的值(可控) |
#复现
抓包并在在language参数处’.phpinfo().’
#参考
Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析
https://www.freebuf.com/vuls/208457.html
Discuz!ML V3.X代码注入复现与原理分析
https://museljh.github.io/2019/07/15/Discuz!ML%20V3.X%20%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5%E5%A4%8D%E7%8E%B0%E4%B8%8E%E5%88%86%E6%9E%90/
Discuz!ML V3.X 代码注入分析
https://mp.weixin.qq.com/s/5Zl3Jve4eblNIXh30t469w