【web-渗透测试方法】(15.7)测试功能方面的输入漏洞

目录

一、测试功能方面的输入漏洞

1.1、简介:

1.2、测试SMTP注入

1.3、测试本地代码漏洞

测试缓冲区溢出

测试整数漏洞

测试格式化字符串漏洞

1.4、测试SOAP注入

1.5、测试LDAP注入

1.6、测试XPath注入

1.7、测试后端请求注入

1.8、测试XXE注入


一、测试功能方面的输入漏洞

1.1、简介:

基于输入的漏洞外,还有一系列漏洞只有在特殊功能中才会表现出来,在实践下面的测试步骤之前,首先应当对应用程序的受攻击面的评估结果进行分析,确定可能出现这些漏洞的应用程序功能,并集中精力测试这些功能

【web-渗透测试方法】(15.7)测试功能方面的输入漏洞_第1张图片

1.2、测试SMTP注入

1、对于与电子邮件有关的功能使用的每一个请求,轮流提交每个测试字符串作为每一个参数,并在相关位置插入电子邮件地址。可以使用Bp Intruder自动完成这项任务,这些测试字符串已经将特殊的字符进行了URL编码,因此不需要再对它们进行编码

2、检查测试结果,确定应用程序返回的所有错误消息,如果这些错误与电子邮件功能中的问题有关,确定是否有必要问整输入,以利用漏洞

3、应该监控指定的电子邮件地址,看是否收到任何电子邮件

4、仔细检查生成相关请求的HTML表单,它们可能提供与服务器端软件有关的线索,其中可能包含一个用于指定电子邮件收件人(To)地址的隐藏或禁用字段,可以直接对其进行修改

1.3、测试本地代码漏洞

测试缓冲区溢出

1、向每一个目标数据提交一系列稍大于常用缓冲区大小的长字符串,一次针对一个数据实施攻击,最大程度地覆盖应用程序中的所有代码路径,可以使用Bp Intruder中的字符块有效载荷来源自动生成各种大小的有效载荷。

2、监控应用程序的响应,确定所有反常现象,任何无法控制的溢出几乎可以肯定会在应用程序中造成异常,虽然远程诊断问题的本质可能非常困难,寻找以下反常现象:

A、HTTP500态码或错误消息,这时其他畸形(而非超长)输入不会产生相同的结果

B、内容详细的消息,表示某个外部本地代码组件发生故障

C、服务器收到一个局部或畸形响应

D、服务器的TCP连接未返回响应,突然关闭

E、整个Web应用程序停止响应

F、应用程序返回出人意料的数据,表示内存中的一个字符串可能丢失了它的空终止符


测试整数漏洞

1、当测试本地代码组件时,确定所有基于整数的数据,特别是长度指示符,可以利用它触发整数漏洞

2、向每一个目标数据提交旨在触发漏洞的适当有效载荷,轮流向每一个目标数据发送一系列不同的值,分别表示不同大小的有符号与无符号整数值的边界情况:0x7f与0x80 (127与128)、0xff与0x100 ( 255与256 )、0x7ffff与0x8000 (32 767与32768)、0xffff与0x10000 (65535与65536 )……

3、当被修改的数据以十六进制表示时,应该发送每个测试字符串的little-endian与big-endian版本,如ff7f及7fff,如果十六进制数字以ASCll形式提交,应该使用应用程序自身使用的字母字符, 确保这些字符被正确编码

4、监控应用程序的响应, 查找所打反常事件


测试格式化字符串漏洞

1、轮流向每一个参数提交包含一长串不同格式说明符的字符串(注将%字符URL编码成%25)

2、监控应用程序的响应,查找所有反常事件

1.4、测试SOAP注入

1、轮流测试怀疑通过SOAP消息处理的参数,提交一个恶意XML结束标签,如,没有发生错误就表示该输入可能没有插入SOAP消息中,或以某种方式被净化

2、出现错误就提交一对有效的起始与结束标签,如,如果这对标签使错误消失,应用程序很可能易于受到攻击

3、如果提交的攻击字符串在应用程序的响应中原样返回,轮流提交(test、test)两个值。如果发现其中一个值的返回结果为另一个值,或只是返回test,那么可以确信该输入被插人到了XML消息中

4、如果HTTP请求中包含几个可放入SOAP消息中的参数,尝试在一个参数中插入起始注释字符,然后轮换在参数中插入这两个字符(因为无法知道参数出现的顺序),这样做可能会把服务器SOAP消息的某个部分作为注释处理,从而改变应用程序的逻辑, 或形成一个可能选成信息泄露的错误条件

1.5、测试LDAP注入

1、在任何使用用户提交的数据从一个目录服务中获取信息的功能中,针对每一个参数,轮流测试是否可以注入LDAP查询

2、提交*字符,返回大量结果就明确表示针对的是LDAP查询

3、尝试输入大量闭括号,这个输入会使查询语法失效, 因此如果它导致错误或其他反常行为,那么应用程序易于受到攻击(许多其他应用程序功能和注入情况也会造成相同的结果)

4、尝试输入干扰不同查询的各种表达式,看是否影响返回的结果,在查询目录未知的情况下cn非常有用,因为所有的LDAP实现都支持这个特性:)(cn=*、*))(|(cn=*、*))%00

5、尝试在输入结尾增加其他属性,并用逗号分隔这些属性,轮流测试每一个属性,返回错误消息就表示该属性当前无效

1.6、测试XPath注入

1、尝试提交下面的值,并确定它们是否会使应用程序的行为发生改变,但不会造成错误

' or count(parent::*[position()=1])=0 or 'a'='b

' or count(parent::*[position()=1])>0 or 'a'='b

2、如果参数为数字,尝试提交下面的测试字符串

1 or count(parent::*[position()=1])=0

1 or count(parent::*[position()=1])>0

3、如果上面的任何字符串导致应用程序的行为发生改变,但不会造成错误,很可能可以通过设计测试条件一次提取一字节的信息,从而获取任意数据,使用一系列条件确定当前节点的父节点的名称:substring(name(parent:*[position()=1]),1,1) ='a'

4、提取出父节点的名称后,使用一系列下列格式的条件提取XML树中的所有数据

substring(//parentnodename[position()=1]/child::node() [potion() = 1]/text(),1,1) = 'a'

1.7、测试后端请求注入

1、确定在参数中指定内部服务器名称或IP地址的任何情况,提交任意服务器和端口,监视应用程序是否出现超时,还可以提交localhost,然后提交自己的IP地址,之后在指定端口上监视传入连接

2、针对根据特定值返回特定页面的请求参数,尝试使用各种语法附加新的注入参数

如果应用程序的行为与未修改原始参数时相同,说明其中可能存在HTTP参数注入漏洞,这时可通过注入可能更改后端逻辑的已知参数的名/值对来攻击后端清求

1.8、测试XXE注入

如果用户正向服务器提交XML, 则可以实施外部实体注入攻击,如果已知会向用户返回某个字段,可以尝试指定一个外部实体

你可能感兴趣的:(0X02【web渗透】,web安全)