HTTP.sys 远程代码执行
测试类型:
基础结构测试
威胁分类:
操作系统命令
原因:
未安装第三方产品的最新补丁或最新修订程序
安全性风险:
可能会在 Web 服务器上运行远程命令。这通常意味着完全破坏服务器及其内容
技术描述:
通过 IIS 6 引入的 HTTP 协议堆栈 (HTTP.sys) 错误地解析了特制的 HTTP 请求。因此,远程攻击者可能执行拒绝服务供给,并可在系统帐户的环境中执行任意代码。该漏洞会影响 Windows 7、Windows Server 2008R2、Windows 8、Windows Server 2012、Windows 8.1 和 Windows Server 2012 R2 上安装的 IIS。Microsoft 发布了通过修改 Windows HTTP 堆栈处理请求的方式来解决漏洞的更新。
利用的样本:
GET / HTTP/1.1
Host: [SERVER]
Range: bytes=0-18446744073709551615
SQL 盲注
测试类型:
应用程序级别测试
威胁分类:
SQL 注入
原因:
未对用户输入正确执行危险字符清理
安全性风险:
可能会查看、修改或删除数据库条目和表
技术描述:
该软件使用受外部影响的输入来构造 SQL 命令的全部或一部分,但是它未能对可能在 SQL 命令发送到数据库时修改该命令的元素进行无害化处理。如果在用户可控制的输入中没有对 SQL 语法充分地除去或引用,那么生成的 SQL 查询可能会导致将这些输入解释为 SQL 而不是普通用户数据。这可用于修改查询逻辑以绕过安全性检查,或者插入其他用于修改后端数据库的语句,可能包括执行系统命令。
例如,假设有一个带有登录表单的 HTML 页面,该页面最终使用用户输入对数据库运行以下 SQL 查询:
SELECT * FROM accounts WHERE username=‘$user‘ AND password=‘$pass‘
两个变量($user 和 $pass)包含了用户在登录表单中输入的用户凭证。如果用户输入“jsmith”作为用户名,并输入“Demo1234”作为密码,那么 SQL 查询将如下所示:
SELECT * FROM accounts WHERE username=‘jsmith‘ AND password=‘Demo1234‘
但如果用户输入“‘”(单撇号)作为用户名,输入“‘”(单撇号)作为密码,那么 SQL 查询将如下所示:
SELECT * FROM accounts WHERE username=‘‘‘ AND password=‘‘‘
当然,这是格式错误的 SQL 查询,并将调用错误消息,而该错误消息可能会在 HTTP 响应中返回。通过此类错误,攻击者会知道 SQL 注入已成功,这样攻击者就会尝试进一步的攻击媒介。SQL 盲注类似于 SQL 注入。不同之处在于,要利用该攻击,攻击者无需寻找响应中的 SQL 错误。因此,AppScan 用于识别该攻击的方法也不同。AppScan 会查找易受 SQL 注入(通过多个请求来操纵应用程序的逻辑,而不是尝试调用 SQL 错误)影响的脚本。
该技巧需要发送特定请求,其中易受攻击的参数(嵌入在 SQL 查询中的参数)进行了相应修改,以便响应中会指示是否在 SQL 查询上下文中使用数据。该修改涉及将 AND 布尔表达式与原始字符串一起使用,使其一时求值为 True,一时求值为 False。在一种情况下,净结果应该与原始结果相同(登录成功),而在另一种情况下,结果应该完全不同(登录失败)。在某些少见的情况下,求值为 True 的 OR 表达式也可能很有用。如果原始数据是数字,可以使用更简单的花招。假设原始数据为 123。此数据可以在一个请求中替换为 0+123,而在另一个请求中替换为 456+123。第一个请求的结果应该与原始结果相同,第二个请求的结果应该不同(因为得出的数字是 579)。在某些情况中,我们仍需要上面所说明的攻击版本(使用 AND 和 OR),但并不转义字符串上下文。
SQL 盲注背后的概念是,即使不直接从数据库接收数据(以错误消息或泄漏的信息的形式),也可能从数据库中抽取数据(每次一个比特),或以恶意方式修改查询。其原理在于,应用程序的行为(返回与原始响应相同或不同的响应)可以提供有关所求值的(已修改)查询的单比特信息,也就是说,攻击者有可能设计出一个 SQL 布尔表达式,其求值(单比特)通过应用程序行为(与原始行为相同/不同)来造成破坏。
查询中的密码参数
测试类型:
应用程序级别测试
威胁分类:
信息泄露
原因:
查询字符串中传递了敏感输入字段(例如用户名、密码和信用卡号)
安全性风险:
可能会窃取查询字符串中发送的敏感数据,例如用户名和密码
技术描述:
在应用程序测试过程中,检测到查询字符串中接收到密码参数。由于登录过程所用的部分输入字段(例如:用户名、密码、电子邮件地址、社会保险号码,等等)是个人敏感信息,建议将其放在请求的主体部分或加密连接(如 SSL)中来发送到服务器。任何通过查询字符串传给服务器的信息都可能被窃,稍后可用来电子欺骗身份或伪装用户。此外,若干隐私权法规指出,用户凭证之类的敏感信息一律以加密方式传给网站。
跨站点脚本编制
测试类型:
应用程序级别测试
威胁分类:
跨站点脚本编制
原因:
未对用户输入正确执行危险字符清理
安全性风险:
可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务
技术描述:
AppScan 检测到应用程序未对用户可控制的输入正确进行无害化处理,就将其放置到充当 Web 页面的输出中。这可被跨站点脚本编制攻击利用。
在以下情况下会发生跨站点脚本编制 (XSS) 脆弱性:
[1] 不可信数据进入 Web 应用程序,通常来自 Web 请求。
[2] Web 应用程序动态生成了包含此不可信数据的 Web 页面。
[3] 页面生成期间,应用程序不会禁止数据包含可由 Web 浏览器执行的内容,例如 JavaScript、HTML 标记、HTML 属性、鼠标事件、Flash 和 ActiveX。
[4] 受害者通过 浏览器访问生成的 Web 页面,该页面包含已使用不可信数据注入的恶意脚本。
[5] 由于脚本来自 Web 服务器发送的 Web 页面,因此受害者的 Web 浏览器在 Web 服务器的域的上下文中执行恶意脚本。
[6] 这实际违反了 Web 浏览器的同源策略的意图,该策略声明一个域中的脚本不应该能够访问其他域中的资源或运行其他域中的代码。
一旦注入恶意脚本后,攻击者就能够执行各种恶意活动。攻击者可能将私有信息(例如可能包含会话信息的 cookie)从受害者的机器传输给攻击者。攻击者可能以受害者的身份将恶意请求发送到 Web 站点,如果受害者具有管理该站点的管理员特权,这可能对站点尤其危险。
网络钓鱼攻击可用于模仿可信站点,并诱导受害者输入密码,从而使攻击者能够危及受害者在该 Web 站点上的帐户。最后,脚本可利用 Web 浏览器本身中的脆弱性,可能是接管受害者的机器(有时称为“路过式入侵”)。
主要有三种类型的 XSS:
类型 1:反射的 XSS(也称为“非持久性”)
服务器直接从 HTTP 请求中读取数据,并将其反射回 HTTP 响应。在发生反射的 XSS 利用情况时,攻击者会导致受害者向易受攻击的 Web 应用程序提供危险内容,然后该内容会反射回受害者并由 Web 浏览器执行。传递恶意内容的最常用机制是将其作为参数包含在公共发布或通过电子邮件直接发送给受害者的 URL 中。以此方式构造的 URL 构成了许多网络钓鱼方案的核心,攻击者借此骗取受害者的信任,使其访问指向易受攻击的站点的 URL。在站点将攻击者的内容反射回受害者之后,受害者的浏览器将执行该内容。
类型 2:存储的 XSS(也称为“持久性”)
应用程序在数据库、消息论坛、访问者日志或其他可信数据存储器中存储危险数据。在以后某个时间,危险数据会读回到应用程序并包含在动态内容中。从攻击者的角度来看,注入恶意内容的最佳位置是向许多用户或特别感兴趣的用户显示的区域。感兴趣的用户通常在应用程序中具有较高的特权,或者他们会与对攻击者有价值的敏感数据进行交互。如果其中某个用户执行恶意内容,那么攻击者就有可能能够以该用户的身份执行特权操作,或者获取对属于该用户的敏感数
据的访问权。例如,攻击者可能在日志消息中注入 XSS,而管理员查看日志时可能不会正确处理该消息。
类型 0:基于 DOM 的 XSS
在基于 DOM 的 XSS 中,客户机执行将 XSS 注入页面的操作;在其他类型中,注入操作由服务器执行。基于 DOM 的XSS 中通常涉及发送到客户机的由服务器控制的可信脚本,例如,在用户提交表单之前对表单执行健全性检查的Javascript。如果服务器提供的脚本处理用户提供的数据,然后将数据注入回 Web 页面(例如通过动态 HTML),那么基于 DOM 的 XSS 就有可能发生。以下示例显示了在响应中返回参数值的脚本。
参数值通过使用 GET 请求发送到脚本,然后在 HTML 中嵌入的响应中返回。
[REQUEST]
GET /index.aspx?name=JSmith HTTP/1.1
[RESPONSE]
HTTP/1.1 200 OK
Server: SomeServer
Date: Sun, 01 Jan 2002 00:31:19 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 27
<HTML>
Hello JSmith
</HTML>
攻击者可能会利用类似以下情况的攻击:
[ATTACK REQUEST]
GET /index.aspx?name=>"‘><script>alert(‘PWND‘)</script> HTTP/1.1
2017/5/27 390
TOC
[ATTACK RESPONSE]
HTTP/1.1 200 OK
Server: SomeServer
Date: Sun, 01 Jan 2002 00:31:19 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 83
<HTML>
Hello >"‘><script>alert(‘PWND‘)</script>
</HTML>
在这种情况下,JavaScript 代码将由浏览器执行(>"‘> 部分在此处并不相关)。
Unix 文件参数变更
测试类型:
应用程序级别测试
威胁分类:
路径遍历
原因:
未对用户输入正确执行危险字符清理
未检查用户输入中是否包含“..”(两个点)字符串
安全性风险:
可能会查看 Web 服务器(在 Web 服务器用户的许可权限制下)上的任何文件(例如,数据库、用户信息或配置文件)的内容
技术描述:
软件使用外部输入来构造旨在识别位于受限制父目录中的文件或目录的路径名,但是该软件没有对路径名中可导致路径解析到受限制目录之外的位置的元素进行无害化处理。许多文件操作需要在受限制目录中执行。通过使用特殊元素(例如“..”和“/”分隔符),攻击者就可能逃脱到受限制位置之外,从而访问系统上其他位置的文件或目录。其中一个最常用的特殊元素是“../”序列,在最现代的操作系统中,该序列解释为当前位置的父目录。这称为相对路径遍历。路径遍历包括使用绝对路径名,例如“/usr/local/bin”,这有可能用于访问意外文件。这称为绝对路径遍历。在许多编程语言中,通过注入空字节(0 或 NUL),攻击者就能够截断生成的文件名以扩大攻击的范围。例如,软件可向任何路径名添加“.txt”,从而将攻击者限制到文本文件,但空注入可有效除去此限制。
链接注入(便于跨站请求伪造)
测试类型:
应用程序级别测试
威胁分类:
内容电子欺骗
原因:
未对用户输入正确执行危险字符清理
安全性风险:
可能会劝说初级用户提供诸如用户名、密码、信用卡号、社会保险号等敏感信息
可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务
可能会在 Web 服务器上上载、修改或删除 Web 页面、脚本和文件
技术描述:
该软件使用受外部影响的输入来构造命令、数据结构或记录的全部或一部分,但未能对可能修改其解析或解释方式的元素进行无害化处理。
“链接注入”是通过在某个站点中嵌入外部站点的 URL,或者在易受攻击的站点中嵌入脚本的 URL,从而修改该站点的内容。在易受攻击的站点中嵌入 URL 后,攻击者能够将其作为发起针对其他站点(以及针对这个易受攻击的站点本身)的攻击的平台。
其中一些可能的攻击需要用户在攻击期间登录站点。通过从易受攻击的站点本身发起这些攻击,攻击者成功的可能性更高,因为用户更倾向于登录。
“链接注入”脆弱性是未对用户输入进行充分清理所导致的结果,该输入以后会在站点响应中返回给用户。这样一来,攻击者能够将危险字符注入响应中,从而有可能嵌入 URL,以及做出其他可能的内容修改。
以下是“链接注入”的示例(我们假设站点“www.vulnerable.com”有一个名为“name”的参数,用于问候用户)。
下列请求:HTTP://www.vulnerable.com/greet.asp?name=JohnSmith
会生成下列响应:
<HTML>
<BODY>
Hello, John Smith.
</BODY>
</HTML>
然而,恶意的用户可以发送下列请求:
HTTP://www.vulnerable.com/greet.asp?name=<IMG SRC="http://www.ANY-SITE.com/ANY-SCRIPT.asp">
这会返回下列响应:
<HTML>
<BODY>
Hello, <IMG SRC="http://www.ANY-SITE.com/ANY-SCRIPT.asp">.
</BODY>
</HTML>
如以上示例所示,攻击者有可能导致用户浏览器向攻击者企图攻击的几乎任何站点发出自动请求。因此,“链接注入”脆弱性可用于发起几种类型的攻击:
[-] 跨站点请求伪造
[-] 跨站点脚本编制
[-] 网络钓鱼
通过框架钓鱼
测试类型:
应用程序级别测试
威胁分类:
内容电子欺骗
原因:
未对用户输入正确执行危险字符清理