从业者-模糊匹配缺陷-混淆文件扩展名
# 实验室:通过混淆文件扩展名上传web shell
# 题目
此实验室包含一个易受攻击的图像上传功能。某些文件扩展名被列入黑名单,但可以使用经典的混淆技术来绕过这种防御。
要解决实验室问题,请上传一个基本的 PHP Web shell 并使用它来外泄文件/home/carlos/secret
的内容,然后使用实验室横幅中提供的按钮,提交文件中的隐藏值。
你可以使用以下凭据登录到自己的帐户:wiener
:peter
- name: 实验室-从业者
desc: 通过混淆文件扩展名上传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-obfuscated-file-extension
bgColor: '#001350'
textColor: '#4cc1ff'
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 文件,上传失败。

随后经过了一段时间的尝试......(2000 YEARS LATER......)
第一次尝试00截断,我在 HEX 中添加了一个十六进制为 00 的不可见字符,上传失败了。
第二次尝试00截断,我直接在文件名称处添加了 URL 编码之后的 00 字符,形成clincat.php%00.png
。
- 在上传时,验证措施会检查
.png
扩展名,该扩展名符合要求,允许上传。 - 在保存文件时,由于处理函数的底层缺陷,字符 00 之后的所有内容都会被截断,最后只剩下
clincat.php
。

访问 webshell 文件并尝试执行命令,成功。

通过 cat 命令获取目标文件的内容,复制长度为 32 位的目标字符串。

回到实验室主页,点击上方的 “Submit solution” 打开输入框,填入刚刚获得的文件内容,然后点击 “确定” 。

提交正确,实验完成。

编辑 (opens new window)