注册忘记密码

黑客论坛,黑客工具,黑客教程,QQ技术,黑客基地,黑客网络,黑客软件,黑客联盟,免杀,远控,ddos,cc,黑客攻防,黑客编程,黑客定位,手机定位,微信定位,hack,黑客网站,查开房,定位,信息查询

查看: 51|回复: 0

[技术文章] 黑客组织之SQL注入测试

[复制链接]
   0 UID
   0帖子
   0精华
21
   0威望
500
   0金币
45446
   0贡献
5000
   0阅读权限
   200
   积分
   0
   在线时间
   554 小时
   最后登录
   2020-1-17
一般通过远程测试判断是否存在 SQL 注入(例如,通过 Internet 并作为应用渗透测试的一 部分),所以通常没有机会通过查看源代码来复查注入的查询的结构。因此常常需要通过推理 来进行大量测试,即“如果看到这样的测试结果,那么在后台可能执行了这样的操作”。
本章从使用浏览器与 Web 应用进行交互这一视角来讨论发现 SQL 注入问题时所涉及的技 术。我们将阐述如何证实发现的问题是 SQL 注入而非其他问题(如 XML 注入)。最后介绍如何 将 SQL 注入的发现过程自动化以提高检测简单 SQL 注入的效率。
1.寻找SQL注入
SQL 注入可以出现在任何从系统或用户接收数据输入的前端应用程序中,这些应用程序之 后被用于访问数据库服务器。本节将重点关注最常见的 Web 环境。最开始我们只使用一种 Web 浏览器。
在 Web 环境中,Web 浏览器是客户端,它扮演向用户请求数据并将数据发送到远程服务 器的前端角色。远程服务器使用提交的数据创建 SQL 查询。该阶段的主要目标是识别服务器 响应中的异常并确定是否是由 SQL 注入漏洞产生的。随后,将确定在服务器端运行的 SQL 查 询的类型(即 SELECT、UPDATE、INSERT 或DELETE),以及将攻击代码注入查询中的位置(比 如 FROM 子句、WHERE 子句或者 ORDER BY 子句等位置)。
虽然本章包含很多示例和场景,但我们仍然无法介绍所有会被发现的 SQL 注入。可以这 样来理解:有人教你怎样将两个数相加,但没有必要(或尝试着)将所有可能的数都相加,只要 知道怎样将两个数相加,就可以将该原理应用到所有涉及加法的场合。SQL 注入也是一样的道 理。我们需要理解怎样做以及为什么这样做,剩下的就是实践问题。
我们很难访问到应用的源代码,因此需要借助推理进行测试。要理解并进行攻击,拥有一 种分析型思维模式非常重要。理解服务器响应时需要非常细心,这样才能了解服务器端正在发 生的情况。
借助推理进行测试比想象中要容易。它只是向服务器发送请求,然后检测响应中的异常。 读者可能认为寻找 SQL 注入漏洞是向服务器发送随机值,但在理解了攻击逻辑和基本原理之 后,您将会发现该过程简单而有趣。
2.借助推理进行测试
识别 SQL 注入漏洞有一种简单的规则:通过发送意外数据来触发异常。该规则包括如下 含义:
● 识别 Web 应用上所有的数据输入。
● 了解哪种类型的请求会触发异常。
● 检测服务器响应中的异常。
就是这么简单。首先要清楚 Web 浏览器如何向 Web 服务器发送请求。不同的应用会有不
同的表现方式,但基本原理是相同的,因为它们均处在基于 Web 的环境中。 识别出应用程序接收的所有数据后,需要修改这些数据并分析服务器对它们的响应。有时 响应中会直接包含来自数据库的 SQL 错误,这时所有工作都将变得非常简单。有时要不断集
中精力以便检测响应中细微的差别。
1. 识别数据输入
Web 环境是一种客户端/服务器架构。浏览器(作为客户端)向服务器发送请求并等待响应。 服务器接收请求,产生响应,将其发送回客户端。很明显,双方必须存在某种方式的约定。否 则,客户端请求某些内容,服务器将不知道怎样回复。双方必须使用一种协议作为双方的约定, 这种协议就是 HTTP。
我们的首要任务是识别远程 Web 应用所接收的所有数据输入。HTTP 定义了很多客户端可 以发送给服务器的操作,但我们只关注与寻找 SQL 注入相关的两种方法:GET 和 POST。
GET 请求
GET 是一种请求服务器的 HTTP 方法。使用该方法时,信息包含在 URL 中。点击一个链 接时,一般会使用该方法。通常,Web 浏览器创建 GET 请求,发送给 Web 服务器,然后在浏 览器中呈现结果。GET 请求对用户是透明的,但发送给 Web 服务器的 GET 请求却是:
GET /search.aspx?text=lcd%20monitors&cat=1&num=20 HTTP/1.1 Host: www.victim.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
rv:1.8.1.19) Gecko/20081216 Ubuntu/8.04 (hardy) Firefox/2.0.0.19 Accept: text/xml,application/xml,application/xhtml+xml, text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5 Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300
Proxy-Connection: keep-alive
该请求在 URL 中发送参数,格式如下所示: ?parameter1=value1&parameter2=value2&parameter3=value3...
上述示例中包含三个参数:text、cat 和 num。远程应用将检索这些参数的值,将它们用于 事先设计好的目的。对于 GET 请求来说,只需在浏览器的导航栏中稍作修改即可操纵这些参 数。此外,还可以使用代理工具,稍后将进行介绍。
POST 请求
POST 是一种用于向 Web 服务器发送信息的 HTTP 方法。服务器执行的操作则取决于目标 URL。在浏览器中填写表单并单击 Submit 按钮时通常使用该方法。浏览器会透明地完成所有 工作,下面的例子给出了浏览器发送给远程 Web 服务器的内容:
POST /contact/index.asp HTTP/1.1
Host: www.victim.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.19)
Gecko/20081216 Ubuntu/8.04 (hardy) Firefox/2.0.0.19 Accept: text/xml,application/xml,application/xhtml+xml, text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5 Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300
Referer: http://www.victim.com/contact/index.asp
Content-Type: application/x-www-form-urlencoded
Content-Length: 129 first=John&last=Doe&[email protected]&phone=555123456&title=Mr&country
=US&comments=I%20would%20like%20to%20request%20information
这里发送给 Web 服务器的值与 GET 请求的格式相同,不过现在这些值位于请求的底部。
注意:
请记住,数据如何在浏览器中呈现并不重要。有些值可能是表单中的隐藏字段,也可能是 带一组选项的下拉字段;有些值则可能有大小限制或者包含禁用的字段。
请记住,这些都只是客户端功能,我们可以完全控制发送给服务器的内容。不要将客户端 接口机制看作安全功能。
读者可能会问:如果浏览器禁止我修改数据怎么办?有两种解决办法:
● 浏览器修改扩展
● 代理服务器 浏览器修改扩展是运行于浏览器之上的插件,它能够实现一些附加功能。例如,针对 Mozilla
Firefox 浏览器的 Web Developer 插件(https://addons.mozilla.org/en-US/firefox/addon/60)和针对 Google Chrome 的 Web Developer 插件(https://chrome.google.com/webstore/detail/ bfbameneiokkg- bdmiekhjnmfkcnldhhm)可以实现显示隐藏字段、清除大小限制、将所选 HTML 字段转换成输入 字段等任务。当试图操纵发送给服务器的字段时该插件非常有用。
Tamper Data(https://addons.mozilla.org/en-US/firefox/addon/966)是另一款用于 Firefox 的有 趣插件。可以使用 Tamper Data 查看并修改 HTTP 和 HTTPS 请求中的头和 POST 参数。还有一 款是SQL Inject Me(https://addons.mozilla.org/en-US/firefox/addon/7597),该工具借助在HTML 页面中找到的表单字段来发送数据库转义字符串。
第二种解决方案是使用本地代理。本地代理是一些介于浏览器和服务器之间的软件这些软件运行在本地计算机上。图 2-1 中给出的是本地代理所处位置的逻辑表示方式。 代理用户 远程服务器 图 2-1 代理拦截发给 Web 服务器的请求,展示了如何使用代理服务器避开客户端的限制。代理负责拦截发给 Web 服务器的请 求,用户可随意修改请求的内容。要实现该目标,需要完成如下两件事情:
● 在自己的计算机上安装代理服务器
● 配置浏览器以使用代理服务器
安装用于 SQL 注入攻击的代理时,存在很多可选软件。其中最有名的是 Paros Proxy、
WebScarab和Burp Suite,它们都可以拦截流量并修改发送给服务器的数据。这几款软件间也 存在一些差异,可以根据个人喜好来具体选择一款。
安装并运行代理软件之后,您需要检查代理正在侦听的端口。设置浏览器以使用代理,这 时准备工作已基本完成。根据所选浏览器的不同,设置选项会位于不同的菜单中。例如在 Mozilla Firefox 中,单击 Edit|Preferences|Advanced|Network|Settings。
诸如 FoxyProxy(https://addons.mozilla.org/en-US/firefox/addon/2464)等 Firefox 插件允许您在 预设的代理设置之间进行切换。该功能非常有用,可为您节省不少时间。
在 Internet Explorer 中,可单击 Tools|Internet Options|Connections|Lan Settings|Proxy Server 来访问代理设置。
运行代理软件并将浏览器指向它之后,就可以开始测试目标 Web 站点并操纵发送给远程 应用的参数了。2展示了Burp Suite拦截POST请求并修改字段的过程。该请求已被代理拦截,用户 可任意修改其内容。修改完之后,用户应单击 forward 按钮,这样一来,修改后的请求将发送 给服务器。
在后面的 2.3 节“确认 SQL 注入”中,我们将讨论可以将哪些类型的内容注入参数中以便 触发 SQL 注入漏洞。

发表回复

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则


快速回复 返回顶部 返回列表