网络安全-SQL注入系列03
SQL盲注
实际场景中,SQL的许多注入实例都是盲注漏洞,应用程序不会在其响应内返回SQL查询的结果或任何数据库错误的详细信息。盲注可以被利用来访问未授权的数据,但是所涉及的技术通常更加复杂且难以执行。
利用SQL盲注技术可以实现:
更改查询的逻辑。根据单个条件的真实性触发应用程序,在响应中返回数据的差异。例如:向某个布尔逻辑中注入新条件,或有条件的触发零除之类的错误
有条件的触发查询处理中的时间延迟,根据应用程序响应的时间推断,查询条件的真相
使用网络交互技术,实现数据外带。可以在其他技术无法实现的情况下使用。通常可以直接通过外通道窃取数据。例如:常用的技术DNS查询,将数据放入控制的域的DNS查询。
一、SQL盲注概念
当应用程序容易受到SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果,或任何数据库错误的详细信息时,就会出现SQL盲注。
二、SQL盲注利用
例如,对某网站抓包处理,跟踪cookie的信息,收集相关使用情况并分析引用程序的响应。
当一个请求包含一个cookie被处理后,应用程序将使用以下SQL语句,查询该用户是否是已知用户。
select cookie from cookieusers where cookie="xxxxxxxxxxx"
该查询容易受到SQL注入的影响,但是查询的结果不会返回给用户。但是应用程序的行为会有所不同,具体取决于是否返回任何数据。如果返回数据,页面显示“欢迎xx用户”的信息,则此行为足以被SQL盲注利用。
SQL盲注利用的核心就是根据注入条件,有选择地触发不同的响应来检索信息。
例如,触发上述SQL盲注
...abc' and '1'='1
...abc' and '1'='2
因为语句1结果为TRUE,应用程序会返回“欢迎xx用户”。语句2结果为FALSE,应用程序则不会返回“欢迎xx用户”,这为通过注入获取信息提供了条件。
三、触发SQL错误诱导条件响应
假设应用程序执行相同的SQL语句查询,没有返回任何数据。其行为表现没有任何不同,在这种情况下,通常可以修改注入条件,有选择的触发SQL查询错误来促使应用程序返回条件信息。核心是,在条件为true时引起数据库错误,而在条件为false时不会导致数据库错误。通常数据库引发的未处理错误将导致应用程序响应有所不同,能够根据条件注入数据。
列如:假设发送了两个请求,其中包含以下内容
...abc' and (select case when (1=2) then 1/0 else 'a' end)='a
...abc' and (select case when (1=1) then 1/0 else 'a' end)='a
case关键字根据表达式是否为真,选择执行不同语句。类比if语句。
根据应用程序的响应,语句1应用程序不会有错误显示。语句2因为1=1为TRUE,SQL语句会执行除零导致错误。假设应用程序的HTTP会因此有相响应,则可以推断此处是注入点。
触发条件错误的方式有很多种,并且不同的技术在不同的数据库类型上有不同效果,根据实际情况分析。
四、通过响应时间延迟利用SQL盲注
以上都是针对应用程序的返回信息为判断依据。假设应用程序在捕获了数据库的错误后,并妥善处理。则在SQL查询时触发数据库错误不再导致应用程序的任何响应,在这种情况下还是可以根据注入条件判断注入点。就是利用应用程序的响应时间。
原理:由于SQL查询通常由应用程序同步处理,因此延迟执行SQL查询也会延迟HTTP响应,这直接导致接收到HTTP响应会花费同样的时间来响应。根据响应的时间判断注入点。触发时间延迟与数据库类型高度相关.
五、DNS外带数据
假设应用程序执行相同SQL语句查询,但是是异步处理。这样执行延时查询就失效了,因为应用程序在执行原始线程中处理用户的请求,并会创建新的线程跟踪cookie执行SQL查询。虽然该语句仍然容易受到SQL注入攻击但是,应用程序的响应不取决于查询是否返回任何数据,数据库是否发生错误或执行需要花费的时间。
在此条件下,通常可以通过触发应用程序与控制的系统进行网络交互来利用SQL注入点。可以直接在网络交互中实现数据获取。各种网络协议都可用于此目的,最常用的通常是DNS(域名服务)。这是因为生产网络普遍都允许DNS查询的自由出口,因为这对生产系统的正常运行至关重要。
后续有相关总结,与SQL注入的防护。