# 渗透测试笔记（五）远程命令注入



**远程命令注入**（Remote Command Injection，简称 RCE）是一类严重的安全漏洞，通常出现在 Web 应用或网络服务中。它允许攻击者向目标服务器发送恶意命令，从而在服务器上执行任意代码。对渗透测试者而言，远程命令注入不仅提供了直接控制目标系统的途径，还能帮助进一步扩展攻击面，提升权限或植入持久后门。

## 一、注入场景

### 1. 命令行参数传递

这是命令注入最直接的表现形式。应用程序使用 `system()`、`exec()`、`popen()` 等函数或直接执行 Shell 脚本，将用户输入直接拼接到命令行并在 Shell 中执行。只要攻击者能够控制输入，就可能借助特殊字符（如 `;`、`&&` 等）在 Shell 中分隔和注入其他命令。

### 2. 文件操作或网络工具调用

此场景应隶属于上一场景，但此场景的特征更为明显。应用程序调用系统工具（如 `ping`、`curl`、`nslookup` 等）并将用户输入作为参数，执行外部命令时，如果没有处理输入，就可能被攻击者插入额外命令。

### 3. 文件上传中的命令注入

文件上传注入是一种间接的命令注入攻击。攻击者通过上传恶意文件（如带有木马的 PHP 文件），并在服务器上执行该文件，从而获得对系统的控制。

此方式主要依赖**服务器是否能够执行上传的文件**，举一个最简单的例子，如果允许上传 `.php` 等可执行文件到网站目录下，则可通过网站自带的 php 解析功能执行恶意代码。但往往服务器具有类型检查，只允许上传图片等特定文件，此时则需要伪装木马，但难点在于让木马被解析执行，例如 php 通过 `include` 解析一个含有木马代码的图片文件。

## 二、注入木马示例

### php 木马

一句话 php 木马

```php
<?php system($_POST['cmd']); ?>
```

但 `system` 这些函数是被默认禁用的，此时可退而求其次，试一试 `eval`.

```php
<?php @eval($_POST['phpcode']); ?>
```

## 三、绕过检测

- **请求头检测**：修改请求头的 MIME 类型
- **后缀检测**：使用 `.php3`、`.phtml` 等可以被服务器识别为 PHP 的扩展名；使用 `.pphphp` 双写绕过； `%00` 截断技巧；或上传允许的后缀名然后寻找执行漏洞。
- **图像魔术字检测**：`cat muma.php origin.png >> 1.png` 可伪造一个图片木马，然后寻找执行漏洞。


---

> 作者: [fupcode](https://github.com/fupcode)  
> URL: https://fupcode.com/blog/posts/reverse-engineering/learning-reverse5/  

