侵权声明
本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。
如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: [360619623@qq.com]。我们将在确认后的合理时间内采取适当措施,包括删除相关内容。
感谢您的理解与支持
漏洞成因:
对文件后缀逻辑判断不当,当上传文件后缀为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
免责声明
本博客所提供的技术知识和信息仅旨在教育和分享网络安全最佳实践,促进网络安全意识的提升。作者严禁将这些技术和信息用于任何非法或不道德的目的。
使用本博客内容而导致的任何违法行为或后果,作者不承担任何法律责任。所有读者在使用本博客的信息时,应自行承担风险,并确保遵守当地法律法规。
我们鼓励所有读者合法地使用所提供的信息和技术,致力于维护安全和负责任的网络环境。
感谢您的理解与支持。