
本实验室包含一个存在漏洞的图片上传功能。该功能在将用户上传的文件存储到服务器文件系统之前,不会对其进行任何验证。
要完成此实验,请上传一个基本的 PHP Web Shell 并使用它来窃取文件内容/home/carlos/secret。使用实验横幅中提供的按钮提交此密钥。
您可以使用以下凭据登录您自己的帐户:wiener:peter
漏洞原理分析
这个靶场的核心漏洞是文件上传漏洞,具体表现为:
- 缺乏文件类型验证:服务器未对上传文件的类型(如扩展名、MIME 类型)进行有效检查,允许上传.php 等可执行脚本文件。
- 文件直接存储并可访问:上传的文件被存储在服务器的 Web 可访问目录(如 /files/avatars/)下,且能通过 URL 直接访问,导致上传的 PHP 脚本被服务器解析执行,从而实现远程代码执行(RCE)。
实际解决步骤
1. 登录账号并分析上传功能
- 使用提供的账号(wiener:peter)登录靶场。
- 找到头像上传功能,先上传一张正常图片(如.jpg 文件),观察上传后的返回信息和图片访问路径,从页面元素推断路径。



2. 构造恶意 PHP 脚本
创建一个名为exploit.php的文件,内容为读取目标文件的 PHP 代码:
<?php echo file_get_contents('/home/carlos/secret'); ?>
该脚本的作用是读取/home/carlos/secret文件的内容并输出。
3. 上传恶意脚本
通过头像上传功能,将exploit.php文件上传(服务器未验证文件类型,会直接接收)。


PHP 脚本,返回/home/carlos/secret文件的内容(即目标 secret)。
5. 提交 secret 完成靶场
将获取到的 secret 内容通过靶场 banner 的提交按钮提交,完成挑战。
总结
- 漏洞核心:服务器未验证上传文件类型,且上传的可执行脚本可被直接访问解析,导致 RCE。
- 利用关键:构造恶意 PHP 脚本读取敏感文件,通过上传功能植入脚本后访问执行。
- 防御建议:对上传文件进行扩展名、MIME 类型、文件内容验证,将上传文件存储在非 Web 可访问目录,或使用随机文件名并限制文件访问权限。

3099

被折叠的 条评论
为什么被折叠?



