目录

 page1

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

LESS2 GET - Error based - Intiger based (基于错误的GET整型注入) 

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

 Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

Less-14 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注)

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

 Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

 Less-19 POST - Header Injection - Referer field - Error based (基于头部的Referer POST报错注入)

 Less-20 POST - Cookie injections - Uagent field - Error based (基于错误的cookie头部POST注入)

page2

Less-21 Cookie Injection- Error Based- complex - string

Less-22 Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入)

 Less-23 GET - Error based - strip comments (基于错误的,过滤注释的GET型)

 Less - 24 Second Degree Injections Real treat -Store Injections (二次注入)

Less-25 Trick with OR & AND (过滤了or和and)

 Less-25a Trick with OR & AND Blind (过滤了or和and的盲注)

Less-26 Trick with comments and space (过滤了注释和空格的注入)

less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了空格和注释的盲注)

less 27 GET - Error Based- All your UNION & SELECT belong to us (过滤了union和select的)

less 27a GET - Blind Based- All your UNION & SELECT belong to us

 less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于错误的,有括号的单引号字符型,过滤了union和select等的注入)

less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括号的单引号字符型,过滤了union和select等的注入

Less-29 基于WAF的一个错误

Less-30 Get-Blind Havaing with WAF 

Less-31 Protection with WAF 

Less-32 Bypass addslashes()

 Less-33 Bypass addslashes()

Less-34 Bypass Add SLASHES

 Less-35 why care for addslashes()

 Less-36 Bypass MySQL Real Escape String

 Less-37- MySQL_real_escape_string

 page-3

Less-38 stacked Query

Less-39 stacked Query Intiger type

Less-40 stacked Query String type Blind

Less-41 stacked Query Intiger type blind

Less-42 - Stacked Query error based

less43 POST -Error based -String -Stacked with tiwst(POST型基于错误的堆叠变形字符型注入) 

Less-44 - Stacked Query blind

less-45 基于报错的password处的’)闭合注入


 page1

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

首先输入参数?id=1,这时页面正常显示,并不报错。

 这时我们输入?id=1‘时出现报错,可以判断它是单引号注入

 常规注入,判断字段数,当我们order by10时,发生错误,然后我们用二分法判断有几个字段(向上取整)。

 当我们到order by 3 时没有报错,这时候我们试试order by 4,发现报错,说明只有三个字段。

 然后我们看回显,用语句 union select 1,2,3发现显示的还是用户名和密码,这就需要让前面的语句报错才可以将此语句注入进去,这时我们往1前面加一个-就可以报错,从而执行我们注入的语句,发现2,3,可以回显。

现在我们就可以进行注入了,但是如何获取用户名数据库名等等呢,我总结了出来:

查看用户名:union select 1,2,user()--+

查看数据库名:union select 1,2,database()--+

查看数据库版本: union select 1,2,version()--+

我们查看数据库名,是security数据库

 然后我们就可以进行对security数据库的查看了。

查看表:union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

查字段:union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()--+

 查表中的数据:union select 1,2,group_concat(username,0x3a,password) from users--+

LESS2 GET - Error based - Intiger based (基于错误的GET整型注入) 

 根据报错信息我们可以知道为数字型注入,其余与第一题一致。

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

根据报错信息我们发现它是字符型注入,且闭合方式为’)

 当我们发现这样写时,就可以闭合,之后的与上面两个一致。

http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,3 --+

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

当我们输入单引号是,发现不报错,双引号时报错,根据报错信息我们可以推断是字符型注入,闭合方式为”)。

当我们发现这样写时,就可以闭合,之后的与上面两个一致。

http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,3 --+

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

在这一关我们会发现无论id值如何变化,永远显示的都是you are in。显然我们不能采用联合查询的方法,因为没有回显。看到这里,我们就可以用left函数来尝试一下

http://127.0.0.1/sqli/Less-5/?id=1' and left((select database()),1)='a'--+

这里的意思是如果第一个字符是a的话就证明正确,就会返回you are in

很明显没有返回,第一个字母不是a,因为我们已经知道了是security,我们试试s

 http://127.0.0.1/sqli/Less-5/?id=1' and left((select database()),1)='s'--+

s正确,返回了you are in,然后我们更改1为2,因为第一位已经确定了是s,就来确定第二位 

 以此类推,就能得到我们想要的数据库名,但是这种方法显然特别繁琐,这时候就要用到我们的burp暴力破解了。

首先用burp抓包,发送到破解模块

 设置暴力破解

 

 在爆破出来的数据中我们发现s的长度不同,下面也正常返回了you are in,说明第一位为s

然后我们猜解第二位,与上面只有这里不同,下面已经标记,以此类推 

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

当我们输入单引号是,发现不报错,双引号时报错,根据报错信息我们可以推断是字符型注入,闭合方式为”。

 剩余的与第五关一致。

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

在我们准备闭合语句是,发现到了'))时可以闭合

 之后的就跟之前的相同了。

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

当我们试用‘时,它闭合

 没有回显,我们可以试试盲注

 延迟了5s,且第一个字符是s。

如果试用其他字符,可以看到有明显差别

 也可以用ascii码来查找

http://127.0.0.1/sqli-labs/Less-8/?id=1' and if(ascii(substr(database(),1,1))>1,sleep(5),sleep(1)) --+

 Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

我们查看源码,发现是单引号闭合

我们试试时间盲注 这样仍然可行,其余同less5

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

 查看源码,闭合方式为“

 其余同less9.

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

 尝试用admin登录,发现回显

post: 

发现order by2可以  3不可以

我们查看回显,发现回显1,2

 接下来我们正常查询即可 

 这样就可以查出自己想要的数据了

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

在我们尝试找出闭合是发现其闭合方式为“)

 在对其进行post注入时改一下闭合方式即可,其余同less11

Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

当我们加上’是发现报错,根据报错提示我们发现闭合形式为‘)

 在我们登录成功后发现没有回显

直接基于时间的盲注即可。同1-10关,只是在burp里面修改即可

Less-14 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

 他没有任何回显,就只能盲注了。

less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注)

查看源码我们发现他是’闭合

 我们使用admin and sleep(10)#进行盲注,然后用if,其余同上。

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)

当测试到admin“)#时登录成功,闭合方式为”),依旧是进行布尔盲注和时间盲注

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

我们可以看到用户名被check_input包裹了,而passwd没有 

这是它的检查函数,传入的值只会检查前15位

 Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

我们尝试直接burp,在我们burp并且登录成功后,发现UA可以注入并且回显

 但是没有我们想要的东西,尝试报错注入后就可以得到我们想要的东西

 Less-19 POST - Header Injection - Referer field - Error based (基于头部的Referer POST报错注入)

这里和上面比较相似,只是在referer处的回显。查看界面,我们发现它将ip和referer进行了输出

 输入单引号,发生了报错

 我们使用报错注入:1' and extractvalue(1,concat(0x7e,(database()),0x7e)) and '

这样就能拿到我们所需要的数据

 Less-20 POST - Cookie injections - Uagent field - Error based (基于错误的cookie头部POST注入)

在我们登录成功后,发现返回了很多数据

 这里有一个按钮,发现可以点击delete your cookie。所以用的使我们的cookie进行了数据库的查询,所以我们应该在这里入手。

输入单引号,发生报错

 我们正常进行,输入order by 3发现可以,4不可以

 我没让查询失败,查看1,2,3的位置

 然后就跟正常查询一样即可

page2

Less-21 Cookie Injection- Error Based- complex - string

查看源码我们发现这里的cookie使用了base64的加密,用')闭合 

给大家分享一个解密网站:在线加密解密 (oschina.net)

在我们进行注入时,要将代码进行加密,否则会报错。举例如下

 在进行注入时就要用base64的进行注入了

  这里成功回显,接下来就是正常注入了,只不过需要用base64加密一下。

Less-22 Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入)

根据源码我们发现使用的是双引号闭合

 接下来就跟less21一样了,只不过闭合方式变成了“

明文:-admin" union select 1,2,database()#

base64:LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

 Less-23 GET - Error based - strip comments (基于错误的,过滤注释的GET型)

经过我的网络查询,我发现这关可以将联合语句直接放入id中进行查询

http://127.0.0.1/sqli/Less-23/?id='union select 1,2,database()'

 这样可以直接将我们想要的东西给查询出来,剩下的就是把查询语句放入id里面即可。

例如:查表:http://127.0.0.1/sqli/Less-23/?id=?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'='

 Less - 24 Second Degree Injections Real treat -Store Injections (二次注入)

这里是个二次注入

 其实因为我们已经知道了后台数据库中有admin用户名,所以我们注册一个admin'#,密码设置为123456.

 

 然后登录我们注册的账号

然后把admin'#的密码改为123 这时我们就修改了admin的密码。

Less-25 Trick with OR & AND (过滤了or和and)

查看源码,单引号包裹

这里说过滤了我们所有的or和and

 那么我们就可以进行双写,这里or双写但是and没有,那我们试试把and也双写。

 双写and后

 Less-25a Trick with OR & AND Blind (过滤了or和and的盲注)

 查看源码,不需要单引号包裹

 也是双写or和and,其余同上。

Less-26 Trick with comments and space (过滤了注释和空格的注入)

 查看源码,是单引号闭合

 这里我们发现他将空格,and都过滤了,and可以双写,那么空格怎么办。

 我们可以用url编码进行绕过

%09 Tab键(水平)
%0a 新建一行
%0c 新的一页
%0d return 键
%0b Tab键(垂直)
%a0 空格
() 绕过

我们尝试使用报错注入:

这样就注入成功了。

less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了空格和注释的盲注)

查看源码我们发现闭合方式为') 

 直接盲注就可以。其余同上一关。

less 27 GET - Error Based- All your UNION & SELECT belong to us (过滤了union和select的)

这一关过滤了union和select,我们用大小写绕过即可

经过测试我们发现%0A可以当做括号 

成功回显

less 27a GET - Blind Based- All your UNION & SELECT belong to us

这里和上一关大致相同,只是闭合方式不一样,经过测试,我们发现双引号可以闭合

 less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于错误的,有括号的单引号字符型,过滤了union和select等的注入)

这关和less25有异曲同工之妙,只不过25关是双写or和and,这里双写union和select

 双写绕过即可。

less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括号的单引号字符型,过滤了union和select等的注入

这关与上一关一样,直接双写就可以。

Less-29 基于WAF的一个错误

waf服务器(tomcat)只解析重复参数里面的前者,而真正的web服务器(Apache)只解析重复参数里面的后者,我们可以传入两个id参数,前者合法而后者为我们想注入的内容

我们的后端是apache,那么我们只要将参数放在后面即可。

Less-30 Get-Blind Havaing with WAF 

这里与上一关差不多,只不过闭合方式变成了双引号。

Less-31 Protection with WAF 

与上述一致,闭合方式为")。

Less-32 Bypass addslashes()

check_addslashes函数把\\ 单引号 双引号都进行过滤转义

明显的编码gbk  宽字节注入

 Less-33 Bypass addslashes()

32关函数:

33关函数:

这关与上一关一致,只不过是换成了addslashes。

  • addslashes() 函数
    函数返回在预定义字符之前添加反斜杠的字符串。
    单引号(’)
    双引号(")
    反斜杠(\)
    NULL

Less-34 Bypass Add SLASHES

 这里需要抓包注入,其余同上。

 Less-35 why care for addslashes()

id没有被单引号括起来所以addslashes起不到作用,正常注入即可

 Less-36 Bypass MySQL Real Escape String

在我们进行测试后发现有转义,宽字节注入。

直接注入:http://127.0.0.1/sqli/Less-36/?id=-1%df' union select 1,2,3--+

 Less-37- MySQL_real_escape_string

这一关用post登录而已,用burp抓包。其余同less34

 page-3

Less-38 stacked Query

这一关是堆叠注入,从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做stacked injection。

我们正常查询,因为是堆叠注入,所以需要用分号隔开,我们试试改一下dumb的密码

?id=1';update users set password='123456' where username='Dumb';--+

 插入一个id试试:?id=1';insert into users(id,username,password)values(20,'keepb1ue','2020')--+

  插入后记得修改前面的id。

Less-39 stacked Query Intiger type

这一关的id没有进行任何包裹,其余同less-38.

Less-40 stacked Query String type Blind

这一关没有报错,但是我们看有没有内容来判断语句是否正确,当我们尝试到')时显示正常

 修改密码试试。

?id=1');update users set password='54321' where username='Dumb';--+

 成功

Less-41 stacked Query Intiger type blind

与上一关一样。

Less-42 - Stacked Query error based

我们用burp抓包,直接堆叠注入修改密码

 然后再数据库查看是否成功

注入成功。

less43 POST -Error based -String -Stacked with tiwst(POST型基于错误的堆叠变形字符型注入) 

这一关我们发现用less42的方法无法注入,只是需要用')来闭合,其余操作同less42。

Less-44 - Stacked Query blind

同less-42关,只是关闭了报错







less-45 基于报错的password处的’)闭合注入

同less-43关,只是关闭了报错

less-46 ORDER BY-Error-Numeric

我们根据提示输入sort=1试试,发现出现了一个排序的表格

 输入单引号后发现报错,可以进行报错注入

 因为是个排序的表格,所以order by后面不能进行联合查询,但是可以用desc和asc进行排序

 我们试试报错注入

报错注入成功.

试试时间注入。有明显延迟,可以进行时间注入

http://127.0.0.1/sqli/Less-46/?sort=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(5)))test))

 Less-47 - ORDER BY Clause-Error-Single quote

 用单引号闭合,其余同less46

Less-48 - ORDER BY Clause Blind based

同less46,只不过关闭了报错,无法使用报错注入

Less49 - ORDER BY Clause Blind based

同less47,只不过关闭了报错,无法使用报错注入

Less50 - ORDER BY Clause Blind based

 对比46关,存在if (mysqli_multi_query($con1, $sql))说明我们可以进行堆叠注入

http://127.0.0.1/sqli/Less-50/?sort=1;insert into users values(111,'phz','111')

 Less-51 - ORDER BY Clause Blind based

对比47关,多了if (mysqli_multi_query($con1, $sql))

其余同上

Less-52 - ORDER BY Clause Blind based

同50关,关闭了报错,采用报错注入以外的手段

Less-53 - ORDER BY Clause Blind based

同51关,关闭了报错,采用报错注入以外的手段

剩余的关卡就是限制了查询次数,且变更了一下闭合方式,只要自己找到闭合方式即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐