学徒-文件类型验证缺陷-绕过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)