【web-渗透测试方法】(15.1)解析应用程序内容

本文详细介绍了Web应用程序渗透测试的方法论,强调了理解逻辑依赖关系和创造性思维的重要性。同时,提供了通用规范,如URL编码注意事项,以及解析应用程序内容的步骤,包括搜索可见内容、浏览公共资源、发现隐藏内容、查找默认内容和枚举功能标识符。此外,还提到了调试参数的枚举方法,以探测潜在的安全漏洞。
摘要由CSDN通过智能技术生成

目录

一、渗透测试方法

1.1、简介:

二、一般规范

2.1、简介:

三、解析应用程序内容

3.1、搜索可见的内容

3.2、浏览公共资源

3.3、发现隐藏的内容

3.4、查找默认的内容

3.5、枚举标识符指定的功能

3.6、调试参数


一、渗透测试方法

1.1、简介:

1、这个方法论中的一系列任务根据它们之间的逻辑依赖关系组织和排序,将尽可能在任务描述中重点介绍这些依赖关系。但实际上,往往需要发挥自己的想象,思考应采取的攻击方向,并根据所发现的有关目标应用程序的信息指导攻击方向

A、在某一个阶段收集到的信息有助于返回到前一个阶段以设计更有针对性的攻击。如可以利用访问控制漏洞获得所有用户的列表,针对验证功能实施更有效的密码猜测攻击

B、在应用程序的某个区域发现的一个关键漏洞可简化对另一个区域的攻击。如可以利用文件泄露漏洞对应用程序的关键功能进行代码审查,而不是盲目地探查这些功能

C、一些区域的测试结果有助于确定在其他区域可立即探查出的重复出现的漏洞模式。如可以利用应用程序输入确认过滤中的常见漏洞,迅速找到在几种不同的攻击中避开应用程序的防御机制的方法

2、可以使用这个方法论中列出的步骤作为攻击指导,并把它作为避免疏忽的清单,但不一定要过于严格地遵守这些步骤,在很大程度上,描述的任务都属于标准的常规性任务,要对Web应用程序实施最有效的攻击,必须充分发挥自己的想象力



二、一般规范

2.1、简介:

1、当执行攻击Web应用程序所需的详细步骤时,应该始终记住以下注意事项,适用于所有必须测试的区域以及需要采用的各种技巧

2、记住一些字符在HTTP请求的不同部分具有特殊的含义,当修改请求中的数据时,应该对这些字符进行URL编码,以确保应用程序按照想要的方式解释这些字符

A、&用于分隔URL查询字符串与消息主体中的参数。要插入一个字面量&字符,必须将其编码为%26

B、=用于分隔URL查询字符串与消息主体中每个参数的名称与值。要插入一个字面量=字符,必须将其编码为%3d

C、?用于标记URL查询字符串的起始位置。要插入一个字面量?字符,必须将其编码为%3f

D、空格用于在清求的第一行标记URL的结束位置,并可用于在Cookie消息头中表示一个
cookie结束。要插入一个字面从空格字符,必须将其编码为%20或+

E、因为+表示一个编码的空格,要插入一个字面量+字符,必须将其编码为%2b

F、;用于在Cookie消息头中分隔单个的cookie。要插入一个字面量;字符,必须将其编码为%3b

G、#用于在URL中标记片段标识符。如果在浏览器的URL中输入这个字符,它会将传送给服务器的URL截短。要插入一个字面量#字符,必须将其编码为%23

H、%在URL编码方案中作为前缀。要插入一个字面量%字符,必须将其编码为%25

I、空字节与换行符等非打印字符必须使用它们的ASCII字符代码进行URL编码。空字节与换行符的编码分别为%00和%0a

J、在表单中输入URL编码的数据通常会导致浏览器执行另一层编码。例如在表单中提交%00可能会导致向服务器发送值%2500。为此通常最好是在拦截代理服务器中查看最终请求

K、许多在找常见Web应用程序的测试需要发送各种专门设计的输入字符串,并监控应用程序的响应,从中搜索表示漏洞存在的反常现象。有时无论是否提交某个特定漏洞的触发器,应用程序对一个特殊请求的响应都将包含这个漏洞的签名。只要提交专门设计的特殊输入导致了与某个漏洞有关的行为(如一个特殊的错误消息),就应该重新核查,确定在相关参数中提交良性输入是否也会造成相同的行为。如果两种输入的行为相同,那么最初的发现可能是一个错误警报

L、应用程序会从前一个清求中收集一定量的状态,这会影响它们如何响应随后的请求。有时当调查一个尚未确定的漏洞并隔离某一个反常行为的根源时,必须避免任何收集到的状态信息造成的影响。通常使用一个新的浏览器进程开始另一个会话,再使用良性请求导航至观测到发生反常的位置,然后重新提交专门设计的输入,就足以达到这个目的。还可以对请求中包含的cookie和缓存信息进行调整,重复利用这种方法。此外还可以使用Bp等工具隔离一个请求,对它进行一些调整,然后根据需要重复多次发布这个诮求

M、一些应用程序使用一种负载平衡的配置,其中连续的HTTP请求可能会被不同的后端服务器在Web层、展现层、数据层或其他层处理。不同服务器在配置上的细微差异可能会影响到处理结果。另外一些成功的攻击将改变处理请求的某一台服务器的状态,例如在Web根目录上创建一个新的文件。为隔离特殊操作造成的影响,可能需要连续提交几个相同的请求,测试每个请求的结果,直到请求被相关服务器处理

3、假设需要在咨询工作中采用这种方法,应当首先确定测试范围,明确了解测试包含的主机名,URL与功能以及允许执行的测试类型是否存在任何限制。还应当向应用程序所有者告知对一个"黑盒"目标实施任何渗透测试包含的内在风险,并建议他们在开始测试前备份所有重要的数据



三、解析应用程序内容

3.1、搜索可见的内容

1、配置浏览器使用首选集成代理/抓取工具,可以使用Bp与WebScarab监控和解析由代理服务器处理的Web内容对站点实行被动抓取

2、如果有用,配置浏览器,使用一个扩展监控和分析被浏览器处理的HTTP与HTML内容

3、以常规方式浏览整个应用程序,访问发现的每一个链接和URL,提交每一个表单并执行全部多阶段功能,尝试在JavaScript激活与禁用、cookie激活与禁用的情况下浏览。许多应用程序能够处理各种浏览器配置,可以获得应用程序内的不同内容和代码路径 

4、如果应用程序使用身份验证,并且已经拥有或可以建立一个登录账户,那么就可以使用该账户访问被保护的功能

5、当浏览、监控通过拦截代理服务器的请求与响应时,了解被提交的数据种类,了解客户端如何控制服务器端应用程序的行为

6、检查被动抓取生成的站点地图,确定任何尚未使用浏览器访问到的内容或功能,根据抓取结果,确定发现每一项内容的位置,使用浏览器访问以上内容,以便爬虫解析服务器的响应,确定其他任何内容,重复执行上述步骤,直到无法再确定其他内容或功能

7、完成手动浏览和被动抓取后,可以用一组发现的URL作为种子,使用爬虫抓取应用程序。有时这样可发现其他在手动浏览时忽略的内容,在进行自动抓取前,首先应确定任何危险的或可能会中断应用程序会话的URL,并配置爬虫,将它们排除在抓取范围之外

3.2、浏览公共资源

1、使用因特网搜索引擎和历史档案确定它们编入索引或保存的与目标应用程序有关的内容

2、使用高级搜索选项提高搜索的效率。如在Google中,可以使用site获取所有与目标站点有关的内容,使用link获取链接到目标站点的其他站点。如果在搜索过程中找到现有应用程序已经删除的内容,仍然可以从搜索引擎的缓存中查看这些内容,这些已被删除的内容中可能包含尚未删除的其他资源的链接

3、搜索在应用程序内容【如联系信息,包括并未在屏幕上显示的内容(如HTML注释)】中发现的任何姓名与电子邮件地址。除Web搜索外,还应进行新闻和分组搜索。在因特网论坛上寻找与目标应用程序及其支持基础架构有关的所有技术信息

4、检查已发布的任何WSDL文件,以生成应用程序可能采用的功能名称和参数值列表

3.3、发现隐藏的内容

1、确定应用程序如何处理访问不存在的资源的请求,手动提出一些请求,访问已知有效和无效的资源,比较应用程序对这些请求的响应,找到一种确定资源并不存在的简单方法

2、获取常见文件与目录名以及常见的文件扩展名列表。将这些列表添加到已经确定的应用程序内容以及通过这些内容推断出的其他内容中,设法了解应用程序开发者采用的命名方案,例如,如果有页面被命名为AddDocument.jsp和ViewDocument.jsp,就可能有名为EditDocument.jsp和RemoveDocument.jsp的页面存在

3、审查所有客户端代码,确定任何与服务器端内容(包括HTML注释和禁用的表单元素)有关的线索

4、使用自动化技巧,根据目录名、文件名及文件扩展名列表提出大量请求。监控应用程序的响应,确定存在的可访问的内容

5、以刚刚枚举出的内容和模型作为用户指导的抓取以及自动化探入搜索的基础,重复进行这些内容在找操作

3.4、查找默认的内容

1、针对Web服务器运行Nikto,探查所有默认或已知存在的内容,使用Nikto的选项提高探查的效率。如使用-root选项指定在找默认内容的目录,或使用-404选项指定一个标识定制化"文件未发现" 页面的字符串

2、手动核查所有可能有用的发现,减少探查结果中的错误警报

3、请求服务器的根目录,在Host消息头中指定IP地址,确定应用程序是否使用任何不同的内容做出响应。如果是,则针对该IP地址及服务器名称运行Nikto扫描

4、向服务器的根目录提出请求,指定一系列User-Agent消息头

3.5、枚举标识符指定的功能

1、确定任何通过在谘求参数中提交一个功能标识符访问特殊应用程序功能的情况

2、对用于访问单项功能的机制,使用内容查找技巧。例如,如果应用程序使用一个包含功能名称的参数,首先应该确定指定无效功能时应用程序的行为,设法找到一个确定被请求的功能确实有效的简单方法,列出常用的功能名称或遍历所使用的标识符的语法范围。使枚举有效功能的操作自动化,使其尽可能迅速高效地完成

3、如果适用,根据功能路径而非URL编制一幅应用程序内容地图,列出所有枚举出的功能和逻辑路径以及它们之间的依赖关系

3.6、调试参数

1、选择一个或几个使用隐藏调试参数的应用程序页面或功能,它们最有可能出现在登录、搜索、文件上传或下载等关键功能中

2、使用常用调试参数名(debug、test、hide、source等)与常用参数值(true、yes、on、1)列表,排出这些名称与值的全部组合,向每一个目标功能提交每个名/值对,对于POST请求,在URL查询字符串和请求主体中提交参数(使用自动化技巧完成这项操作)例如,可以使用Bp中的集束炸弹攻击类型将两组有效载荷的全部组合结合起来

3、在应用程序的响应中在找任何表示添加的参数对应用程序的行为造成影响的反常现象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值