文件上传漏洞

本地验证 JS禁用、Burp改包、本地提交 后缀黑名单验证 大小写、加空格、符号点(系统特性)、::$DATA(Windows平台) 过滤不迭代问题 例如,".php. .“方法:这针对的是在过滤中,代码中去掉末尾的点,再首位去空,再进行后缀过滤点情形。 后缀白名单验证 MIME(使用FILETYPE而不是后缀验证) 后缀白名单验证 MIME、%00、0x00截断 其中,MIME主要修改Content-Type项; %00和0x00主要影响某些版本的PHP(CVE-2015-2348,PHP 5.4.38~5.6.6)。在文件名中插入,比方说x.php%00.jpg,并且URL-Decode后(URL中不用转换),作为文件名,即可截断后缀。 ⚠️这里注意区分,GET请求对%00进行编码,POST不对%00编码。%00自动编码后将变成%25%30%30,而这不是我们需要的。 图片后门 单纯文件头验证不安全,需要配合后缀检测。 过滤<?怎么办? 使用多种php标记方法,如 <script language="php"> eval($_POST['xd']); </script> 二次渲染 上传的图片被修改后显示出来(尺寸或格式)。例如: copy shell.jpg/b + shell.php/a s.jpg 将图片与后门合并后上传,若存在二次渲染,则后门可能失效。此时,应该对比上传前后的文件,观察二次渲染后文件的哪个部分不变,再将后门写入那个部分。 常见问题 单次过滤 php函数replace过滤"php”,但把文件名改成".pphphp"就可以绕过 条件竞争 php函数move_uploaded_file,先移动后过滤unlink。可以在删除前访问。 具体来说,可以在不断上传的过程中不断访问之,这个文件进行一个写入操作。(借助burp) 解析安全 格式变异 过滤时只过滤了php后缀,没有过滤php3、php4、php5、phtml等php程序 中间件解析(apache) 上传一个.htaccess,它可以更改目录下特定后缀的解析规则 <FilesMatch "shell.jpg"> SetHandler application/x-httpd-php </FilesMatch> CVE-2013-4547 Nginx文件名逻辑漏洞 NGINX解析问题:后缀"1.jpg/.php" 针对性思路总结 CMS类 无资料时用常规测试思路,有资料参考资料即可。 编辑器 Ueditor 中间件 weblogic CVE-2018-2894 CTF类 ThinkPHP 文件路径(涉及代码审计)

October 8, 2021 · 1 min · alvazu