2023-05-14 03:52:53
文件上传漏洞中的黑名单双写绕过是一种通过重复写入被黑名单过滤的扩展名来绕过服务器安全限制的技术手段。具体分析如下:
原理服务器采用黑名单机制过滤危险文件扩展名(如.php),但若仅简单删除或替换黑名单中的字符串,攻击者可通过重复写入被过滤的扩展名(如将phpinfo.php改为phpinfo.pphphp)使服务器过滤后残留有效扩展名(如.php),从而成功上传恶意脚本。
操作步骤
环境搭建:安装phpstudy环境,将upload-labs放入网站根目录。

直接上传测试:上传phpinfo.php,发现服务器过滤了.php扩展名。


拦截修改请求:通过Burp Suite拦截上传请求,将文件名从phpinfo.php改为phpinfo.pphphp。



绕过结果:服务器过滤中间重复的php后,残留.php扩展名,文件可被解析执行。

黑名单代码示例服务器通过str_replace函数删除黑名单中的字符串(如php),但未递归处理或检查文件实际扩展名,导致双写绕过。

防御建议
白名单机制:仅允许上传安全扩展名(如.jpg、.png)。
文件内容检测:通过检查文件头或魔法数字验证文件类型。
重命名文件:上传后由服务器生成随机文件名,避免执行恶意脚本。
递归过滤:对文件名进行多次过滤,防止双写绕过。