《黑客攻防技术宝典:Web实战篇》习题答案(三)

第11章

1. 何为强制浏览?可以通过它确定哪些漏洞?    

强制浏览包括避开浏览器导航对应用程序功能访问顺序实施的任何限制。应使用强制浏览测试多阶段过程或其他区域中的错误假设。通常,这些假设会导致可以通过使用强制浏览加以利用的访问控制漏洞。

2. 为防止不同类型的攻击,应用程序对用户输入实施各种全局过滤。为防止SQL注入,它将出现在用户输入中的单引号配对。为防止针对一些本地代码组件的缓冲区溢出攻击,它将超长的数据截短到适当的长度。这些过滤有什么问题?  

如果在实施长度限制之前将引号配对,则通过在配对的两个引号之间截短输入,就可以在输入中引入奇数单引号(请参阅第9章了解详情)。

如果在配对之前应用长度限制,仍然可以通过在有效载荷的开头插入大量单引号,使该有效载荷充分放大,并使用位于有效载荷末尾的专门设计的数据来溢出缓冲区,从而达到利用任何缓冲区溢出条件的目的。

3. 可以采取哪些步骤来探查某登录功能中是否存在故障开放条件?(列出想到的各种不同测试。)    

应使用所控制帐户的证书,多次重复登录过程,并以特定方式修改请求:

(a) 对于提交的每个参数,尝试提交一个空值,完全省略名称/值对,并使用不同的值多次提交同一数据项。

(b) 如果登录过程包括多个阶段,应尝试以不同的顺序执行这些阶段、完全跳过单个阶段、直接进入任意阶段,以及在不需要参数的阶段提交参数。

(c) 如果多次提交了同一数据项,应进行探查,以确定如何处理每个值,以及在一个阶段确认的数据在后续阶段是否仍为可信数据。

4. 某银行应用程序采用一种非常安全可靠的多阶段登录机制。在第一个阶段,用户输入用户名和密码。在第二个阶段,用户输入在物理令牌上显示的一个不断变化的值,并通过隐藏表单字段重新提交前面输入的用户名。

可以立即发现的逻辑缺陷有哪些?

应用程序很可能单独执行这两个检查,根据一个用户名确认密码,根据另一个用户名确认令牌值,然后为其中一个已确认的用户名创建通过验证的会话。

如果拥有自己的物理令牌的应用程序用户没法获得了其他用户的密码,他们就可以作为该用户登录。相反,取决于该机制的运行方式,能够读取其他用户的令牌值的用户或许可以作为该用户登录,而无需了解后者的密码。该解决方案的总体安全状态将因此被明显削弱。

5. 在通过提交专门设计的输入探查一个应用程序中是否存在常见的漏洞时,应用程序频繁返回包含调试信息的详细错误消息。有时,这些消息与其他用户造成的错误有关。发生这种情况后,就无法令其再次发生。这表示应用程序存在什么逻辑缺陷,接下来该如何处理?

这种行为表示错误消息功能不是线程安全的,将返回由任何用户生成的上一个错误的详细信息。应同时使用两个不同的会话进行深入探查,以确认是否确实出现了这种情况。如果确实如此,应使用一段脚本不断触发一条详细的错误消息,并记录其内容中的任何差异,以获取与其他应用程序用户有关的有用信息。

第12章

1. 在应用程序的行为中,有什么“明显特征”可用于确定大多数XSS漏洞?
用户提交的输入在应用程序对该输入的响应中原样返回。

2. 假设在应用程序未通过验证的功能区域发现了一个反射型XSS漏洞。如何利用这个漏洞攻破一个通过验证的应用程序会话?请想出两种不同的方法。

多数情况下,利用未通过验证的功能中的XSS漏洞一样可以针对已通过验证的用户实施有效攻击——这些功能与已通过验证的功能的运行机制相同,可用于在已通过验证的用户会话中执行任意JavaScript脚本。

即使目标用户在攻击过程中并未登录,攻击者仍有可能攻破他们的账户。如果应用程序易于受到会话固定攻击,攻击者可以截获用户的令牌并等待其登录。攻击者可以在登录页面注入代码来截获键击,甚至可以显示一个木马登录表单,将用户的证书发送到其他位置。

3. 假设一个cookie参数未经过任何过滤或净化就被复制到应用程序的响应中。是否可以利用这种行为在返回的页面中注入任意JavaScript?是否可以利用这种行为实施针对其他用户的XSS攻击? 
第一个问题的答案是“是”。当然可以利用这种行为通过专门设计的输入注入任意JavaScript。第二个问题的答案是“或许”。以前,有各种方法可以在跨域请求中注入任意HTTP消息头,注入恶意cookie。旧版本的Flash及XMLHttpRequest一直易于受到这类攻击。此外,许多使用cookie的应用程序实际上接受位于其他位置(如查询字符串或消息主体)的同名参数。

4. 假设在仅返回给自己的数据中发现了保存型XSS漏洞。这种行为是否存在安全缺陷? 
孤立来说,用户似乎只可以利用这种行为来攻击自身。但是,如果与其他适当的漏洞(如访问控制漏洞或跨站点请求伪造漏洞)相结合,则这种行为可能会造成严重后果,并可能导致攻击者能够在向其他应用程序用户显示的页面中注入保存型JavaScript。

5. 在攻击一个处理文件附件并在浏览器中显示这些内容的Web邮件应用程序时,应立即检查哪种常见的漏洞?
如果应用程序不经任何净化就显示HTML或文本文件,则这些HTML或文本文件中包含的JavaScript将在任何查看该附件的用户的浏览器中执行。此外,如果JPEG文件包含HTML,则某些浏览器会自动将该文件作为HTML处理。在防范邮件附件中的XSS方面,许多Web邮件应用程序并未采取足够的保护措施。

6. 浏览器的同源策略如何给Ajax技术XMLHttpRequest的应用造成影响?

由于XMLHttpRequest可用于从HTTP请求中获取完整的响应,因此,正常情况下,只能利用它向和调用它的域相同的域提出请求。但是,HTML5引入了一个工具,如果所请求的域许可,XMLHttpRequest可利用该工具提出跨域请求并检索响应。

7. 列举3个利用XSS漏洞的可行攻击有效载荷(也就是说,攻击者可以在其他用户的浏览器中执行的恶意操作而不是传送攻击的方法)。

有无数针对XSS漏洞的攻击有效载荷。以下是一些常见的有效载荷:

盗窃会话cookie;

引诱用户操作;

注入木马功能;

盗窃存入缓存的自动完成数据;以及

记录键击。

8. 已知一个反射型XSS漏洞,可以在返回页面的HTML代码的某个位置注入任意数据。插入的数据被截短至50字节,但是我们希望注入一个超长的脚本,并且不想调用外部服务器上的脚本。如何解决长度限制呢?

可以将反射型XSS漏洞“转换成”基于DOM的XSS漏洞。例如,如果易受攻击的参数称为vuln,则可以使用以下URL执行任意长度的脚本:

/script.asp?vuln=<script>eval_r(location.hash.substr(1))</script>#alert('long script here ......')

9. 已知在一个必须使用POST方法的请求中存在反射型XSS漏洞。攻击者可以使用哪种传送机制实施攻击?

   如果POST方法是必需的,则不能仅仅在应用程序中构建一个专门设计的URL,以便在用户访问该URL时实施攻击。但是,可以创建一个第三方网页,使用POST方法向易受攻击的应用程序提交一个表单和位于隐藏字段中的相关参数。当用户查看该网页时,可以使用JavaScript自动提交上述表单。

第13章

1. 已知一项应用程序功能将一个查询字符串参数的内容插入到某个HTTP重定向的Location消息头中。利用这种行为,攻击者可以实施哪3种不同类型的攻击?   

(a) 任何重定向都会增加钓鱼攻击的可信度;

(b) 注入cookie消息头以利用会话固定漏洞;

(c) 通过响应分割攻击来毒害代理服务器的缓存。

2. 要针对应用程序的一项敏感功能实施CSRF攻击,必须满足什么前提条件?
    攻击者必须能够提前确定提交给该功能的所有相关参数。也就是说,这些参数不得包含任何秘密或无法预测的值,即攻击者不劫持受害者的会话就无法设置的值。

3. 哪3种防御措施可用于防止JSON劫持攻击?    

(a) 标准的反CSRF防御,即在针对包含敏感数据的JavaScript对象的请求中包括无法预测的参数;

(b) 在JavaScript响应的开头部分插入无效或存在问题的JavaScript;

(c) 强制使用POST方法来检索JavaScript对象。

4. 对于以下每一种技术,确定该技术请求/crossdomain.xml以正确实施域隔离的任何情形:

(a) Flash

(b) Java

(c) HTML5

(d) Silverlight

(a) 当某个Flash对象尝试提出跨域请求并检索响应时,Flash将请求/crossdomain.xml文件。即使该对象指定了应从中加载跨域策略的其他位置,Flash仍然会请求/crossdomain.xml,以确认主策略是否允许这样做。

(b) Java不会通过请求/crossdomain.xml来检查跨域策略。

(c) HTML5不会通过请求/crossdomain.xml来检查跨域策略。

(d) 当某个Silverlight对象尝试提出跨域请求并检索响应时,Silverlight将请求/crossdomain.xml文件,前提是Silverlight首先请求的/clientaccesspolicy.xml文件不存在。

5.“我们不会受到单击劫持攻击,因为我们不使用框架。”以上表述是否正确,为什么?

单击劫持攻击是指攻击者的网站创建一个包含易受攻击的网站的框架。它们与目标站点本身是否采用框架无关。

6. 已知某应用程序使用的昵称中存在一个永久性XSS漏洞,此字符串仅在配置它的用户登录应用程序时向该用户显示。请描述用于攻破该应用程序的其他用户的攻击所需执行的步骤。

可以使用以下步骤对这个漏洞加以利用:

(a) 攻击者在应用程序上创建自己的账户,并在自己的昵称中插入一个恶意有效载荷;

(b) 攻击者创建自己的站点,使访问者使用攻击者的证书登录易受攻击的应用程序(通过针对登录功能的CSRF攻击),然后请求包含恶意昵称的页面。

(c) 受害者受到诱惑访问攻击者的网站时,将登录易受攻击的应用程序,攻击者的JavaScript同时执行。该脚本将保存在受害者的浏览器中,并退出应用程序,同时呈现某些诱使受害者使用自己的证书登录的内容。如果受害者受到诱惑,则攻击者的脚本就可以攻破受害者的证书及生成的会话。从受害者的角度看,这种攻击简直“天衣无缝”,自己只是单击了一个链接,然后就看到易受攻击的应用程序本身的登录功能。

7. 如何测试应用程序是否允许使用XMLHttpRequest提出跨域请求?

可以在每个请求中添加以下消息头:

Origin: attacker.com

然后看应用程序的响应中是否包含以下消息头:

Access-Control-Allow-Origin

如果包含,则可以通过此消息头确定应用程序允许与哪些外部域(如果有)进行双向交互。

8. 请描述攻击者可诱使受害者使用任意cookie的3种方法。

(a) 一些应用程序功能接受任意参数名称/值,并在响应中的cookie内设置这些值。

(b) 可以利用任何HTTP消息头注入或XSS漏洞为受影响的域设置任意cookie。

(c) 中间人攻击者可以为任意域设置cookie。

第14章

1. 指出使用自动技巧在应用程序中枚举标识符时用到的3个标识符“触点”。

(a) HTTP状态码

(b) 响应长度

(c) 响应主体的内容

(d) Location消息头的内容

(e) 任何cookie的设置

(f) 出现的任何时间延迟

2. 对于下面的每一类漏洞,指出一个可用于确定该漏洞的模糊测试字符串:

(a) SQL注入

(b) OS命令注入

(c) 路径遍历

(d) 脚本文件包含

这个问题没有明确的答案。以下是可用于测试每类漏洞的模糊测试字符串示例,其他许多字符串也同样适用:

(a)   '

'; waitfor delay '0:0:30'--

(b)   ||ping -i 30 127.0.0.1;x||ping -n 30 127.0.0.1 &

(c)   ../../../../../../../../../../etc/passwd

..\..\..\..\..\..\..\..\..\..\boot.ini

(d)   http://<yourservername>/

3. 当对一个包含各种不同参数的请求进行模糊测试时,为何要在保持其他参数不变的情况下轮流针对每一个参数进行测试?

在许多情况下,以某种方式修改参数的值会导致错误,使应用程序停止对该请求执行其他处理。因此,应用程序将不会执行各种可能以危险方式处理其他参数的代码路径。

为确保自动模糊测试可以达到令人满意的代码覆盖效果,一种有效的方法是使用一个良性请求作为模板,并轮流修改每个参数,同时使其他参数保留其初始值。然后,可以基于模糊测试的结果及对每个参数作用的理解,继续对多个参数同时执行手动测试。如果时间允许,还可以使用有效载荷的不同排除组合同时修改多个参数,继续执行更加复杂的模糊测试。

4. 假设在一个试图对登录功能实施蛮力攻击以找到其他账户证书的自动攻击中,无论提交的是有效证书还是无效证书,应用程序都返回一个指向相同URL的HTTP重定向。在这种情况下,使用什么方法探查“触点”最为可靠?

通常,除重定向以外,在提交有效证书时,应用程序还会设置一个新cookie,用于分配一个通过验证的会话,当访问重定向时,此会话将显示不同的内容。如果是这种情况,则可以将Set-Cookie消息头作为探查触点的可靠方法。

如果情况并非如此,即在提交有效证书时,应用程序会升级现有会话,则攻击脚本可能需要访问重定向的目标,并检查生成的页面的内容,以确定渗透测试员是否已成功登录。

5. 当使用自动攻击从应用程序中获取数据时,想要的信息常常位于一个静态字符串之后,渗透测试员可以轻易截获这些数据。例如:

<input type=”text” name=”LastName” value=”

但是,在其他情况下事实并非如此,需要的信息之前的数据可能会发生变化。这时该如何设计一个自动攻击来满足需要?

    如果幸运的话,或许可以设计一个与所需截获的信息之前的数据或所需数据唯一匹配的正则表达式。否则,可能需要创建一段完全自定义的脚本,以分析每个应用程序响应并确定有用的数据项。

第15章

1. 当探查SQL注入漏洞时,如果请求以下URL:

https://wahh-app.com/list.aspx?artist=foo’+having+1=1--

将收到如下错误消息:

Server: Msg 170, Level 15, State 1, Line 1

Line 1: Incorrect syntax near ‘having1’.

从中可以得出什么结论?应用程序中包含任何可被利用的条件吗?

这说明应用程序将输入直接插入动态构建的查询中。但是,如错误消息中的表达式having1所示,它似乎删除了输入中出现的任何空白符。

当然可以对这种条件加以利用。可以使用SQL注释而不是空白符来分配查询中的语法项。例如:

https://wahh-app.com/list.aspx?artist=foo'having1=1--

这将返回不同的错误消息:

Server: Msg 8118, Level 16, State 1, Line 1

Column 'users.ID' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

这证实可以对上述条件加以利用,并完成了枚举所执行的查询的结构的第一个步骤。

2. 当对各种参数进行模糊测试时,应用程序返回以下错误消息:

Warning: mysql_connect() [function.mysql-connect]: Access denied for

user ‘premiumdde’@’localhost’ (using password: YES) in

/home/doau/public_html/premiumdde/directory on line 15

Warning: mysql_select_db() [function.mysql-select-db]: Access denied

for user ‘nobody’@’localhost’ (using password: NO) in

/home/doau/public_html/premiumdde/directory on line 16

Warning: mysql_select_db() [function.mysql-select-db]: A link to

the server could not be established in

/home/doau/public_html/premiumdde/directory on line 16

Warning: mysql_query() [function.mysql-query]: Access denied for

user ‘nobody’@’localhost’ (using password: NO) in

/home/doau/public_html/premiumdde/directory on line 448

从中可以获得哪些有用的信息

该错误消息提供了应用程序用于访问数据库的用户名、连接模式、应用程序Web内容的绝对文件路径,以及生成错误的脚本的行号。孤立来看,上述每一项信息似乎都无关紧要。但是,如果结合其他漏洞,渗透测试员就可以利用这些信息设计出针对应用程序的可怕攻击。

3. 在解析应用程序的过程中,在服务器上发现了一个激活了目录列表的隐藏目录,其中似乎保存着大量以前用过的脚本。请求其中一个脚本返回以下错误消息:

CGIWrap Error: Execution of this script not permitted

Execution of (contact.pl) is not permitted for the following reason:

Script is not executable. Issue ‘chmod 755 filename’

Local Information and Documentation:

CGIWrap Docs: http://wahh-app.com/cgiwrap-docs/

Contact EMail: helpdesk@wahh-app.com

Server Data:

Server Administrator/Contact: helpdesk@wahh-app.com

Server Name: wahh-app.com

Server Port: 80

Server Protocol: HTTP/1.1

Request Data:

User Agent/Browser: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT

5.1; .NET CLR 2.0.50727; FDM; InfoPath.1; .NET CLR 1.1.4322)

Request Method: GET

Remote Address: 192.168.201.19

Remote Port: 57961

Referring Page: http://wahh-app.com/cgi-bin/cgiwrap/fodd

是什么原因造成了这个错误?可以立即发现哪些常见的Web应用程序漏洞?

这是由cgiwrap创建的系统生成的错误消息。它表示因为没有适当的文件权限,所请求的脚本无法在服务器上执行。因此,这个脚本可能没有多少用处。

错误消息中包含了一些可能有用的信息,包括一个电子邮件地址。但是,更重要的是,其中包含了从客户端请求中复制的各种详细信息。因此,应探查服务器如何处理相关请求消息头中的专门设计的输入,以了解错误消息是否易于受到XSS攻击。请注意,用户可能会受到诱惑,从而通过Flash对象提出包含任意请求消息头的请求。

4. 在探查一个请求参数的功能并试图确定它在应用程序中的作用时,如果请求以下URL:

https://wahh-app.com/agents/checkcfg.php?name=admin&id=13&log=1

应用程序将返回以下错误消息:

Warning: mysql_connect() [function.mysql-connect]: Can’t connect to

MySQL server on ‘admin’ (10013) in

/var/local/www/include/dbconfig.php on line 23

这条错误消息是由什么原因造成的?为此应探查什么漏洞?

造成错误消息的原因是因为在name参数中提交了admin值。错误消息指出应用程序尝试(并且无法)连接到名为admin的主机上的数据库。似乎应用程序允许渗透测试员控制将用于执行请求的数据库。

应尝试提交所控制的服务器的IP地址或主机名,看应用程序是否会连接到服务器。还应尝试猜测内部网络中的一系列IP地址,看是否可以查找到可以从应用程序服务器访问的其他数据库。

鉴于所提供的主机名已被复制到错误消息中,因此还应调查应用程序是否易于受到XSS攻击。与应用程序中的主要功能相比,应用程序通常并不对错误消息等次要内容实施严格的输入确认和访问控制。

5. 当对一个请求进行模糊测试,以探查各种漏洞时,测试员轮流在每个请求参数中提交了一个单引号。其中一个请求的响应包含了HTTP 500状态码,表示应用程序可能存在SQL注入漏洞。消息的全部内容如下:

Microsoft VBScript runtime error ‘800a000d’

Type mismatch: ‘ [string: “’”]’

/scripts/confirmOrder.asp, line 715

该应用程序是否易于受到攻击?

    这条错误消息由一个脚本生成,该脚本正尝试将基于字符串的输入分配给一个数字参数。似乎只要在此参数中提交的数据并非数值,就会触发这个错误。没有任何迹象表明输入导致了数据库错误,或者由数据库处理。几乎可以肯定此参数不易于受到SQL注入攻击。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值