第五关 通过混淆文件扩展名上传 Web shell
这一关就是上传功能点只允许上传jpg/png图片文件,那么就通过混淆文件扩展名绕过服务端限制,实现恶意文件上传
提示:1、靶场包含易受攻击的图片上传功能
2、某些文件扩展名被列入黑名单,但可以使用经典的混淆技术绕过这种防御
3、请上传一个基本的 PHP Web shell,然后使用它来窃取文件 /home/carlos/secret 的内容
具体操作
1、正常登录用户wiener:peter,上传正确格式的头像图片,上传成功,然后返回“我的账户”(具体操作见第四功)
2、接下来尝试上传恶意php文件
创建一个名为 exploit.php 的文件,其中包含用于获取 Carlos 密钥内容的脚本:
<?php echo file_get_contents('/home/carlos/secret'); ?>

3、提示上传错,只允许上传jpg/png文件

那么有限制该怎么绕过呢?
4、先找到用于提交文件上传的 POST /my-account/avatar 请求
然后找到与 PHP 文件相关的正文部分。在 Content-Disposition 标头中,更改 filename 参数的值,以包含 URL 编码的空字节,后跟 .jpg 扩展名:
改成:filename="exploit.php%00.jpg"
解释其中的 %00 就是典型的 “空字节注入”(Null Byte Injection),也常被称为 “%00截断” 或 “URL编码的空字符截断”。
返回200ok,说明恶意文件上传成功


现在直接打开上传的文件进行查看,直接访问/files/avatars/exploit.php
恶意文件使用00截断上传成功后,直接访问恶意文件路径,然后暴露出秘钥
GAUhRhewuNK4tECqVtv8u3pLsqQIfcHS

提交用户秘钥,靶场过关
