2024 polarctf 冬季个人挑战赛 web wp
字数 1173 2025-08-22 18:37:15

PolarCTF 2024 冬季个人挑战赛 Web 题目解析与教学文档

1. 简单的导航站

题目考点

  • MD5强绕过
  • 文件上传漏洞
  • Burp Suite爆破模块使用

解题步骤

  1. 注册账号:首先尝试注册一个普通用户账号

  2. MD5强比较绕过

    • 发现系统使用MD5强比较验证用户
    • 使用特殊构造的MD5碰撞字符串:
      user1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
      user2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
      
  3. 爆破管理员账号

    • 在首页发现密码提示
    • 使用Burp Suite爆破,发现管理员用户名为:P0la2adm1n
  4. 文件上传

    • 以管理员身份登录后进入文件上传功能
    • 上传一句话木马
    • 使用蚁剑连接获取webshell
  5. 获取flag

    • 发现系统中有多个flag文件
    • 使用flag认证系统爆破获取最终flag

2. 井字棋

解题步骤

  1. 查看网页源码
  2. 发现可以通过给who参数赋值来直接获胜
  3. 构造请求修改who参数值

3. 狗黑子的RCE

题目代码

<?php 
error_reporting(0);
highlight_file(__FILE__);
header('content-type:text/html;charset=utf-8');
$gouheizi1 = $_GET['gouheizi1'];
$gouheizi2 = $_POST['gouheizi2'];
$gouheizi2 = str_replace('gouheizi','',$gouheizi2);

if(preg_match("/ls|dir|flag|type|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|n|\t|\r|\xA0|d]i",$gouheizi1)){
    echo("badly!");
    exit;
}

if($gouheizi2 === "gouheizi"){
    system($gouheizi1);
}
else{
    echo "gouheizi!";
}
?>

解题步骤

  1. 第一关:使用双写绕过过滤

    • 例如:llss会被处理为ls
  2. 第二关:使用反斜杠绕过

    • 例如:c\at可以绕过cat的过滤

4. xxmmll

解题步骤

  1. 检查响应头,发现一个PHP文件地址
  2. 判断为XML文件读取漏洞(XXE)
  3. 构造XXE攻击payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file://flag" >
]>
<root>
<name>&xxe;</name>
</root>

5. 赌王

解题步骤

  1. 爆破尝试获取提示
  2. 访问提示文件ed3d2c21991e3bef5e069713af9fa6ca.php
  3. 发现输入框,尝试XSS
  4. 根据提示使用confirm弹窗
  5. 访问e744f91c29ec99f0e662c9177946c627.php
  6. 需要伪造IP为1.1.1.1才能执行命令
    • 使用HTTP头X-Forwarded-For: 1.1.1.1

6. 任务cmd

解题步骤

  1. 检查响应头获取线索
  2. 爆破密码123123成功
  3. 根据源码提示将id参数改为xiaohei
  4. 目录扫描发现login.php
  5. 爆破密码flower成功
  6. 根据题目猜测参数为cmd执行命令

7. 坦诚相见

解题步骤

  1. 发现可执行命令但有WAF限制
  2. 查看no.php文件发现WAF规则
  3. 删除WAF文件:rm no.php
  4. 使用sudo权限查看flag:
    sudo cat /f*
    

防御建议

  1. MD5比较

    • 避免使用简单的MD5比较
    • 使用加盐哈希或更安全的哈希算法如SHA-256
  2. 文件上传

    • 限制上传文件类型
    • 检查文件内容而不仅是扩展名
    • 将上传文件存储在非web可访问目录
  3. 命令执行

    • 避免直接使用用户输入执行系统命令
    • 使用白名单过滤而非黑名单
    • 对特殊字符进行严格过滤
  4. XXE防御

    • 禁用外部实体加载
    • 使用简单的XML解析器
  5. 认证安全

    • 使用强密码策略
    • 实施账户锁定机制
    • 使用多因素认证
  6. 输入验证

    • 对所有用户输入进行严格验证
    • 使用参数化查询防止SQL注入
  7. 日志与监控

    • 记录所有敏感操作
    • 设置异常行为警报
PolarCTF 2024 冬季个人挑战赛 Web 题目解析与教学文档 1. 简单的导航站 题目考点 MD5强绕过 文件上传漏洞 Burp Suite爆破模块使用 解题步骤 注册账号 :首先尝试注册一个普通用户账号 MD5强比较绕过 : 发现系统使用MD5强比较验证用户 使用特殊构造的MD5碰撞字符串: 爆破管理员账号 : 在首页发现密码提示 使用Burp Suite爆破,发现管理员用户名为: P0la2adm1n 文件上传 : 以管理员身份登录后进入文件上传功能 上传一句话木马 使用蚁剑连接获取webshell 获取flag : 发现系统中有多个flag文件 使用flag认证系统爆破获取最终flag 2. 井字棋 解题步骤 查看网页源码 发现可以通过给 who 参数赋值来直接获胜 构造请求修改 who 参数值 3. 狗黑子的RCE 题目代码 解题步骤 第一关 :使用双写绕过过滤 例如: llss 会被处理为 ls 第二关 :使用反斜杠绕过 例如: c\at 可以绕过 cat 的过滤 4. xxmmll 解题步骤 检查响应头,发现一个PHP文件地址 判断为XML文件读取漏洞(XXE) 构造XXE攻击payload: 5. 赌王 解题步骤 爆破尝试获取提示 访问提示文件 ed3d2c21991e3bef5e069713af9fa6ca.php 发现输入框,尝试XSS 根据提示使用 confirm 弹窗 访问 e744f91c29ec99f0e662c9177946c627.php 需要伪造IP为 1.1.1.1 才能执行命令 使用HTTP头 X-Forwarded-For: 1.1.1.1 6. 任务cmd 解题步骤 检查响应头获取线索 爆破密码 123123 成功 根据源码提示将 id 参数改为 xiaohei 目录扫描发现 login.php 爆破密码 flower 成功 根据题目猜测参数为 cmd 执行命令 7. 坦诚相见 解题步骤 发现可执行命令但有WAF限制 查看 no.php 文件发现WAF规则 删除WAF文件: rm no.php 使用sudo权限查看flag: 防御建议 MD5比较 : 避免使用简单的MD5比较 使用加盐哈希或更安全的哈希算法如SHA-256 文件上传 : 限制上传文件类型 检查文件内容而不仅是扩展名 将上传文件存储在非web可访问目录 命令执行 : 避免直接使用用户输入执行系统命令 使用白名单过滤而非黑名单 对特殊字符进行严格过滤 XXE防御 : 禁用外部实体加载 使用简单的XML解析器 认证安全 : 使用强密码策略 实施账户锁定机制 使用多因素认证 输入验证 : 对所有用户输入进行严格验证 使用参数化查询防止SQL注入 日志与监控 : 记录所有敏感操作 设置异常行为警报