从业者-阻止文件执行-通过路径遍历绕过
# 实验室:通过路径遍历上传web shell
# 题目
此实验室包含一个易受攻击的图像上传功能。服务器被配置为阻止执行用户提供的文件,但利用辅助漏洞 (opens new window)可以绕过此限制。
要解决实验室问题,请上传一个基本的 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-path-traversal
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 网站阻止了已上传文件的执行权限。
- 网站对 文件名称 的验证中存在缺陷,可以使用 目录遍历漏洞 来绕过验证,尝试上传一个 webshell 获取并提交 /home/carlos/secret 文件的内容。
点击 “ACCESS THE LAB” 进入实验室。

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

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

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

上传成功。

查看捕获的请求数据包,并将其转发至 Repeater 功能模块。

将文件扩展名修改为.php
,尝试上传一个 webshell 文件。
上传成功,并未受到任何阻拦。

在浏览器中访问 webshell 文件,文件内容以纯文本形式返回。

说明.php
文件受到了限制,无法被作为代码执行。

根据提示,我们可以利用 文件上传+路径遍历 漏洞组合拳来绕过该限制。
假设,即将上传的文件会被放到上一级目录/files/clincat.php
,此时文件还不存在。

修改请求数据包,在filename
参数中添加路径遍历序列,形成文件名../clincat.php
。
发送修改过后的数据包,上传成功,响应信息并没有什么不同。

随后访问/files/clincat.php
,文件依然不存在。

想想问题出在哪里,难道是因为文件名称中存在特殊符号?
尝试将路径遍历序列../
中的斜杠进行 URL 编码,形成新的文件名..%2fclincat.php
。
再次发送数据包,上传成功。响应信息有所不同,路径遍历序列生效了。

访问/files/clincat.php
并尝试执行命令,成功。

通过 cat 命令读取目标文件的内容。
/files/clincat.php?command=cat /home/carlos/secret
复制长度为 32 位的目标字符串。

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

提交正确,实验完成。
