从业者-文件内容验证缺陷-多语言
# 实验室:通过上传多语言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-remote-code-execution-via-polyglot-web-shell-upload
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 网站对 文件内容 的验证中存在缺陷,尝试上传一个 webshell 获取并提交 /home/carlos/secret 文件的内容。
点击 “ACCESS THE LAB” 进入实验室。

点击 “My account” 进入登录界面。

输入题目中提供的用户名密码wiener
:peter
进行登录。

启用浏览器代理,尝试上传一张图片。

查看捕获的请求数据包,并将其转发至 Repeater 功能模块。
将文件扩展名修改为.php
,尝试上传一个 webshell 文件,上传失败。

根据前面所学,可以在文件内容中添加图像字节序列,以欺骗网站的验证措施。例如,JPEG 文件总是以字节FF D8 FF
开头。
更多图像的字节序列可以参考这篇文章 (opens new window),写得还挺全。
这些图像的字节序列基本上都是由 十六进制 格式组成的,无法正常输入,有以下解决方法:
- 制作图片马,将图像内容 与 webshell 代码相结合。
- 通过 Repeater 中的 HEX 功能添加相关字符。
- ......
制作图片马是最好的方式,不容易出错。
但,对于一个懒人来说,能摆则摆。我们可以直接使用.gif
文件中的文件头GIF89a
。
如图,在 webshell 代码的上方添加一行,内容为GIF89a
,该字符串是 GIF 文件的文件头,属于可见字符,可以直接写入。

文件上传成功之后,访问该文件,在页面中可以看到图像文件头。

尝试传递参数并执行命令,成功。

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

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

提交正确,实验完成。
