目录
(应用程序向客户端披露的线索,推断与服务器端功能和结构有关的信息,或做出有根据的猜测)
1.1、仔细分析请求
示例1:
访问搜索功能的URL为例
/xx.jsp?id=111&isExpired=0&Orderby=name
1、.jsp文件扩展名表示它使用Java Server Pages。据此可以推断搜索功能从索引系统或数据库获取信息;OrderBy参数暗示它使用后端数据库, 提交的值将被SQL查询的ORDER BY子句使用。和数据库查询使用的其他参数一样, 也非常容易受到SQL注入攻击
2、isExpired字段,是一个指定搜索查询是否应包含巳到期内容的布尔型标志。如果应用程序的设计者并不希望用户访问任何到期的内容, 将这个参数由0改为1就能够确定一个访问控制漏洞
示例2:
xxxx. aspx?template=NewBranch.tpl&loc=/default&ver=2.3&edit=false
1、.aspx文件扩展名表示这是一个ASP.NET应用程序。很可能template参数用于指定一个文件名,loc参数用于指定一个目录。文件扩展名tpl证明上述推论, 而位置/default很有可能是一个目录名称。应用程序可能获得指定的模板文件, 井将其内容包含在响应中。这些参数非常容易受到路径遍历攻击,允许攻击者读取服务器上的任何文件
2、edit参数,被设置为假。将这个值更改为真会修改注册功能,可能允许攻击者编辑应用程序开发者不希望用户编辑的数据。由ver参数井不能推断出任何有用的线索, 但修改这个参数可能会使应用程序执行一组可被攻击者利用的不同功能
示例3:
目录/xx.php
内容from=user@hack-mail.com=&toxxx@xxx-app.com&subject=xx+xx+xx&message=xx
1、php文件扩展名表示它使用PHP语言执行功能。应用程序有可能正通过接口与一个外部电子邮件系统连接
2、显示使用电子邮件的相关字段向那个系统提交用户可控制的输入。攻击者可利用这项功能向任何接收者发送任意邮件, 其中字段都易于遭受电子邮件消息头的注入攻击
示例4:
http://eis/pub/users/1/visw
猜测为:http://eis/manager?schema=pub&type=users&id=1&action=visw
1、users资源中很可能包含资源1, 并且应用程序正对该资源执行view的操作
2、将view操作更改为其他可能的操作, 如edit或add。更改为add并且是正确的, 则该操作相当于添加一个ID为1的资源。这一操作将会失败, 因为已经存在一个ID为1的资液。 使用ID值大于1,或选择任意较大的值
3、修改users为password等其他值
1.2、推测应用程序的行为
1、应用程序以统一的方式执行其全部功能
不同的功能可能由同一开发者编写, 或使用相同的设计规范, 或者共享相同的代码组件。在这种情况下,推断出服务器端某个领域的功能, 并据此类推其他领域的功能
2、可能会执行某种全局输入检查机制(即使用同一套过滤机制),如在处理前净化各种潜在的恶意输入
确定一个SQL盲注漏洞后,因为专门设计的请求正被输入确认逻辑以不可见的方式修改(即被过滤)
应用程序中可能还有其他功能为正在执行的净化提供良好的反馈,将用户提交的数据“反射” 给浏览器的功能。可以使用这项功能测试不同编码及SQL注人有效载荷的各种变化形式的有效性,判定在应用输入确认逻辑后, 必须提交哪些原始输入才能获得想要的攻击字符串。如果整个应用程序使用相同的确认机制, 让攻击者可以利用注入漏洞
(即找到一处漏洞能能分析出有效载荷,且使用同一过滤机制)
3、当在客户端保存敏感数据时,一些应用程序可使用定制的模糊处理方案, 防止用户随意查阅和修改这些数据。由于只能访问一个经过模糊处理的数据样本, 这类模糊处理方案可能非常难以解译。
应用程序中可能具有某些功能,用户向其提交模糊字符串即可获得原始字符串。例如,错误消息中可能包含导致错误的反模糊处理数据。如果整个应用程序使用相同的模糊处理方案,就可以从某个位置(如cookie中)提取一个模糊字符串,将其提交给其他功能, 解译出它的意义。
还可以对模糊处理方案执行逆向工程, 系统地向该功能提交各种数据并监控反模糊处理后得到的结果
4、应用程序处理各种错误的方式并不一致,一些区域合理防御并处理错误,而另外一些区域则简单放弃错误,向用户返回冗长的调试信息。
可以从某个区域返回的错误消息中收集相关信息,并将其应用于合理处理错误的其他区域。通过系统化地操纵请求参数并监控得到的错误消息,可以判定相关应用程序组件的内部结构和逻辑,并运用到其他区域
1.3、隔离独特的应用程序行为
1、许多可靠或成熟的应用程序采用一致的框架来防止各种类型的攻击,如跨站脚本、SQL注人和未授权访问。
2、最可能发现漏洞的区域,是应用程序中后续添加或“拼接” 而其常规安全框架不会处理的部分。这些部分可能没有通过验证、会话管理和访问控制与应用程序进行正确连接。通过GUI外观、参数命名约定方面的差异或者直接通过源代码中的注释即可确定这些区域。
3、记录其使用的标准GUI外观、参数命名或导航机制与应用程序的其他部分不同的任何功能
记录可能在后续添加的功能,包括调试功能、CAPTCHA控件、使用情况跟踪和第三方代码
对新区域进行全面检查(新旧区域可能机制不一样,简而言之,可能不是同一人,同一标准开发的)