0x0Dcve-2019-13956

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

点击链接抓包改包

image-20201112150139079

可以看到缓存里的内容被更改了

image-20201112150217140

上传shell

image-20201112150159180

0x2 漏洞原理

在/upload/source/module/portal/portal_index.php文件中

image-20201112155957305

使用template函数处理’diy:portal/index’,然后使用include_once包含

include_once:

可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

跟进template函数:

image-20201112160428730

可以看到返回的是一个拼接值,以及相关的两个变量DISCUZ_LANG和DISCUZ_ROOT

找到它们的定义,DISCUZ_ROOT是个固定的

image-20201112162712111

DISCUZ_LANG和$lng有关

image-20201112162520552

我们可以看到$lng和cookie中的languages有关,那我们就可以控制这个变量然后改包了

image-20201112162914790