本文最后更新于162 天前,其中的信息可能已经过时,如有错误请发送邮件到fupcode@outlook.com
远程命令注入(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 system($_POST['cmd']); ?>
但 system
这些函数是被默认禁用的,此时可退而求其次,试一试 eval
.
<?php @eval($_POST['phpcode']); ?>
三、绕过检测
- 请求头检测:修改请求头的 MIME 类型
- 后缀检测:使用
.php3
、.phtml
等可以被服务器识别为 PHP 的扩展名;使用.pphphp
双写绕过;%00
截断技巧;或上传允许的后缀名然后寻找执行漏洞。 - 图像魔术字检测:
cat muma.php origin.png >> 1.png
可伪造一个图片木马,然后寻找执行漏洞。