• 【web-渗透测试方法】(15.6)测试基于输入的漏洞


    目录

    一、测试基于输入的漏洞

    1.1、模糊测试所有清求参数

    1.2、测试SQL注入

    1.3、测试XSS和其他响应注入

    确定反射型请求参数

    测试反射型XSS

    测试HTTP消息头注入

    测试任意重定向

    测试存储型攻击

    1.4、测试OS命令注入

    1.5、测试路径遍历

    1.6、测试脚本注入

    1.7、测试文件包含


    一、测试基于输入的漏洞

    1.1、模糊测试所有清求参数

    1、检查应用程序解析过程中获得的结果,确定所有提交由服务器端应用程序处理的参数的特殊客户端请求,相关参数分别位于URL查询字符串、清求主体及HTTP cookie中,它们还包括所有给应用程序行为造成影响的用户提交的数据,如Referer或user-Agent消息头

    2、要对这些参数进行模糊测试,可以使用自己的脚本,或现成的模糊测试工具。如果使用Bp中lntruder,可轮流在工具中加载每一个请求,一个简单的方法是在BP中拦截一个请求,然后选择“发送至Intrude"操作,或在Bp历史记录中单击一个请求, 再选择这个选项,使用这个选项将在Bp lntruder中配置请求的内容、正确的目标主机和端口,然后Bp lntruder自动将所有请求参数的目标记为有效载荷位置,准备进行模糊测试

    3、使用"有效载荷"选项卡,配置一组适当的攻击有效载荷,在应用程序中探查漏洞,可以手动输入有效载荷,从一个文件中加载它们,或选择一个预先设定的有效载荷列表,模糊测试应用程序中的第一个请求参数往往需要发布数目庞大的请求,并在结果中查找反常现象,如果设定的攻击字符串过多,反而达不到预期的目标,甚至生成无数的输入,以致很难对其进行分析。因此测试一系列可在特定的专门设计的输入的反常响应中轻易确定的常见漏洞,以及出现在应用程序的所有位置而非某些特殊功能中的漏洞

    4、?/;/&/+/=/空格字符因为在HTTP请求中有特殊含义,需要进行URL编码。默认情况下,Bp lntruder会对这些字符进行必要的编码, 因此必须确保该选项没有被禁用

    5、在Bp Intruder的Grep功能中,配置一组合适的字符串,标记响应中的一些常见的错误消息

    6、选择"有效载荷Grep"选项,标记包含有效载荷自身的响应,该响应表示可能存在XSS或消息头注人漏洞

    7、在通过第一个文件包含有效载荷指定的主机上建立一个Web服务器或neteat监听器,监控服务器由于远程文件包含攻击而发出的连接尝试

    8、实施并完成攻击后,在结果中查找表示存在漏洞的反常响应,检查HTTP状态码、响应长度、响应时间、其中是否出现配置的表达式以及是否出现有效载荷本身,可以单击结果表的每一个列标题,对列中的值进行分类(按下Shift键的同时单击鼠标可对结果进行反向排序),这样做可迅速确定所有不同于其他结果的反常响应

    9、对模糊测试结果表明可能存在的每一个潜在的漏洞进行确认,同时考虑如何成功地利用这些漏洞

    10、一旦配置Bp lntruder对某个请求进行模糊测试后,就可以迅速地对应用程序中的其他请求进行相同的测试,在Bp中选定目标请求,再选择"发送至lntruder"选项,就可以立即使用现有的测试选项在lntruder中进行测试。这样就可以同时在单独的窗口中进行大量测试,在测试完成后手动检查测试结果

    11、如果在解析应用程序的过程中确定了带外输入通道,可通过它们向应用程序提交用户控制的输入。应当通过提交各种旨在触发常见的Web应用程序漏洞的专门设计的数据,对这些输入通过进行类似的模糊漏洞,根据输入通道的特点,可能需要建立一个定制脚本或其他工具

    12、除了手动对应用程序请求进行模糊测试外,如果拥有一个自动化Web应用程序漏洞扫描器,还应当运行该扫描器,对目标应用程序进行自动测试,并比较两方面的测试结果

    1.2、测试SQL注入

    1、如果发现SQL攻击字符串导致任何反常响应,那么应该手动探查,观察应用程序如何处理相关参数,确定其中是否存在SQL注入漏洞。

    2、如果提交上述字符串返回错误消息,分析这些消息的意义,了解错误消息在常用数据库平台中的含义

    3、如果在请求中提交一个单引号导致错误或出现其他反常行为,可尝试提交两个单引号,如果这种输入使错误或异常行为消失,应用程序可能易于受到SQL注入

    4、设法使用常用的SQL字符串连接符函数构建一个等同于良性输入的字符串,如果提交这个字符串得到与提交原始的良性输入相向的响应,那么应用程序可能易于受到攻击

    5、如果原始输入为数字字符,尝试使用一个其结果等于原始值的数学表达式。如果原始值为2,尝试提交1+1或3-1,如果应用程序做出相同的响应,表示它易于受到攻击,如果数字表达式的值对应用程序的行为造成系统性的影响,那么应用程序就特别容易受到攻击

    6、如果前面的测试取得成功,可以通过使用针对SQL的数学表达式构造一个特殊的值,进一步确定SQL注入漏洞是否存在,如果可以通过这种方式系统性地控制应用程序的逻辑,那么几乎可以肯定应用程序易于受到SQL注入攻击

    7、如果使用waitfor命令进行的模糊漏洞测试导致应用程序在进行响应时出现反常的时间延迟,那么所使用的数据库为MS-SQL,且应用程序易于受到SQL注入攻击,手动重复测试,在waitfor参数中指定不同的值,确定响应时间是否随着这个值而发生系统性的变化。注意可以在几个SQL查询中插入攻击有效载荷,这时观察到的时间延迟为指定值的固定倍数

    8、如果应用程序易于受到SQL注入攻击,要考虑可以实施哪些攻击,以及如何利用它们实现自己的目的

    A、修改WHERE子句中的条件,改变应用程序的逻辑(如注人or 1=1--+避开登录)

    B、使用union操作符注入任意一个SELECT查询,将它的结果与应用程序的原始查询的结果组合在一起

    C、使用针对数据库的SQL语法"指纹标识"数据库类型

    D、如果使用的数据库为MS-SQL,且应用程序在响应中返回ODBC错误消息,利用这些信息枚举数据库结构,获取任意数据

    E、如果无法获得一个任意输入的查询的结果,可以使用攻击技巧提取数据:获取数字格式的字符串数据,一次一个字节;使用带外通道;如果能够根据任意一个条件引发不同的应用程序响应,可使用Absinthe提取任意数据,一次一比特;如果能够根据一个任意的条件触发时间延迟,利用它们获取数据,一次一比特。

    F、如果应用程序阻止实施特殊攻击所需的某些字符或表达式,尝试使用各种技巧避开输入过滤

    G、如有可能,利用漏洞或强大的数据库函数,将攻击范围扩大到数据库与基础服务器中

    1.3、测试XSS和其他响应注入

    确定反射型请求参数

    1、单击"有效载荷Grep"列,分类模糊漏洞测试的结果,确定任何XSS有效载荷相匹配的字符串,这些是在应用程序响应中按原样返回的XSS测试字符串

    2、对于上述每一个字符串,检查应用程序的响应,查找用户提交的输入的位置,如果该字符串出现在响应主体中,应测试应用程序中是否存在XSS漏洞,如果它出现在HTTP消息头中,应测试应用程序中是否存在消息头注入漏洞,如果它被用在302响应的Location消息头中,或用于以某种方式指定重定向,应测试应用程序中是否存在重定向漏洞(同一个输入可能会被复制到响应中的几个位置,因此应用程序中可能存在几种类型的反射型漏洞)


    测试反射型XSS

    1、对于在响应主体中出现的所有请求参数,检查它周围的HTML代码,确定是否可以提交专门设计的输入,从而执行任意JavaScript脚本。如通过注入