Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Extending sql injection attacks using buffer overflows –tactical exploitation

1,448 views

Published on

Extending SQL Injection Attacks Using Buffer Overflows –Tactical Exploitation
基于缓冲区溢出的扩展SQL注入攻击----技术利用 (意译:by youstar)
1、 SQL注入攻击的危害
可以获取数据库中的相关数据;
通过SQL注入将恶意代码插入数据库中,并永久保留和传播。
一个实例:http://secniche.blogspot.com/2011/04/sqlxssi-persistent-malware-base.html
本文目的:通过研究新的技术去绕过现有的安全保护机制。在不安全的函数中采用缓冲区溢出继续SQL注入攻击。
2、 相关基础知识
 检测存在漏洞的网址
一般采用的方法是通过在网址后面加入特殊字符(’;--)字符会被编码为%27,观察网页是否出错,然后判定是否有漏洞。

 查找列的数目
通过order命令实现:

 判定PHP 应用程序的权限
PHP中变量和方法的权限表明了该变量可以干什么事。通常有三种权限(public、protected 或 private),PHP中方法默认是public权限,可以在程序中任意地方被访问。Protected可以被子类访问,private只能被自身类访问。从注入的角度出发可以分为以下两种方式。

当$vulnerable_id表示一个字符值的时候,这两种方式是相同的。但是当$vulnerable_id表示多个值的时候,情况就不同了。当IN命令中有多个值的时候可以很好的防御SQL注入攻击,而第二个语句则还是出现漏洞。假如$vulnerable_id = “578 and order by 7”

虽然包含IN字符的语句没有对SQL注入做真正的防御,但是在实际中还是提供了很好的保护。从SQL注入观点看,这就是权限在获取数据库数据中所起的重要作用。
下面获取数据库的版本:

很多时候我们通过这些语句就可以在返回的页面里得到相应的数据,但是有时候返回的是服务器端处理后的错误信息。

如果出现这样的错误往往就会阻止继续注入。出现这种情况主要有几方面因素:
服务器可能有web防火墙或者入侵检测系统;
查询可能绕过了web防火墙,但是服务器端的php程序处理出错。
通常Web防火墙会检测并阻止网址中的”+”符号,这时候可以通过”/**/”绕过。

 缓冲区的选择和溢出
首先需要确定web程序对一组随机的数据的反应,加入输入下面的语句:

错误显示了我们提交的注入语句同时给了很好的相应。仔细分析下SQL注入语句,整个语句可以被分为两个部分:

Y作为SQL注入语句,被显示到了出错页面中。但是我们不需要web程序仅仅把提交语句返回,而是希望在web程序中执行该语句并返回数据。
这个地方我们做了一个条件查询,这个查询永远是正确的:

为了达到目的,我们引入另外的字符Z作为测试,并改变注入语句,改为:X=Z.Y

这样的话变量Z相当于对SQL注入语句的填充,同时我们也不知道变量的长度,通过改变Z的长度来测试(以8的倍数作为测试,32,64,128,256,512,1024),得到如下的结果:

在上面的语句中X没有使用16进制的符号(即前面没有加0x),因为我们想通过模糊测试的方法确定列名(注:可以从返回结果看到BBB*没有在表field list里面,通过这种方法来暴力测试)。变量X依据变量Z的结果作为条件进行判定(注:根据语句可以发现SQL语句中需要A的结果与Z的结果进行判定)。这样的话可以结合order by 命令实现对全部列名的暴力破解。事实上,变量X在这里作为列名,其值并不是很重要,这里选择的是column 1。通过测试Z变量的长度,构造了最终的语句:

构造的SQL语句成功执行,得到了相关数据。
通过这些语句的执行,获取了数据库中的用户名和密码。究其原因是由于程序没有对条件语句中的长度进行检测,最终导致了执行

Published in: Education
  • Be the first to comment

  • Be the first to like this

Extending sql injection attacks using buffer overflows –tactical exploitation

  1. 1. Extending SQL Injection Attacks Using Buffer Overflows –Tactical Exploitation 基于缓冲区溢出的扩展 SQL 注入攻击----技术利用 (意译:by youstar)1、 SQL 注入攻击的危害 可以获取数据库中的相关数据; 通过 SQL 注入将恶意代码插入数据库中,并永久保留和传播。 一个实例:http://secniche.blogspot.com/2011/04/sqlxssi-persistent-malware-base.html 本文目的:通过研究新的技术去绕过现有的安全保护机制。 在不安全的函数中采用缓冲区溢出继续 SQL 注入攻击。2、 相关基础知识  检测存在漏洞的网址 一般采用的方法是通过在网址后面加入特殊字符(’;--)字符会被编码为%27,观察网页是否出错,然后判定是否有漏洞。  查找列的数目 通过 order 命令实现:  判定 PHP 应用程序的权限 PHP 中变量和方法的权限表明了该变量可以干什么事。通常有三种权限(public、protected 或 private),PHP 中方法默认是 public 权限,可以在程序中任意地方被访问。Protected 可以被子类访问,private 只能被自身类访问。从注入的角度出发可以分为以下两种方式。 当$vulnerable_id 表示一个字符值的时候,这两种方式是相同的。但是当$vulnerable_id
  2. 2. 表示多个值的时候,情况就不同了。当 IN 命令中有多个值的时候可以很好的防御 SQL 注入攻击,而第二个语句则还是出现漏洞。假如$vulnerable_id = “578 and order by 7” 虽然包含 IN 字符的语句没有对 SQL 注入做真正的防御,但是在实际中还是提供了很好的保护。从 SQL 注入观点看,这就是权限在获取数据库数据中所起的重要作用。 下面获取数据库的版本: 很多时候我们通过这些语句就可以在返回的页面里得到相应的数据,但是有时候返回的是服务器端处理后的错误信息。 如果出现这样的错误往往就会阻止继续注入。出现这种情况主要有几方面因素: 服务器可能有 web 防火墙或者入侵检测系统; 查询可能绕过了 web 防火墙,但是服务器端的 php 程序处理出错。 通常 Web 防火墙会检测并阻止网址中的”+”符号,这时候可以通过”/**/”绕过。  缓冲区的选择和溢出 首先需要确定 web 程序对一组随机的数据的反应,加入输入下面的语句:
  3. 3. 错误显示了我们提交的注入语句同时给了很好的相应。仔细分析下 SQL 注入语句,整个语句可以被分为两个部分: Y 作为 SQL 注入语句,被显示到了出错页面中。但是我们不需要 web 程序仅仅把提交语句返回,而是希望在 web 程序中执行该语句并返回数据。 这个地方我们做了一个条件查询,这个查询永远是正确的: 为了达到目的,我们引入另外的字符 Z 作为测试,并改变注入语句,改为:X=Z.Y 这样的话变量 Z 相当于对 SQL 注入语句的填充,同时我们也不知道变量的长度,通过改变 Z 的长度来测试(以 8 的倍数作为测试,32,64,128,256,512,1024),得到如下的结果:
  4. 4. 在上面的语句中 X 没有使用 16 进制的符号(即前面没有加 0x) 因为我们想通过模糊测 ,试的方法确定列名(注:可以从返回结果看到 BBB*没有在表 field list 里面,通过这种方法来暴力测试) 。变量 X 依据变量 Z 的结果作为条件进行判定(注:根据语句可以发现 SQL 语句中需要 A 的结果与 Z 的结果进行判定) 。这样的话可以结合 order by 命令实现对全部列名的暴力破解。 事实上,变量 X 在这里作为列名, 其值并不是很重要, 这里选择的是 column 1。通过测试 Z 变量的长度,构造了最终的语句: 构造的 SQL 语句成功执行,得到了相关数据。 通过这些语句的执行,获取了数据库中的用户名和密码。究其原因是由于程序没有对条件语句中的长度进行检测,最终导致了执行恶意的 SQL 语句。 测试版本: MySql community edition version 5.0.92 关于其他绕过防火墙的语句如下,主要用于条件检测方面的溢出问题。 此外,XML 中基于 extractvalue()函数并如果没有使用 union 调用的应用,也可以跟这类溢出技术结合起来, 这个函数只工作在 MySQL version > 5.1 的环境中, 它是以 XPATH 方式执行语句的。3、 总结 文章通过前面的阐述,实现了对 SQL 注入防御的一种绕过,这种先进的技术可以把注入技术发挥更好。结合多种技术可以把攻击方式做的很好, 通过这些知识也可以设计更加强健的系统。
  5. 5. 4、 译者补充 其实这种方法是原来就有的, 不管是 Beyond SQLi: Obfuscate and Bypass 或者 WAF Bypass:SQL Injection 文中都有涉及,但是作者很好地阐述了这个结果的挖掘方法, 还是非常不错的。

×