Web安全之SQL注入漏洞学习(四)-时间盲注

2024-06-21 14:48

本文主要是介绍Web安全之SQL注入漏洞学习(四)-时间盲注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于时间延迟注入(Time-based)- 时间盲注

利用sleep()或benchmark()等函数让mysql执行时间变长,通过页面的响应时间来判断条件是否正确。经常与if(expr1,expr2,expr3)语句结合使用,if(expr1,expr2,expr3)含义是如果expr1是True,则返回expr2,否则返回expr3。

通俗讲就是当页面不返回查询结果或者是返回空无法判断注入的语句是否成功时,通过注入特定的SQL语句,根据也面对请求的时间反馈来判断是否注入成功。

时间盲注原理介绍

--后端SQL语句写法
select * from tables where id ='?'
--构造输入完成注入后的SQL,输入为:1' and sleep(3) --
select *from tables where id = '1' and sleep(3) --'
​
--注入作用说明:
--1、当id='1' 条件为真时,注入请求就会等待3秒钟
--2、当id='1' 条件为假时,注入请求就会立即返回

时间盲注经常搭配的数据库函数

substr(a,b,c):从b位置开始截取a字符串的C长度

count():统计总数

ascii():返回字符的ASCII码

length():返回字符串的长度

left(a,b):从左往右截取字符串a的前b个字符

sleep(x):SQL语句执行程序睡眠x秒

。。。。

时间盲注过程演示

分析:该查询接口并不会返回查询结果也没有报错信息,因此无法使用前几篇文章演示的在输入中添加'符号分析返回错误信息判断该接口是否存在注入漏洞,可行的方案是通过时间盲注的方式。

猜测后端的SQL查询语句

从上图可以看出这是一个通过输入电影名称查询电影信息功能,由此可以推测后端可能的SQL查询语句如下

--模糊查询(从业务分析大概率是支持模糊查询)
select *from movie_table where movie like '%?%'
--精确查询
select *from movie_table where movie = '?'

构造输入验证

构造输入的内容为:t%' and sleep(5) --

select *from movie_table where movie like '%t%' and sleep(5)

 

正常查询

从上述执行验证过程中的接口响应时间可以看出sleep函数是被执行的,这就说明此处存在注入漏洞。 

漏洞利用

利用该漏洞获取数据库名称长度信息演示过程

使用hackbar工具辅助进行测试,输入:World War Z' and length(database())<5 and sleep(4) --

用于判断数据库的名称长度是否小于5,如果为真则请求将阻塞4秒,否则请求立即完成。

通过测试可确定数据库的长度是大于等于5的

 

请求耗时

修改输入:World War Z' and length(database())=5 and sleep(4) --

因为前一步已经知道数据库名称长度是大于等于5的,则判断数据库名称长度是否等于5

通过请求耗时可以确定数据库名称长度就是等于5(正常情况下需要进行多次重复这个过程才能找出数据库的名称长度)

 

请求耗时

通过上述分析我们使用length函数我们得出了数据库的名称长度为5,我们也可以通过substr函数获取数据库的真实名称,过程如下:

判断数据库名称的第一个字母是否为a,通过测试数据库名称第一个字母不为a

 

请求耗时

 

判断数据库名称的第一个字母是否为b,通过测试数据库名称第一个字母就为b。(实际分析过程可能需要对比多次才能找到匹配的字母,一次遍历每一个字最后得出完整数据名称)

请求耗时

 

思考题

从上述注入过程中我们不但获取了数据库的名称长度和真实数据库名称,通过结合其他函数以及自动化脚本的帮助我们就可以对数据库、表、表字段、表中的数据进行分析最终获取到数据库所有信息。

欢迎大家关注我的订阅号,会定期分享一些关于测试相关的文章,有问题也欢迎一起讨论学习!
在这里插入图片描述

 

这篇关于Web安全之SQL注入漏洞学习(四)-时间盲注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081514

相关文章

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE