qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

Web安全测试学习笔记——“淘金”式攻击

软件测试的目的在于找到缺陷和证明缺陷,在这个过程中进行全面覆盖性或反复测试,以图无限地趋近100%,结果可能很好,但工作效率非常低。在WEB安全测试上,如何避免大海捞沙,需要有的放矢,把有价值的信息淘出来。

  安全测试的出发点和功能测试不太相同,安全测试的手段就是攻击,攻击,还是攻击。寻找有价值的信息,就是测试的第一招。“淘金”就是其中的一种方式,一般来说由以下信息需要关注。

  ◆ HTML中的代码注释

  ◆ HTML中的敏感代码

  ◆ 服务器或应用程序的错误信息和HTTP响应

  代码注释是一块很容易被开发人员忽略掉的信息,因为对于开发人员来说,这些就是他们做后期开发的“工程文档”,再正常不过的东西,甚至很乐意文件中能有更的关键注释。如代码中会出现“标记为1时,表示XXX信息”或“若为空,则交由XX处理”。这类信息只需要通过阅读HTML文件即可发现,并且对于攻击者来说是非常好的指南。

  如果攻击者能够根据通过对源代码的处理,获取到数据库信息、用户名、密码等数据时,这个应用是非常危险的。要获取这样的信息,首先需要清楚应用间的数据传递方式。通过GET方式传递的,可以直接在URL中获取到“参数名=参数值”,如果是通过POST传递的,就需要借助抓包工具,比如HttpFox、HttpWatch。当把所有关联页面都浏览完成后,就可以生成一张页面间的映射关系图,同时也可以知道它们之间参数的传递情况。如果应用程序实现了访问级别区分,比如高级别用户享有特权操作,那么就可以从低等级用户开始,逐级淘金。通过映射图阅读源代码,寻找注释中引导信息,就可以获得有价值的信息。除了手工地去寻找,还可以利用正则表达式自动搜寻。

  当找到以上信息后,检查页面之间传递的参数,看看哪些参数能够使得应用程序出错,这个时候就能发现一些有用的信息。如连接数据库时出错,脚本无法处理,该出错页面不但会提示错误,还可能把出错点附近的相关代码也显示出来,这些相关代码可能会把数据库名、表对象名及字段名等信息暴露出来。或者强行产生语法错误、营造无法处理的异常场景来破坏应用程序,则会得到服务器对其响应的许多函数调用。因此无论是应用程序还是Web服务器,应该谨慎维护好应对对策略。还有一种常见的漏洞,大家可以到各网站上去自行寻找,即对于用户名和密码输入不正确时触发不同的报错信息。如果使用这样的逻辑进行用户名和密码匹配的判断,当攻击者暴力破解时,他能够很清楚的知道,当前使用的用户名是否是已注册用户(当用户名正确时,提示是密码错误)。

  如何进行防范

  1、确定HTML中注释是否包含敏感信息;或在日常环境中保留这些注释,而在线上去除这些注释。

  2、尽量对于错误信息进行二次处理,尽量让用户看到的错误提示是模糊且有价值的;尽量把相关细节信息保留在服务器的日志文件中,方便开发调试的同时规避安全风险。同时需要定期检查这些日志文件,了解是否有错误信息是未被处理的。

posted on 2011-10-21 16:32 顺其自然EVO 阅读(182) 评论(0)  编辑  收藏 所属分类: 测试学习专栏

<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜