CVE-2019-13956Discuz! ML远程代码执行
参考:https://www.cnblogs.com/yuzly/p/11386755.html
0x1 复现过程
这个漏洞复现起来还是很容易的,软件也是免费开源的,搭起来就没什么问题
先去下载了v3.3的版本:https://sourceforge.net/p/discuz-ml/code/ci/v.3.3/tarball?path=
然后开PHPstudy往里一放即可到网页上Install
点击链接抓包改包
可以看到缓存里的内容被更改了
上传shell
0x2 漏洞原理
在/upload/source/module/portal/portal_index.php文件中
使用template函数处理’diy:portal/index’,然后使用include_once包含
include_once:
可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。
跟进template函数:
可以看到返回的是一个拼接值,以及相关的两个变量DISCUZ_LANG和DISCUZ_ROOT
找到它们的定义,DISCUZ_ROOT是个固定的
DISCUZ_LANG和$lng有关
我们可以看到$lng和cookie中的languages有关,那我们就可以控制这个变量然后改包了