学徒-不受限制的文件上传-webshell
# 实验室:通过上传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-web-shell-upload
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 网站没有对用户上传的文件执行任何验证,上传一个 webshell 获取并提交 /home/carlos/secret 文件的内容。
点击 “ACCESS THE LAB” 进入实验室。

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

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

登录之后,在账户页面可以看到一个 上传头像 的功能。

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

上传成功。

文件的路径为/files/avatars/clincat.png
。

查看捕获的请求数据包。

在数据包中可以看到 图片名称、图片类型、图片内容等。

在上传 webshell 之前,尝试访问/files/avatars/clincat.php
,此时文件不存在。

在请求数据包中,直接将文件扩展名修改为.php
,将文件内容修改为 webshell 代码,然后发送数据包。
<?php echo system($_GET['command']); ?>
上传成功。

再次访问 webshell 文件,页面较之前发生了变化,说明该文件存在。

尝试传递参数并执行 id 命令?command=id
,命令执行成功,响应返回了执行结果。

根据题目要求,尝试读取相关文件的内容?command=cat /home/carlos/secret
,读取成功。
复制页面中的字符串。

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

答案不正确?

经过查看,发现命令执行时 回显了两次内容。
将字符串对半分开,最后得到一串长度为 32 位的f84hnkLMNuwS2w6i5i9x8lU5oFbzsDrU
。

回到实验室主页,再次提交。

提交正确,实验完成。
