前言
这本书将向你介绍道德黑客的世界,如何发现安全漏洞,以及如何向应用程序所有者报告漏洞。当我刚开始学习黑客技术时,我不仅想知道黑客发现了什么漏洞,而且想知道他们是如何发现这些漏洞的。
在我搜索信息的过程中,总是会出现同样的问题:
●黑客在应用程序中发现了哪些漏洞?
●黑客是如何得知应用程序中存在这些漏洞的?
●黑客如何渗透一个网站?
●黑客攻击是什么样子的?它是完全自动化的,还是手动完成的?
●我如何开始进行渗透和发现漏洞?
我最终登录了HackerOne,这是一个漏洞奖励平台,旨在将道德黑客与寻找黑客来测试其应用程序的公司联系起来。HackerOne的功能允许道德黑客和公司披露已经发现和修复的漏洞。
在阅读那些公开的HackerOne报告时,我努力理解人们已经发现了哪些漏洞,以及这些漏洞会如何被滥用。我经常需要把同一篇报告重读两三遍才能理解它。我意识到,我和其他初学者可以从对现实世界漏洞的纯语言解释中获益。
这本书是一个重要的参考,它将帮助你理解不同类型的Web漏洞。你将学到如何发现漏洞,如何上报它们,如何从中获得报酬,以及如何编写防御代码。但这本书中不仅涵盖成功的范例,也包含错误案例和人们应该吸取的教训,其中很多问题是我自己遇到过的。
当你通读完本书,你就已经迈出了让网络变得更安全的第一步,并且你应该能够从中赚到一些钱。
本书的读者对象
这本书是为学习漏洞挖掘技术的初学者写的,不管你是网页开发人员、网页设计师、全职妈妈、10岁的孩子还是75岁的退休人员,都可以阅读本书。
拥有一些编程经验并且熟悉网络技术有助于理解本书内容,但这并不是成为道德黑客的先决条件。例如,你不必是一个Web开发人员或黑客,但如果你对基本超文本标记语言(HTML)如何架构网页,层叠样式表(CSS)如何定义网页外观,以及网站的JavaScript动态有所了解的话,将有助于你发现漏洞和识别其带来的影响。
了解如何编程对于查找涉及应用程序逻辑的漏洞和思考开发人员可能会犯什么样的错误很有帮助。如果你能站在程序员的角度猜猜他们是如何实现一些程序的,或读懂他们的代码,那么你成功发现漏洞的概率将会更高。
如果你想学习编程,可参考No Starch Press出版的大量书籍。你也可以在Udacity和Coursera上查看免费课程。附录B中还列出了其他资源。
如何阅读本书
每个描述漏洞类型的章节都有以下结构:
1)漏洞类型的描述
2)漏洞类型的示例
3)提供结论的总结
每个漏洞示例都包括以下内容:
●我对发现和证明漏洞的难度的估计
●与发现漏洞的位置相关联的URL
●原始披露报告或报告的链接
●报告漏洞的日期
●漏洞上报者通过上报信息所得到的奖金
●关于漏洞的清晰描述
●可以应用到你自己的漏洞挖掘中的提示
你不必把这本书从头到尾读完。如果你对某一章节感兴趣,先读它。在某些情况下,我会引用前面章节中讨论过的观点,但是在这样做的时候,我会尽量说明我在哪里定义了这个术语,以便你可以参考相关章节。当你进行漏洞搜索时,记得翻阅本书。
本书的主要内容
以下是每章内容的概述。
第1章:解释了什么是漏洞和漏洞奖励,以及客户端和服务器之间的区别,还介绍了互联网是如何工作的,包括HTTP请求、响应和方法,以及HTTP无状态的含义。
第2章:涉及利用给定域的信任将用户重定向到不同域以实施攻击。
第3章:涵盖了攻击者如何操纵HTTP请求,注入额外的参数,使目标网站产生信任,以及导致意外行为。
第4章:涵盖了攻击者如何利用恶意网站使目标浏览器向另一个网站发送HTTP请求,然后,另一个网站就装作这个请求是合法的,并且是由目标用户故意发送的。
第5章:解释了如何将自己设计的HTML元素注入目标网站的网页中。
第6章:演示了攻击者如何向HTTP消息注入编码字符,以改变服务器、代理和浏览器对它们的解释。
第7章:解释了攻击者如何利用没有对用户输入进行消毒的站点来执行他们自己的JavaScript代码。
第8章:解释了当站点没有清理模板中使用的用户输入时,攻击者是如何利用template引擎的。本章包括客户端和服务器端示例。
第9章:描述了数据库支持站点上的漏洞如何让攻击者意外查询或攻击站点的数据库。
第10章:解释了攻击者如何让服务器执行意外的网络请求。
第11章:展示了攻击者如何利用应用程序解析XML输入和处理输入中包含的外部实体。
第12章:涵盖攻击者如何利用服务器或应用程序来运行自己的代码。
第13章:解释了攻击者如何利用应用程序的内存管理来引发意外行为,包括执行攻击者自己注入的命令。
第14章:展示了当攻击者可以代表合法伙伴域控制子域时,子域接管是如何发生的。
第15章:揭示了攻击者如何对基于初始条件的站点进程竞态完成情况加以利用,该初始条件在进程执行时失效。
第16章:涵盖当攻击者可以访问或修改对象(比如他们不应该访问的文件、数据库记录或账户)的引用时出现的漏洞。
第17章:涵盖协议实施中的漏洞,该协议旨在简化和标准化Web应用程序、移动应用程序和桌面应用程序上的安全授权。
第18章:解释攻击者如何利用编码逻辑或应用程序构造错误,使网站执行一些意外的操作,从而导致漏洞。
第19章:根据我的经验和方法给出了在哪里以及如何寻找漏洞。本章并不是一步一步地指导你如何入侵一个网站。
第20章:讨论了如何编写可信的和信息丰富的漏洞报告。
附录A:描述了道德黑客常用的流行工具,包括代理网络流量、子域枚举、截屏等。
附录B:列出了进一步扩展你的道德黑客知识的其他资源,包括在线培训、流行的平台、推荐的博客等。
免责声明
当你读到公开披露的漏洞,看到黑客获得赏金,会很自然地认为当黑客是一个简单和快速致富的方式。
但并不是这样。
黑客可能是有回报的,但是你不太可能知道在这个过程中发生的失败的案例(虽然我在这本书中分享了一些非常尴尬的故事)。因为多数时候你会听到黑客攻击成功了,所以你可能会对自己的黑客生涯产生不切实际的期望。
你可能很快就会成功,但是如果你找不到漏洞,就继续挖掘吧。开发人员总是会编写新的代码,而错误总是会进入生产环境。你尝试的次数越多,这个过程就会变得越容易。
在这一点上,请随时在Twitter上给我发信息(@yaworsk),让我知道进展如何。即使不成功,我也想收到你的反馈。
漏洞挖掘可能是一项孤独的工作。但是一起庆祝成功的感觉也是很棒的,也许你会提前发现那些我将在下一版中介绍的内容。
祝你好运!