portswigger靶场之通过 Web Shell 上传进行远程代码执行通关秘籍

本实验室包含一个存在漏洞的图片上传功能。该功能在将用户上传的文件存储到服务器文件系统之前,不会对其进行任何验证。

要完成此实验,请上传一个基本的 PHP Web Shell 并使用它来窃取文件内容/home/carlos/secret。使用实验横幅中提供的按钮提交此密钥。

您可以使用以下凭据登录您自己的帐户:wiener:peter

漏洞原理分析

这个靶场的核心漏洞是文件上传漏洞,具体表现为:

  1. 缺乏文件类型验证:服务器未对上传文件的类型(如扩展名、MIME 类型)进行有效检查,允许上传.php 等可执行脚本文件。
  2. 文件直接存储并可访问:上传的文件被存储在服务器的 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 的提交按钮提交,完成挑战。

总结

  1. 漏洞核心:服务器未验证上传文件类型,且上传的可执行脚本可被直接访问解析,导致 RCE。
  2. 利用关键:构造恶意 PHP 脚本读取敏感文件,通过上传功能植入脚本后访问执行。
  3. 防御建议:对上传文件进行扩展名、MIME 类型、文件内容验证,将上传文件存储在非 Web 可访问目录,或使用随机文件名并限制文件访问权限。
PortSwigger 靶场中,RCE(Remote Code Execution,远程代码执行)漏洞的实验通常涉及利用用户输入中的缺陷,执行任意代码或命令。这些实验通常要求用户识别并利用代码注入、命令注入或文件上传等漏洞。 ### RCE 漏洞类型与利用方法 #### 1. **命令注入(Command Injection)** 命令注入是一种常见的 RCE 类型,攻击者通过将恶意命令注入到应用程序的系统命令中,从而在服务器端执行任意命令。例如,在某些 Web 应用中,后端可能使用 `exec()` 或 `system()` 函数来执行系统命令。如果用户输入未正确过滤或转义,攻击者可以注入额外的命令。 ```python # 示例:Python 中的命令注入(不推荐) import os os.system(f"ping {user_input}") ``` 利用方法通常包括使用分号 `;`、管道符 `|` 或 `&&` 来分隔原始命令并附加恶意命令。例如,注入 `; rm -rf /` 可能导致删除服务器上的文件 [^2]。 #### 2. **代码注入(Code Injection)** 代码注入与命令注入不同,它涉及在应用程序的代码逻辑中插入恶意代码。例如,在 PHP 中,`eval()` 函数可能会被滥用,攻击者可以通过构造输入来执行任意 PHP 代码。 ```php // 示例:PHP 中的代码注入 eval("\$output = \"$user_input\";"); ``` 利用代码注入时,攻击者可以注入恶意代码,如 `phpinfo()` 或更危险的函数,以获取服务器信息或执行任意操作 [^1]。 #### 3. **文件上传漏洞(File Upload Vulnerability)** 某些 RCE 漏洞可能通过文件上传功能实现。攻击者可以上传包含恶意代码的文件(如 `.php` 或 `.phtml` 文件),然后通过访问该文件来执行代码。常见的绕过方法包括: - 上传文件名绕过(如 `shell.php.jpg`) - 文件内容绕过(如在图片文件中嵌入 PHP 代码) #### 4. **反序列化漏洞(Deserialization Vulnerability)** 反序列化漏洞可能导致 RCE,特别是在 PHP、Java 或 Python 等语言中。攻击者可以通过构造恶意序列化数据,在反序列化过程中触发任意代码执行。 --- ### PortSwigger 靶场 RCE 实验通关技巧 1. **识别输入点**:查找应用程序中接受用户输入的地方,例如表单、URL 参数或 HTTP 头。 2. **测试注入点**:尝试在输入字段中注入特殊字符,如 `;`, `|`, `&`, 或 `eval()`,观察是否可以执行命令。 3. **利用盲注技术**:在某些情况下,服务器不会返回执行结果,需要使用盲注技术,如通过 DNS 请求或 HTTP 请求来确认漏洞是否存在。 4. **使用 Burp Suite**:PortSwigger 提供的 Burp Suite 是测试 RCE 漏洞的重要工具,可以拦截和修改请求,快速测试不同注入向量。 5. **查阅官方文档**:PortSwigger Academy 提供了详细的实验指南,建议参考其官方文档和实验步骤进行练习 [^2]。 --- ### 安全防护建议 - **过滤用户输入**:对所有用户输入进行严格的验证和过滤,避免直接将其用于系统命令或代码执行。 - **使用白名单机制**:对文件上传功能实施白名单机制,限制允许上传的文件类型。 - **避免使用危险函数**:如 `eval()`、`exec()`、`system()` 等,尽量使用更安全的替代方案。 - **启用 Web 应用防火墙(WAF)**:WAF 可以帮助检测和阻止常见的 RCE 攻击模式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值