编辑推荐

  《Web安全测试》将帮助你:
  获取、安装和配置有用的——且免费的——安全测试工具
  理解你的应用如何与用户通信,这样你就可以在测试中更好地模拟攻击
  从许多不同的模拟常见攻击(比如SQL注入、跨站式脚本和操纵隐藏表单域)的方法中进行选择
  作为自动化测试的出发点,通过使用秘诀中的脚奉和例子,使你的测试可重复
  不用再担心午夜来电话告诉你站点被破坏了。通过《Web安全测试》和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。
  (1)获取、安装和配置有用且免费的安全测试工具。
  (2)理解你的应用如何与用户通信,这样你就可以在测试中更好地模拟攻击。
  (3)从许多不同的模拟常见攻击(比如SQL注入,跨站式脚本和操纵隐藏表单域)的方法中进行选择。
  (4)作为自动化测试的出发点,通过使用秘诀中的脚本和例子,使你的测试可重复。

内容简介

  在你对Web应用所执行的测试中,安全测试可能是zui重要的,但它却常常是zui容易被忽略的。《Web安全测试》中的秘诀演示了开发和测试人员在进行单元测试、回归测试或探索性测试的同时,如何去检查zui常见的Web安全问题。与即兴的安全评估不同的是,这些秘诀是可重复的、简洁的、系统的——可以完美地集成到你的常规测试套装中。
  《Web安全测试》中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在《Web安全测试》的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本和注入攻击)的大型多级测试。
  《Web安全测试》将帮助你:
  ·获取、安装和配置有用的——且免费的——安全测试工具
  ·理解你的应用如何与用户通信,这样你就可以在测试中更好地模拟攻击
  ·从许多不同的模拟常见攻击(比如SQL注入、跨站式脚本和操纵隐藏表单域)的方法中进行选择
  ·作为自动化测试的出发点,通过使用秘诀中的脚本和例子,使你的测试可重复
  不用再担心午夜来电话告诉你站点被破坏了。通过《Web安全测试》和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。

作者简介

  PacoHope,是Cigital公司的一名技术经理,《MasteringFreeBsDand0penBsDsecurity》 (由O’Reilly出版)的合著者之一。他也发表过有关误用、滥用案例和PKI的文章。他曾被邀请到会议就软件安全需求、Web应用安全和嵌入式系统安全等话题发表演讲。在Cigital,他曾担任MasterCardInternationa!在安全策略方面的主题专家,而且曾协助一家世界500强的服务业公司编写软件安全策略。他也为软件开发和测试人员提供软件安全基础方面的培训。他还曾为博彩业和移动通信行业中的几家公司提出过软件安全方面的建议。Paco曾在威廉玛丽学院主修计算机科学和英语,并从弗吉尼亚大学获得计算机科学方面的理学硕士学位。

  BenWaltller,是Cigital公司的一名顾问,EditC00kies工具的开发者之一。他同时参与标准质量保证和软件安全方面的工作。他日复一日地设计和执行测试一一因此他理解忙碌的QA领域对简单秘诀的需求。他也曾对开放式Web应用程序安全项目(0WAsP)的成员就w曲应用测试工具发表过演讲。

精彩书评

  “贯穿整《Web安全测试》的精彩的真实示例,使理论生动起来,并使攻击引人入胜。”
  ——Lee Copeland.StarEast和StarWest测试会议的议程主席
  “最后,这是一本供测试人员使用的普通意义上的手册,它讲授安全测试的机制。与其秘诀使用方法不相符的是,这《Web安全测试》实际上武装了测试人员,使他们能够找出甚至连某些著名的安全工具也无法发现的漏洞。”
  ——MattFisher,Piscis有限责任公司的创始人和CEO

目录

序1
前言3
第1章绪论13
1.1什么是安全测试13
1.2什么是Web应用17
1.3Web应用基础21
1.4Web应用安全测试25
1.5方法才是重点26

第2章安装免费工具29
2.1安装Firefox29
2.2安装Firefox扩展30
2.3安装Firebug31
2.4安装OWASP的WebScarab32
2.5在Windows上安装Perl及其软件包33
2.6在Linux,Unix或OSX上安装Perl和使用CPAN34
2.7安装CAL900035
2.8安装ViewStateDecoder36
2.9安装cURL36
2.10安装Pornzilla37
2.11安装Cygwin38
2.12安装Nikto239
2.13安装BurpSuite40
2.14安装ApacheHTTPServer41

第3章基本观察43
3.1查看网页的HTML源代码44
3.2查看源代码,高级功能45
3.3使用Firebug观察实时的请求头48
3.4使用WebScarab观察实时的POST数据52
3.5查看隐藏表单域55
3.6使用TamperData观察实时的响应头56
3.7高亮显示JavaScript和注释59
3.8检测JavaScript事件60
3.9修改特定的元素属性61
3.10动态跟踪元素属性63
3.11结论65

第4章面向Web的数据编码66
4.1辨别二进制数据表示67
4.2使用Base-6469
4.3在网页中转换Base-36数字71
4.4在Perl中使用Base-3671
4.5使用以URL方式编码的数据72
4.6使用HTML实体数据74
4.7计算散列值76
4.8辨别时间格式78
4.9以编程方式对时间值进行编码80
4.10解码ASP.NET的视图状态81
4.11解码多重编码83

第5章篡改输入85
5.1截获和修改POST请求86
5.2绕过输入限制89
5.3篡改URL90
5.4自动篡改URL93
5.5测试对URL长度的处理94
5.6编辑Cookie96
5.7伪造浏览器头信息99
5.8上传带有恶意文件名的文件101
5.9上传大文件104
5.10上传恶意XML实体文件105
5.11上传恶意XML结构107
5.12上传恶意ZIP文件109
5.13上传样例病毒文件110
5.14绕过用户界面的限制111

第6章自动化批量扫描114
6.1使用WebScarab爬行网站115
6.2将爬行结果转换为清单117
6.3减少要测试的URL120
6.4使用电子表格程序来精简列表120
6.5使用LWP对网站做镜像121
6.6使用wget对网站做镜像123
6.7使用wget对特定的清单做镜像124
6.8使用Nikto扫描网站125
6.9理解Nikto的输出结果127
6.10使用Nikto扫描HTTPS站点128
6.11使用带身份验证的Nikto129
6.12在特定起始点启动Nikto130
6.13在Nikto中使用特定的会话Cookie131
6.14使用WSFuzzer测试Web服务132
6.15理解WSFuzzer的输出结果134

第7章使用cURL实现特定任务的自动化137
7.1使用cURL获取页面138
7.2获取URL的许多变体139
7.3自动跟踪重定向140
7.4使用cURL检查跨站式脚本141
7.5使用cURL检查目录遍历144
7.6冒充特定类型的网页浏览器或设备147
7.7以交互方式冒充另一种设备149
7.8使用cURL模仿搜索引擎151
7.9通过假造Referer头信息来伪造工作流程152
7.10仅获取HTTP头153
7.11使用cURL发送POST请求154
7.12保持会话状态156
7.13操纵Cookie157
7.14使用cURL上传文件158
7.15建立多级测试用例159
7.16结论164

第8章使用LibWWWPerl实现自动化166
8.1编写简单的Perl脚本来获取页面167
8.2以编程方式更改参数169
8.3使用POST模仿表单输入170
8.4捕获和保存Cookie172
8.5检查会话过期173
8.6测试会话固定175
8.7发送恶意Cookie值177
8.8上传恶意文件内容179
8.9上传带有恶意名称的文件181
8.10上传病毒到应用182
8.11使用Perl解析接收到的值184
8.12以编程方式来编辑页面186
8.13使用线程化提高性能189

第9章查找设计缺陷191
9.1绕过必需的导航192
9.2尝试特权操作194
9.3滥用密码恢复195
9.4滥用可预测的标识符197
9.5预测凭证199
9.6找出应用中的随机数200
9.7测试随机数202
9.8滥用可重复性204
9.9滥用高负载操作206
9.10滥用限制性的功能208
9.11滥用竞争条件209

第10章攻击AJAX211
10.1观察实时的AJAX请求213
10.2识别应用中的JavaScript214
10.3从AJAX活动回溯到源代码215
10.4截获和修改AJAX请求216
10.5截获和修改服务器响应218
10.6使用注入数据破坏AJAX220
10.7使用注入XML破坏AJAX222
10.8使用注入JSON破坏AJAX223
10.9破坏客户端状态224
10.10检查跨域访问226
10.11通过JSON劫持来读取私有数据227

第11章操纵会话229
11.1在Cookie中查找会话标识符230
11.2在请求中查找会话标识符232
11.3查找Authentication头233
11.4分析会话ID过期235
11.5使用Burp分析会话标识符239
11.6使用WebScarab分析会话随机性240
11.7更改会话以逃避限制245
11.8假扮其他用户247
11.9固定会话248
11.10测试跨站请求伪造249

第12章多层面的测试251
12.1使用XSS窃取Cookie251
12.2使用XSS创建覆盖253
12.3使用XSS产生HTTP请求255
12.4以交互方式尝试基于DOM的XSS256
12.5绕过字段长度限制(XSS)258
12.6以交互方式尝试跨站式跟踪259
12.7修改Host头261
12.8暴力猜测用户名和密码263
12.9以交互方式尝试PHP包含文件注入265
12.10制作解压缩炸弹266
12.11以交互方式尝试命令注入268
12.12系统地尝试命令注入270
12.13以交互方式尝试XPath注入273
12.14以交互方式尝试服务器端包含(SSI)注入275
12.15系统地尝试服务器端包含(SSI)注入276
12.16以交互方式尝试LDAP注入278
12.17以交互方式尝试日志注入280

精彩书摘

  提供证据
  在安全测试中,我们考虑无法接受的输入的全体集合——无限集——并重点关注那些很可能在我们软件的安全需求方面造成严重失效的输入子集——仍然是无限集。我们需要确定这些安全需求是什么,并决定什么类型的测试能够证明这些需求得到满足。这并不简单,但是通过逻辑和勤奋,我们能够向产品所有者提供有用的证据。我们证明安全满足需求的方式将与证明功能满足要求的方法相同。我们建立输入,确定预期结果,然后建立并运行测试来锻炼系统。以我们与不熟悉安全测试的测试人员交往的经历来看,第一步和最后一步是最难的。设计反安全的输入和对软件进行测试是最难做的事情。大多数时间,预期的结果相当简单。如果我询问产品经理:“有人能够在不登录的情况下下载敏感数据吗?”。通常他很容易就会说不。因此,提供证据过程中较难的部分是创造出可能会造成这种状况的输入,然后确定这种状况是否会发生。
  满足需求
  有关软件工程学的ANSI/IEEE标准729将“需求”定义为用户为了解决问题或达成目标所需要的条件或功能,或为了满足合同、标准,规范或其他正式起效的文档。系统所必须拥有或满足的条件或功能。在得知需求的情况下,所有测试人员都进行测试直到满足需求。即使需求并不是以充斥着“该软件应当”语句的形式出现。软件测试人员也往往能够就正确的响应达成共识,然后以预期结果的形式将其整理到测试之中。安全测试与功能测试相似,因为它同样也依赖于对“我们想要怎样的行为”的理解。当然也可以说,与功能测试相比,安全测试更加依赖于需求,因为它有更多可能的输入和输出可供筛选。在需求编写者的脑海里,安全行为的定义往往更加模糊,因为大多数软件都不是安全软件。该软件有一些其他方面的主要用途,而安全是一种必须存在的非功能性需求。因为对安全的关注不够,所以这方面的需求常常缺失或不完整。
  ……

前言/序言

  Web应用遭受着格外多的安全攻击。其原因在于,网站及在网站上运行的应用在某种意义上是所有公司和组织的虚拟正门。Web自1993年以来的发展令人瞠目结舌,就其被广泛采用的速度而言,甚至超过了电视和电力技术。
  Web应用在软件开发中所扮演的角色不断成长并且越来越重要。事实上,评论家日前称我们已经进入了Web3.0时代。问题在于,安全性确实没能跟上这种发展步伐。目前,我们在加固Web1.0应用的安全方面仍有很多的问题,以致于还没有开始加固Web2.0的安全,更别提Web3.0了。
  在继续之前,我有一些话不吐不快。Web应用是很重要而且正在不断发展的一类软件,但它们并不是唯一的软件类型!事实上,考虑到遗留应用,嵌入式设备以及世界上的其他代码,我相信Web应用只占到所有软件的一小部分。因此,当世人将所有对软件安全的注意力全部倾注在Web应用上时,我感到担忧。有大量其他类型的重要软件并不依赖于Web。这就是我自称是软件安全人员而不是Web应用安全人员的原因。
  无论如何,Web应用安全和软件安全确实存在许多共同的问题和缺陷(这一点也不奇怪,因为前者是后者的子集)。一个共同的问题是将安全作为一项功能,或者某种“东西”。安全并不是某种“东西”,它是系统的一项属性。这意味着再多的身份验证技术、神奇的加密技术或者面向服务架构(SOA)Web服务安全API都无法自动地解决安全问题。事实上,与任何其他方面相比,安全与测试及保障都有着更多的关联。
  打开这《Web安全测试》,哦,我们确实需要一种有效的Web应用安全测试方法么?要知道,许多由安全专家为Web应用测试所设计的“测试”都不具有任何测试严密性。原来测试本身就是一门学科,背后有整套的学问。Paco和Ben带给我们的是对测试线索的深入了解。这真是一对珍贵的组合。
  所有称职的测试人员都理解,关于测试的一项关键要素是:测试结果必须能够用于指导行动。差的测试结果会给出像“bigjavaglob.java文件中存在XSS问题”这样含糊的报告。开发人员怎么会知道如何去修复这个问题呢?这里缺少的是适当地说明XSS是什么(当然,它指的是跨站式脚本),指出在成千上万行代码的文件中问题可能出现的位置,以及如何做才能修复它。《Web安全测试》中包含了大量技术信息,足以供像样的测试人员向真正起作用的开发人员报告可用于指导行动的结果。
  但愿《Web安全测试》中的内容不仅能够被安全人员采用,而且也能够被Web应用的测试人员所采用。事实上,质量保证(QA)人员会高兴地看到,《Web安全测试》正好面向测试人员,书中采用了回归测试、覆盖率以及单元测试等术语。以我的经验来看,就测试而言,测试人员做得要比安全人员好得多。使用得当的话,《Web安全测试》可以将安全人员改造成更优秀的测试人员,将测试人员改造成更优秀的安全人员。
  《Web安全测试》的另一重要特点在于,它明确地将重点放在工具和自动化上。与现代安全人员一样,现代测试人员也使用工具。《Web安全测试》包含了大量基于实际工具的真实例子,其中许多工具都可以从网上免费下载。事实上,《Web安全测试》适用于指导正确的工具使用方法,因为书中描述的许多开源工具都没有自带内置的手册或入门指导。我喜欢实践性的资料,而这《Web安全测试》在实际动手方面做到了极致。
  一种过度乐观的软件开发方法必然会创造出令人吃惊的东西,但是从安全角度而言,它同样也会使我们陷入困境。简单地说,我们会忽视去考虑自己的软件在遭到故意和恶意攻击时会发生什么。攻击者就在大门口,每天都在探查我们的Web应用。


其他推荐