靶场安装地址:/index.php/install
漏洞成因:
对文件后缀逻辑判断不当,当上传文件后缀为php时,该in_array($extension, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf'])判断会返回false就不会继续执行后面的语句返回true。因该加一个取反。
if
(in_array($extension, [
'gif'
,
'jpg'
,
'jpeg'
,
'bmp'
,
'png'
,
'swf'
]) && !in_array($
this
->getImageType($
this
->filename), [
1
,
2
,
3
,
4
,
6
,
13
]))
漏洞的位置
漏洞地址:
/admin.php/post/add/cid/5.html
/admin.php/config/index.html
/admin.php/banner/edit/id/1.html
漏洞代码位置:
thinkphp/library/think/File.php的267行方法
分析:
下面是检查文件上传的主要验证代码,因为rule数组是空的没有被定义,所以只有红框处的函数起作用即检查文件后缀是否为图片的函数。可能在实际生成环境中rule会被定义完整。
跟进checkImg()函数即可以啊看到红框处就前一个是验证后缀
后一个判断跟进发现是判断常见类型图片的基本信息如:长宽,因为第一个判断的函数不存在所以是直接判断图片的基本信息了。因为第一个判断已经是false了并且两个判断的关系是与,所以该判断是不会执行的,不过该函数应该可以通过制作图片马进行绕过,我试了一下我现在制作的图片马绕不过去。(如有不对请指出)
发现有意思的如果你文件上传成功后网址不仅会返回文件保存地址还会去访问一次你上次的文件,可以用bp看到这现象
复现:
1、找文件上传位置,点击管理 -> 文章管理 -> 发布
2、一句话或其他利用文件
3、成功上传
4、成功访问
总结
代码逻辑问题,形成了漏洞。
参考
https://blog.csdn.net/weixin_52635170/article/details/126950674
https://github.com/wgpsec/peiqi-wiki/blob/master/PeiQi_Wiki/CMS%E6%BC%8F%E6%B4%9E/%E5%BF%AB%E6%8E%92CMS/%E5%BF%AB%E6%8E%92CMS%20%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E.md
原文始发于微信公众号(菜鸟小新):快排CMS1.2文件上传漏洞
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论