学徒-文件类型验证缺陷-绕过ContentType限制
# 实验室:绕过Content-Type限制并上传web shell
# 题目
此实验室包含一个易受攻击的图像上传功能。它试图阻止用户上传意外的文件类型,但该措施通过 检查用户可控制的输入 来实现这一点。
要解决实验室问题,请上传一个基本的 PHP Web shell 并使用它来外泄文件/home/carlos/secret的内容,然后使用实验室横幅中提供的按钮,提交文件中的隐藏值。
你可以使用以下凭据登录到自己的帐户:wiener:peter
- name: 实验室-学徒
desc: 绕过Content-Type限制并上传web shell >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-content-type-restriction-bypass
bgColor: '#001350'
textColor: '#39d50c'
1
2
3
4
5
6
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 网站对 文件类型 的验证中存在缺陷,尝试上传一个 webshell 获取并提交 /home/carlos/secret 文件的内容。
点击 “ACCESS THE LAB” 进入实验室。
点击 “My account” 进入登录界面。
输入题目中提供的用户名密码wiener:peter进行登录。
启用浏览器代理,尝试上传一张图片。
上传成功。
查看捕获的请求数据包,并将其转发至 Repeater 功能模块。
将文件扩展名修改为.php,尝试上传一个 webshell 。
<?php echo system($_GET['command']); ?>
1
上传成功,就跟没有限制一样。
此时Content-Type标头的值为image/png。
修改Content-Type的值为image/php,上传失败,不允许上传该类型的文件。
网站是通过Content-Type标头来判断文件类型的,一开始上传的文件为.png所以直接通过了该验证。
访问 webshell 文件,通过命令执行获取目标文件的内容。
/files/avatars/clincat.php?command=cat /home/carlos/secret
1
复制长度为 32 位的目标字符串。
回到实验室主页,点击上方的 “Submit solution” 打开输入框,填入刚刚获得的文件内容,然后点击 “确定” 。
提交正确,实验完成。

编辑 (opens new window)