#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

目录

一、基于时间延迟的SQL注入概述

(一)原理

(二)应用场景

示例

常见延时函数

二、涉及的函数

三、工具使用

时间延迟SQL注入的防御策略

1. 使用参数化查询

示例(PHP + MySQL)

2. 输入验证和清理

示例(PHP)

3. 使用ORM(对象关系映射)

4. 最小化数据库权限

示例(MySQL)

5. 实施WAF(Web应用防火墙)

6. 日志记录和监控

7. 安全培训和代码审查

8. 使用安全库和框架

结论


一、基于时间延迟的SQL注入概述

基于时间延迟的SQL注入(Time - based SQL Injection),也被称为时间盲注,是SQL注入攻击的一种类型,属于盲注入的范畴。

(一)原理

  • 正常情况下,当对数据库进行查询操作,如果查询的条件不存在,语句执行的时间非常短,基本接近0秒。但是可以利用像 sleep(N)(在MySQL里)这样的函数让查询执行时间变长。例如在 mysql 中,sleep(10) 会使数据库延时10秒返回内容。通过构造包含这种延时函数的SQL语句注入到目标系统中,根据页面响应时间来判断注入条件是否正确。如果响应时间达到或接近设置的延时时间(如注入语句中包含 sleep(10),响应时间至少10秒),则说明注入条件满足,进而判断存在SQL时间注入漏洞。
  • 常常与 if(expr1, expr2, expr3) 语句结合使用。if(expr1, expr2, expr3) 的含义是如果 expr1True,则返回 expr2,否则返回 expr3)。例如:select if(21, sleep(10), 0),这里的21这个部分就是可以构造的注入SQL语句部分。再如 select if(length(database())>1, sleep(5), 0) 这个语句就是查询当前库长度大于1就会延时5秒。

(二)应用场景

  • 当目标系统的注入点无法通过布尔型注入(即不能通过页面返回的正常或错误结果来判断注入是否成功)时,时间延迟注入就可以发挥作用。例如,页面没有回显或者没有报错信息,但是可以根据页面的响应时间来判断注入是否成功。

示例

假设有一个SQL查询如下:

SELECT * FROM users WHERE id = '1';

攻击者可以通过在id参数中插入延时函数来判断是否存在SQL注入漏洞:

如果页面响应时间增加了5秒,说明SQL注入成功。

常见延时函数

不同的数据库管理系统(DBMS)支持不同的延时函数。以下是一些常见的延时函数:

DBMS延时函数
MySQLSLEEP()
PostgreSQLpg_sleep()
Microsoft SQL ServerWAITFOR DELAY

二、涉及的函数

  • sleep()函数:在MySQL中,sleep() 函数用于实现数据库操作的延时。例如 sleep(5) 表示让数据库操作延迟5秒。通过在注入的SQL语句中巧妙使用这个函数,并结合页面响应时间的变化来判断注入是否成功以及获取相关信息。
  • if()函数:如前面所述,if() 函数可以根据条件判断来决定返回值。这在构造复杂的时间延迟注入语句时非常有用,可以根据不同的条件执行不同的操作,如执行延时操作或者不执行延时操作,从而通过页面响应时间的差异来获取数据库中的信息。
  • substring()函数(类似mid()函数):用于截取字符串。例如在查询数据库名称等操作时,可以配合 if() 函数和 sleep() 函数,通过逐位判断字符的方式来获取数据库名称等敏感信息。mid(a,b,c)(或者 substr(a,b,c),二者功能类似,第一个参数为要处理的字符串,start 为开始位置,length 为截取的长度)就是从 b 开始,截取 a 字符串的 c 位。

三、工具使用

在检测和利用基于时间延迟的SQL注入时,可以使用自动化工具,如 sqlmap。使用时通过指定相关参数来进行时间注入检测。例如:

  • -u:表示检测的 url
  • -p:指定的检测参数。
  • -v:显示调试模式。
  • --technique=T:检测方法为时间注入。 通过这样的设置,sqlmap 可以检测目标是否存在基于时间延迟的盲注入,并且在检测为时间注入之后,还可以进一步通过这个注入获取数据库的名、用户权限、表字段等敏感信息。

时间延迟SQL注入的防御策略

时间延迟SQL注入(Time-based SQL Injection)是一种盲注入技术,攻击者通过在SQL查询中插入延时函数(如SLEEP()WAITFOR DELAY),根据页面响应时间来判断注入是否成功。为了防止这种攻击,以下是一些有效的防御策略:

1. 使用参数化查询

参数化查询(Prepared Statements)是防止SQL注入的最佳实践之一。通过预编译SQL语句并使用参数传递用户输入,可以确保用户输入不会被解释为SQL代码。这在各种编程语言和数据库系统中都是通用的做法。

示例(PHP + MySQL)

$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);

2. 输入验证和清理

对用户输入进行严格的验证和清理,确保输入符合预期格式。例如,如果输入应该是数字,可以使用正则表达式或其他验证方法来确保输入确实是数字。

示例(PHP)

$id = filter_var($_GET['id'], FILTER_VALIDATE_INT);
if ($id === false) {
    die('Invalid input');
}

3. 使用ORM(对象关系映射)

ORM工具可以自动处理SQL查询的构建和执行,避免手动拼接SQL语句,从而减少SQL注入的风险。常见的ORM工具有Hibernate(Java)、Entity Framework(.NET)和Django ORM(Python)。

4. 最小化数据库权限

为应用程序使用的数据库账户分配最小必要的权限。例如,如果应用程序只需要读取数据,那么数据库账户应该只具有读取权限,而不具有写入或执行权限。

示例(MySQL)

GRANT SELECT ON database_name.table_name  TO 'user'@'host';

5. 实施WAF(Web应用防火墙)

WAF可以实时监控和过滤HTTP流量,识别并阻止潜在的SQL注入攻击。许多云服务提供商(如AWS、Google Cloud)都提供了WAF服务。

6. 日志记录和监控

定期审查应用程序日志,监控异常行为,如频繁的延时请求。这有助于及时发现并响应潜在的攻击。

7. 安全培训和代码审查

定期对开发团队进行安全培训,强调SQL注入的危害和防御措施。同时,实施代码审查制度,确保所有代码都经过安全检查。

8. 使用安全库和框架

选择具有内置安全功能的库和框架,如OWASP ESAPI(企业安全API),这些工具可以提供额外的保护层,防止SQL注入和其他安全漏洞。

结论

通过实施上述防御策略,可以显著降低时间延迟SQL注入的风险,保护应用程序和数据库的安全。定期更新和审查安全措施,确保它们能够应对不断变化的威胁环境。

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

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

相关文章

机器学习基础算法 (一)-线性回归

python 环境的配置参考 从零开始:Python 环境搭建与工具配置 线性回归的 Python 实现 线性回归是一种经典的机器学习算法,用于预测连续的目标变量。它假设目标变量和特征之间存在线性关系。本文将详细介绍线性回归的原理、Python 实现、模型评估和调优&…

基于linux下实现的ping程序(C语言)

linux下实现的ping程序 一、设计目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设…

WPF 布局控件

wpf 布局控件有很多,常用的有:Grid, UniformGrid, Border, StackPanel, WrapPanel, DockPanel。 1. Grid Grid 经常作为控件的 Content 使用,常作为 Windows, UserControl 等 UI 元素的根节点。它用来展示一个 n 行 n 列的排版。 因此就有…

内网渗透横向移动技巧

在正常情况中,横向移动是在已经获取了足够的权限的情况下进行横向移动,下面中的方法大部分也需要高权限的操作。 https://www.freebuf.com/articles/network/251364.html 内网横向移动分为三种情况: 1.在VPN环境中进行横向移动; 2…

MONI后台管理系统-swagger3(springdoc-openapi)集成

springdoc-openapi Java 库有助于使用 Spring Boot 项目自动生成 API 文档。springdoc-openapi 通过在运行时检查应用程序来根据 Spring 配置、类结构和各种注释推断 API 语义。 该库会自动生成 JSON/YAML 和 HTML 格式的页面文档。生成的文档可以使用swagger-api注释进行补充。…

C/C++圣诞树

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C…

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

目录 HTML教程 ▐ 概述 ▐ 基础语法 ▐ 文本标签 ▐ 列表标签 ▐ 表格标签 ▐ 表单标签 CSS教程 ▐ 概述 ▐ 基础语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 透明度 ▐ 伪类 ▐ 盒子模型 ▐ 浮动 ▐ 定位 JavaScript教程 ▐ 概述 ▐ 基础语法 ▐ 函数 …

vue3和element-plus笔记

对子组件直接使用v-model 子组件内定义如下 const props defineProps({modelValue: {type: String,required: true} }) const emits defineEmits(["update:modelValue"]) 父组件定义如下 <script setup> const deleteId ref(null) </script> <…

Buck开关电源闭环控制的仿真研究15V/5V[Matlab/simulink源码+Word文档]

课题设计要求 ⑴输入直流电压(VIN)&#xff1a;15V ⑵输出电压(VO)&#xff1a;5.0V ⑶负载电阻&#xff1a;R2欧 ⑷输出电压纹波峰-峰值 Vpp≤50mV &#xff0c;电感电流脉动&#xff1a;输出电流的10% ⑸开关频率(fs)&#xff1a;100kHz ⑹BUCK主电路二极管的通态压降VD0.5V…

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…

麒麟操作系统服务架构保姆级教程(三)ssh远程连接

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 作为一名成熟运维架构师&#xff0c;我们需要管理的服务器会达到几十台&#xff0c;上百台&#xff0c;上千台&#xff0c;甚至是上万台服务器&#xff0c;而且咱们的服务器还不一定都在一个机房&am…

2024年图像处理、多媒体技术与机器学习

重要信息 官网&#xff1a;www.ipmml.org 时间&#xff1a;2024年12月27-29日 地点&#xff1a;中国-大理 简介 2024年图像处理、多媒体技术与机器学习&#xff08;CIPMT 2024&#xff09;将于2024年12月27-29日于中国大理召开。将围绕图像处理与多媒体技术、机器学习等在…

用Python在Excel工作表中创建、修改及删除表格区域

在数据分析和自动化处理的工作中&#xff0c;Excel作为一种强大的工具被广泛应用&#xff0c;而通过Python来操作Excel工作表中的表格&#xff0c;可以极大提高工作效率。表格&#xff08;Table&#xff09;是Excel中的一种重要结构&#xff0c;它是一个特殊的单元格区域&#…

【AI】✈️问答页面搭建-内网穿透公网可访问!

目录 &#x1f44b;前言 &#x1f440;一、后端改动 &#x1f331;二、内网穿透 &#x1f49e;️三、前端改动 &#x1f379;四、测试 &#x1f4eb;五、章末 &#x1f44b;前言 小伙伴们大家好&#xff0c;上次本地搭建了一个简单的 ai 页面&#xff0c;实现流式输出问答…

GM_T 0039《密码模块安全检测要求》题目

单项选择题 根据GM/T 0039《密码模块安全检测要求》,送检单位的密码模块应包括()密码主管角色。 A.一个 B.两个 C.至少一个 D.至少两个 正确答案:C 多项选择题 根据GM/T 0039《密码模块安全检测要求》,关于非入侵式安全,以下属于安全三级密码模块要求的是()。 …

使用生存分析进行游戏时间测量

标题&#xff1a;Playtime Measurement with Survival Analysis 作者&#xff1a;Markus Viljanen, Antti Airola, Jukka Heikkonen, Tapio Pahikkala 译者&#xff1a;游戏数据科学 1 游戏中的游戏时间 1.1 为什么游戏时间很重要 游戏分析在理解玩家行为方面变得越来越重…

Linux快速入门-兼期末快速复习使用

Linux快速入门-兼期末快速复习使用 一小时快速入门linux快速一&#xff1a;Linux操作系统概述1. Linux概述1.1 定义与特点1.2 起源与发展1.3 Linux结构1.4 版本类别1.5 应用和发展方向 2. 安装与启动2.1 Windows下VMware安装Linux2.2 安装Ubuntu 快速二&#xff1a;linux的桌面…

制造研发企业与IPD管理体系

芯片/半导体/制造研发型企业&#xff0c;大都知道华为使用过的IPD管理体系&#xff0c;但大家用到什么程度&#xff0c;那就是参差不齐了。 因为IPD管理体系它只是一个管理理念&#xff0c;是一个方法论。它需要有相应的组织架构来承载&#xff0c;它有很复杂的流程需要有IT系统…

帝国CMS自动生成标题图片并写进数据库

帝国CMS背景可自定义&#xff0c;可单独背景也可以随机背景,此插件根帝国cms官方论坛帖子改的&#xff0c;增加了生成图片后写入数据库,笔者的古诗词网 www.gushichi.com 也是这样设置的。 效果图 将下面的代码插入到/e/class/userfun.php中增加如下函数 单独背景代码 //自动…

数据分析和AI丨知识图谱,AI革命中数据集成和模型构建的关键推动者

人工智能&#xff08;AI&#xff09;已经吸引了数据科学家、技术领导者以及任何使用数据进行商业决策者的兴趣。绝大多数企业都希望利用人工智能技术来增强洞察力和生产力&#xff0c;而对于这些企业而言&#xff0c;数据集的质量差成为了最主要的障碍。 数据源需要进行清洗且明…