数据来源

一、什么是盲注?

盲注是指一种利用应用程序漏洞进行的攻击技术,攻击者通过在输入参数中注入恶意代码或数据来探测、提取和修改应用程序的敏感数据。它通常用于测试 Web 应用程序的安全性,并且可能导致许多安全问题,如信息泄露、远程命令执行等。

在盲注攻击中,攻击者通常无法直接获得程序内部的敏感信息,例如程序源代码、数据库凭据等,因此需要通过不同方法构造特定的攻击载荷并提交给目标应用程序,然后观察其反馈以确定攻击的有效性和结果。

其中,最常见的两种盲注类型是基于时间的盲注和布尔盲注。基于时间的盲注会执行某些操作,并记录需要的时间(例如休眠或 CPU 利用率),这样攻击者可以使用响应时间来推断出某些答案是否正确。而布尔盲注则会利用应用程序在布尔运算时遵循真/假逻辑的特性,尝试通过构造合适的查询语句,达到从如何应答得出需要的信息的目的。

盲注攻击风险很高,但由于它通常很难被识别和阻止,所以也成为了许多渗透测试和黑客活动中经常使用的技术。要避免盲注攻击,请确保在处理任何输入数据时都进行有效的验证、过滤和编码,尽可能使用预编译语句,以避免 SQL 注入等攻击。同时,您应该加强对应用程序的安全审计和漏洞扫描工作,定期更新并修补程序以防止恶意攻击。

二、布尔盲注

原理

布尔盲注是指一种基于应用程序响应逻辑的盲注攻击技术,通过构造特定的查询语句,向目标应用程序提交带有恶意负载的请求,并观察程序的响应来推断出需要的敏感信息。

在布尔盲注中,攻击者尝试修改应用程序的查询语句,以便程序在响应时反映出某些操作结果 (如真或假),从而确定某些特定答案或确认应用程序中的漏洞。例如,攻击者可能利用应用程序的错误消息来判断存在的漏洞类型、参数的数量和格式等问题。

具体来说,在布尔盲注中,攻击者首先识别目标应用程序中可以进行注入攻击的输入参数,然后通过使用各种技术来构造特定的注入负载,例如 UNION SELECT 和 OR 运算符等,并在操作过程中进行不同的调整和实验。

通常,攻击者需要创建一系列设计猜测值并向目标应用程序发送这些值,同时根据程序的响应情况来验证这些猜测值是否正确。攻击者还可以根据响应时间或错误消息等特征来推断结果。

当攻击者成功地实现了一个布尔盲注攻击时,他们通常能够获得目标应用程序的敏感信息,如数据库名称、表名、字段等信息,并通过进一步攻击来获取更多的数据或特权。为了避免布尔盲注漏洞,请在处理输入时始终进行有效的验证和过滤,并使用参数化查询等技术以最大程度地消除这种类型的SQL注入攻击。

盲注函数

在进行盲注攻击时,攻击者通常会使用一些专门的函数和工具来构造有效的恶意负载并操作应用程序。以下是几个常见的盲注函数:

  1. SUBSTRING - 用于从字符串中提取指定位置的子串。例如,SUBSTRING("hello world",1,5) 返回 "hello"。
  2. RAND() - 用于生成一个随机数,并可以用于盲注攻击的时间推断技术中。例如 SELECT IF(RAND() > 0.5, 'sleep', '') 可以根据RAND()函数返回的值是否大于0.5来控制程序是否休眠。
  3. SLEEP() - 用于强制应用程序等待指定的秒数,也是盲注攻击中基于时间的盲注的实现方式之一。例如,SELECT * FROM mytable WHERE id=1 AND sleep(10),如果程序响应时间超过10秒,则说明id为1的行确实存在。
  4. LENGTH() - 用于获取字符串或二进制数据的长度。例如,SELECT LENGTH(user_name) FROM users WHERE id=1 执行后会返回用户名称的字符数目。
  5. ASCII() - 返回将字符转换为整数的 ASCII 值。例如,SELECT ASCII('A') 在多数情况下返回 65。
  6. CONCAT() - 用于将两个或多个字符串连接起来。例如,CONCAT('hello', 'world') 返回 "helloworld"。 等等。

需要注意的是,这些函数不仅可以用于盲注攻击,还经常在正常应用程序设计和开发过程中使用。在编写应用程序时,请注意务必正确验证和转义输入数据,以避免可能的安全问题。

布尔盲注流程

布尔盲注是一种基于 boolean 值运算的盲注攻击方法。攻击者需要构造恶意负载来实现修改查询语句、获取系统信息等目标。通常,布尔盲注攻击可以分为以下几个步骤:

  1. 识别可注入的参数:攻击者需要找到目标应用程序中可以进行注入攻击的输入参数,例如表单字段或 URL 参数等。通常,这些参数将通过创建它们自己的测试用例和手动编写 SQL 查询等技术来查找。

  2. 构造布尔条件查询语句:攻击者利用已知条件和未知条件构造包含真/假运算符(AND,OR)的查询字符串,并使用语句 UNION SELECT 或 SELECT,来将攻击者自己的恶意负载注入目标应用程序。

  3. 根据页面响应分析反馈结果:根据目标应用程序返回的页面内容判断是否发现安全漏洞并可以进一步进行渗透测试。如果网络流量过高或响应速度迟缓,则很可能表明存在严重的安全问题。在此过程中,攻击者可以使用作为优化工具的脚本、扫描器或代理来简化测试过程并自动处理大量待测试的请求。

  4. 推断答案:通过观察目标应用程序的响应状态,如状态码、是否出现错误消息或负载乘系统响应时间等来推断是否存在漏洞。攻击者可以根据响应速度及返回信息的种类对响应结果进行不同的重组和调整。在此过程中,攻击者也可能使用其他高级技术,例如联合注入和错误注入等方法,以获取更深入的系统信息和获得更显著的攻击成功。

需要注意的是,布尔盲注虽然实现方法比较复杂,但作为 SQL 注入漏洞攻击的一种常用方式,仍旧需要开发人员注意保障应用程序的安全性,防止应用程序被恶意攻击并遭受数据泄露或敏感信息暴露等风险。

手工盲注思路

手工盲注是一种通过手动构造 SQL 注入负载来实现攻击的技术。相比于自动化的 SQL 注入工具,手工盲注需要更多的知识和经验,并且攻击成功的概率较低。下面是一个通用的手工盲注流程:

  1. 识别可注入参数:首先需要找到应用程序中可能存在 SQL 注入漏洞的输入参数,比如 URL 参数、表单字段等。

  2. 确定注入点:在确认了可注入参数后,就需要确定具体注入点的位置,即找到恶意负载可以被注入的地方。

  3. 获取系统信息:从注入点开始构建不同的 SQL 查询语句,观察目标系统的响应行为,进而推断出系统内部的结构、版本号等信息。

  4. 判断目标数据库管理系统类别:通过获取系统信息获得目标系统所使用的数据库类型,从而针对不同类型数据库的差异性进行进一步攻击。

  5. 构造 SQL 注入语句并发送负载请求:根据已获得的数据结构构造相应的恶意负载,并与正常请求混合在一起,向目标应用程序提交。

  6. 分析反馈结果:观察目标应用程序返回的页面内容来判断是否发现安全漏洞,如果存在,则确认漏洞类型、影响范围并寻找后续攻击路径。

  7. 利用 SQL 注入漏洞:根据已发现的漏洞并通过手工或脚本编写恶意语句来利用目标漏洞,如获取系统管理员密码、删除表等恶意行为。

需要注意的是,在进行手工盲注时,一定要谨慎处理敏感信息和数据,确保没有泄露数据或不当使用数据。同时,建议应用程序开发人员在设计开发时要关注此类安全问题,防止恶意攻击进而破坏整个系统以及用户信息。

下面简要介绍手工盲注的步骤):

1.判断是否存在注入,注入是字符型还是数字型

2.猜解当前数据库名

3.猜解数据库中的表名

4.猜解表中的字段名

5.猜解数据

下面用DVWA靶场进行演示

LOW:

代码:

<?php if( isset( $_GET[ 'Submit' ] ) ) { // Get input $id = $_GET[ 'id' ]; // Check database $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysql_query( $getid ); // Removed 'or die' to suppress mysql errors // Get results $num = @mysql_numrows( $result ); // The '@' character suppresses errors if( $num > 0 ) { // Feedback for end user echo '<pre>User ID exists in the database.</pre>'; } else { // User wasn't found, so the page wasn't! header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' ); // Feedback for end user echo '<pre>User ID is MISSING from the database.</pre>'; } mysql_close();
} ?> 

可以看到,Low级别的代码对参数id没有做任何检查、过滤,存在明显的SQL注入漏洞,同时SQL语句查询返回的结果只有两种,可以自行输入:-1和1进行测试

`User ID is MISSING from the database.`(`数据库中缺少用户ID`)

‘与‘

User ID exists in the database.(数据库中存在用户ID),因此这里是SQL盲注漏洞。

注入方法一:布尔盲注

输入:1' and 1=1 #,显示存在:(and 是与的意思)

输入1' and 1=2 #,显示不存在:

 结论:存在字符型的盲注。

然后猜解数据库名:输入1" and length(database())=4 #,显示存在:说明长度为4

其他用法可以在靶场自己尝试,可以参考:DVWA之SQL注入(盲注)_dvwa sql盲注_风吹千里的博客-CSDN博客

DVWA-sql注入(盲注) - N0r4h - 博客园

注入技巧

布尔盲注(Boolean-based Blind Injection)是一种通过构造带有布尔条件的 SQL 注入负载实现的攻击技术,通过判断 SQL 查询结果是否为真或者假,得出 SQL 语句中存在漏洞的结论。以下是一些常用的布尔盲注技巧:

  1. 利用 IF() 函数:IF() 函数可以根据条件判断是否满足某个条件,并返回不同的结果。例如,在 MySQL 中,可以使用 SELECT IF(1=1, 'true', 'false') 这样的语句来判断 1 是否等于 1,并返回 true 或 false。

  2. 利用 EXISTS() 函数:EXISTS() 函数可以判断某个值是否存在于查询结果中。例如,在 SQL Server 中,可以使用 SELECT 'true' WHERE EXISTS(SELECT * FROM Users WHERE Name='admin' AND Passwd='123456') 这样的语句来判断是否存在用户名和密码均为 admin 和 123456 的用户,并返回 true 或 false。

  3. 利用逻辑运算符:逻辑运算符包括 AND、OR 和 NOT 等,可以用于组合多个条件判断语句。例如,在 Oracle 中,可以使用 SELECT 'true' FROM dual WHERE 1=1 OR 1=2 来判断是否存在某条记录,并返回 true 或 false。

需要注意的是,在进行布尔盲注时,攻击者需要了解目标数据库类型,从而知道该数据库支持哪些函数和操作符,根据实际情况选择合适的技巧。同时,防范布尔盲注攻击的关键在于应用程序设计人员需要充分了解 SQL 注入的原理和常见攻击方式,并采取安全措施保障系统的安全性。

三、延时注入

延时注入是一种盲注的技术,它利用了SQL语句返回结果的速度,使得攻击者可以通过构造特殊的负载延迟SQL语句的执行时间来判断是否存在漏洞并进一步进行攻击。常见的延时注入包括 sleep 命令或者 waitfor delay 命令等。

实际上,延时注入和普通的 SQL 注入十分相似,不同之处在于其核心思想是利用目标系统响应时间的差异性来推断出敏感信息。攻击者通常需要找到合适的延时,并根据系统对于超时的行为进行调整,防止请求超时或者判断失误的情况发生。同时,攻击者还需要持续不断地通过延时时间、回显或响应码等信息判断是否有漏洞被发现。

针对延时注入攻击,防护方面也可以采取一些方法来保障系统安全:

  1. 对输入进行严格限制:在应用程序设计时,需要对用户提交的数据进行验证及过滤,以避免存在可利用的输入注入点。

  2. 选择安全的编程语言和数据库服务:开发人员需要选择具有良好安全性的编程语言或数据库服务,并严格按照安全规范进行开发与管理。

  3. 使用预编译的参数化查询:如果需要动态组织 SQL 语句,应当使用参数化查询等技术执行 SQL 查询,而不是通过字符串拼接的方式完成 SQL 语句的构造。

  4. 监测工具、日志审计、异常及时报警:对于应用程序的访问,运维人员可以使用监控工具和系统日志来实现实时监测,如有异常情况及时向相关人员发送报警信息并及时处理。

延时注入技巧

延时注入是一种通过构造带有延迟的 SQL 注入负载实现的攻击技术。其核心思想是在目标系统执行 SQL 语句的过程中,增加一些额外的等待时间,使得攻击者能够得到更准确的信息并进一步进行攻击。以下是一些常用的延时注入技巧:

  1. 利用 SLEEP() 函数:SLEEP() 函数可以使 SQL 查询线程暂停一段时间,可以使用它来模拟长时间的数据库查询操作。例如,在 MySQL 中,可以使用 SELECT * FROM table WHERE id=1 AND SLEEP(5) 这样的语句来让查询线程暂停 5 秒钟。

  2. 利用 WAITFOR DELAY 命令:WAITFOR DELAY 命令是 SQL Server 中专门用于延时的命令,使用该命令可以让 SQL 查询线程等待指定的时间再返回结果。例如,WAITFOR DELAY '0:0:5' 就是让查询线程等待 5 秒钟。

  3. 利用 IF() 函数:IF() 函数可以根据条件判断是否进行延迟,如果条件为真则模拟长时间查询操作,否则立即返回结果。例如,在 MySQL 中,可以使用 SELECT IF(1=1, SLEEP(10), 'false') 这样的语句来让查询线程等待 10 秒钟。

  4. 利用 TIME_OUT 值:有些数据库管理系统允许设置查询的时间限制,例如 Oracle 中的 SQLNET.OUTBOUND_CONNECT_TIMEOUT 参数。攻击者可以通过构造负载模拟超时场景,从而得以判断系统漏洞并进一步进行注入。

需要注意的是,在进行延时注入时,攻击者需要综合考虑目标数据库类型、网络状况、系统响应速度等因素,并根据实际情况调整延时时间,避免过长或过短的时间影响攻击效果。同时,建议应用程序设计人员在开发时要关注此类安全问题,采取有效的措施防止恶意攻击的发生。

SQL注入进阶:掌握布尔盲注和延时注入攻击技巧相关推荐

  1. 【SQL注入-05】布尔盲注案例

    目录 1 概述 2 操作环境 3 操作具体步骤 3.1 判断是否存在注入点及注入的类型 3.2 测试数据库库名长度 3.3 逐个测试数据库库名的字符 3.4 测试该数据库中所有表名 3.5 测试use ...

  2. 【SQL注入14】布尔盲注的半自动化实现(基于BurpSuite工具和sqli-labs-less8靶机平台)

    目录 1 概述 2 实验简介 2.1 实验平台 2.2 实验目标 3 实验过程 3.1 判断注入点及注入类型 3.2 爆库名(踩坑) 3.3 爆库名(成功) 3.4 爆表名 3.5 爆字段名 3.6 ...

  3. sql注入学习——布尔盲注

    前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...

  4. SQL注入原理-布尔盲注

    小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注. 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1.判断是否存在注入点 2 ...

  5. SQL注入-盲注-时间注入-报错注入-布尔盲注-DNSlog注入-宽字节注入-WAF绕过-SqlMap使用

    Sqli-labs的安装 1.安装WAMP http://www.wampserver.com/ WAMP是php + mysql + Apache环境集成工具 2.下载Sqli-labs https ...

  6. SQL注入——基于时间的盲注(九)

    本章目的 普及延时盲注技术的运用场景及条件,熟悉length().Substr().ascii().sleep().if()等函数的用法,掌握基于时间的盲注基本流程.PS:面试问答不深问就回答延迟 基 ...

  7. Wireshark分析sql布尔盲注流量包

    目录 0x001 题目 0x002 查看注入语句 0x003 观察响应包 0x004 脚本编写 0x001 题目 0x002 查看注入语句 将流量包导入Wireshark 看着很乱,输入url通过浏览 ...

  8. SQL注入之布尔盲注——sql-lab第八关

    布尔盲注简介 什么是盲注 盲注其实是sql注入的一种,之所以称为盲注是因为他不会根据你sql注入的攻击语句返回你想要知道的错误信息. [之前在做联合注入第一关的时候,用union select语句注入 ...

  9. SQL注入(SQL注入(SQLi)攻击)攻击-布尔盲注

    页面没有显示位 , 没有报错信息 , 只有成功和不成功两种情况时 , 可以使用布尔盲注 本次以 SQLi LABS 第9关为案例进行讲解 布尔盲注常用的两个函数(我觉得) length('abc') ...

最新文章

  1. 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手
  2. Agent admitted failure to sign using the key
  3. 五.Java IO、NIO、文件、通讯
  4. C语言再学习 -- 存储类型关键字
  5. Android 插件化原理解析——Activity生命周期管理
  6. python打包工具报错_python打包生成exe报错
  7. 九毛九集团java_JAVA数组课后作业
  8. OpenShift 4 - 镜像漏洞扫描软件 Clair
  9. Maven Install报错:Perhaps you are running on a JRE rather than a JDK
  10. HDU 2087 剪花布条 KMP入门
  11. 计算机组成原理在线实验,计算机组成原理编程实验
  12. gstreamer之RTSP Server一个进程提供多路不同视频
  13. Zookeeper开源客户端curator
  14. python标准输入多行文字_python如何输入多行数据
  15. 基于51单片机DTH11温湿度测量仪protues仿真设计_LCD显示
  16. Python 数据库连接方法和数据库连接池
  17. 一个39岁程序员的应聘被拒 | 文末送书
  18. iOS10 适配 ATS(app支持https通过App Store审核) 韩俊强的博客
  19. Visual Studio 版本号及其各个版本对应关系
  20. 修改文件权限修改的思索

热门文章

  1. 北大igem生物计算机,iGEM介绍
  2. 计算机英语和普通英语区别表现,浅谈日常英语与计算机专业英语的区别
  3. PAT--1094 谷歌的招聘(C语言)
  4. Matlab符号数学Symbolic Math Toolbox™帮助文档(全)
  5. 欧元区风险担忧情绪依然存在,美元震荡上扬
  6. 线性回归详解(2)机器学习
  7. Linux新手上路(六):文件打包和解压缩
  8. RBF神经网络——基于近红外光谱的汽油辛烷值预测
  9. python爬虫笔记四:大众点评店铺信息(字体反爬-静态映射)
  10. 计网第三章复习(数据链路层)