本书从道德黑客的角度出发,结合赏金漏洞实例,向读者介绍应如何处理应用程序中的漏洞,如何寻找赏金漏洞和提交方案报告。主要内容包括什么是漏洞和漏洞悬赏,如何在漏洞挖掘平台上挖掘开放式重定向漏洞、HTTP参数污染漏洞、跨站请求伪造漏洞、HTML注入和内容欺骗漏洞、回车换行注入漏洞、跨站脚本漏洞、模板注入漏洞、SQL注入漏洞、服务端请求伪造漏洞、内存漏洞、子域接管漏洞、不安全的直接对象引用漏洞、OAuth漏洞、应用程序逻辑和配置漏洞等,并提交给平台,进而对漏洞进行修复,以及如何获得漏洞奖金、漏洞报告如何编写等。
这本书教你如何在漏洞赏金平台搜索漏洞、提交报告并获得赏金。不管你是网页开发人员、网页设计师、全职妈妈、10岁的孩子还是75岁的退休人员,都适合阅读本书,但是拥有一些编程经验、熟悉网络技术会更有助于理解书中内容。
这本书将向你介绍道德黑客的世界,如何发现安全漏洞,以及如何向应用程序所有者报告漏洞。当我刚开始学习黑客技术时,我不仅想知道黑客发现了什么漏洞,而且想知道他们是如何发现这些漏洞的。
在我搜索信息的过程中,总是会出现同样的问题:
黑客在应用程序中发现了哪些漏洞?
黑客是如何得知应用程序中存在这些漏洞的?
黑客如何渗透一个网站?
黑客攻击是什么样子的?它是完全自动化的,还是手动完成的?
我如何开始进行渗透和发现漏洞?
我终登录了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应用程序、
译者序
序言
前言
致谢
作者简介
技术审校者简介
第1章 漏洞悬赏入门1
1.1 漏洞和漏洞悬赏1
1.2 客户端和服务器端2
1.3 当你访问一个网址时发生了什么3
1.4 HTTP请求7
1.5 总结10
第2章 开放式重定向11
2.1 开放式重定向如何工作12
2.2 Shopify主题设置的开放式重定向漏洞14
2.3 Shopify 登录的开放式重定向漏洞14
2.4 HackerOne中间网页重定向漏洞16
2.5 总结18
第3章 HTTP参数污染19
3.1 服务器端 HPP19
3.2 客户端HPP22
3.3 HackerOne分享按钮23
3.4 Twitter取消订阅通知24
3.5 Twitter弹出窗口26
3.6 总结28
第4章 跨站请求伪造29
4.1 身份认证30
4.2 通过GET请求发起CSRF攻击32
4.3 通过POST请求发起CSRF攻击33
4.4 抵御CSRF攻击35
4.5 Shopify Twitter 断连接攻击37
4.6 改变用户的Instacart地区攻击38
4.7 Badoo全账号接管39
4.8 总结42
第5章 HTML注入和内容欺骗43
5.1 通过字符编码进行Coinbase评论注入攻击44
5.2 HackerOne非预期HTML包含漏洞46
5.3 HackerOne非预期HTML包含补丁绕过漏洞48
5.4 Within Security内容欺骗漏洞49
5.5 总结51
第6章 回车换行注入52
6.1 HTTP请求夹带攻击53
6.2 v.shopify.com响应分割攻击53
6.3 Twitter HTTP响应分割攻击55
6.4 总结57
第7章 跨站脚本58
7.1 XSS的类型62
7.2 Shopify Wholesale XSS漏洞65
7.3 Shopify货币格式XSS漏洞67
7.4 雅虎邮件存储型XSS漏洞68
7.5 Google图像搜索XSS漏洞70
7.6 Google标签管理器存储型XSS漏洞71
7.7 联合航空网站XSS漏洞73
7.8 总结76
第8章 模板注入78
8.1 服务器端模板注入78
8.2 客户端模板注入79
8.3 Uber AngularJS模板注入80
8.4 Uber Flask Jinja2模板注入81
8.5 Rails动态呈现漏洞84
8.6 Unikrn Smarty模板注入86
8.7 总结89
第9章 SQL注入90
9.1 SQL数据库90
9.2 防御SQLi92
9.3 雅虎体育盲SQLi93
9.4 Uber盲SQLi96
9.5 Drupal SQLi100
9.6 总结103
第10章 服务器端请求伪造105
10.1 展示SSRF的影响105
10.2 调用 GET 与 POST 请求106
10.3 执行盲测 SSRF107
10.4 使用 SSRF 响应攻击用户108
10.5 ESEA SSRF 和 AWS 元数据请求108
10.6 Google内部 DNS SSRF111
10.7 使用Webhook进行内网端口扫描115
10.8 总结117
第11章 XML外部实体118
11.1 XML118
11.1.1 文档类型定义119
11.1.2 XML 实体121
11.2 XXE攻击如何发挥作用122
11.3 读取Google的访问权限123
11.4 Facebook XXE Word漏洞124
11.5 Wikiloc XXE126
11.6 总结129
第12章 远程代码执行130
12.1 执行Shell命令130
12.2 执行函数132
12.3 远程调用的升级策略133
12.4 Polyvore ImageMagick漏洞134
12.5 Algolia RCE 漏洞137
12.6 SSH RCE 漏洞139
12.7 总结141
第13章 内存漏洞142
13.1 缓冲区溢出143
13.2 越界读取146
13.3 PHP ftp_genlist()整数溢出漏洞147
13.4 Python Hotshot模块148
13.5 Libcurl越界读取149
13.6 总结150
第14章 子域接管151
14.1 理解域名151
14.2 子域接管工作原理152
14.3 Ubiquiti的子域接管153
14.4 Scan.me指向Zendesk154
14.5 Shopify Windsor子域接管155
14.6 Snapchat Fastly接管156
14.7 Legal Robot接管157
14.8 Uber SendGrid Mail接管158
14.9 总结160
第15章 竞争条件161
15.1 多次接受同一个HackerOne邀请162
15.2 Keybase超过邀请数上限164
15.3 HackerOne付款竞争性条件165
15.4 Shopify合作伙伴竞争条件166
15.5 总结168
第16章 不安全的直接对象引用169
16.1 查找简单的IDOR169
16.2 查找复杂的IDOR170
16.3 Binary.com 权限升级171
16.4 Moneybird 应用程序创建172
16.5 Twitter Mopub API Token 被盗174
16.6 ACME 客户信息泄露175
16.7 总结177
第17章 OAuth漏洞178
17.1 OAuth工作流179
17.2 窃取Slack OAuth令牌182
17.3 使用默认密码通过身份验证183
17.4 窃取微软登录令牌184
17.5 刷Facebook官方访问令牌186
17.6 总结187
第18章 应用程序逻辑和配置漏洞189
18.1 绕过Shopify管理员特权190
18.2 绕过Twitter账户保护192
18.3 HackerOne信号处理193
18.4 HackerOne不正确的S3 Bucket
权限194
18.5 绕过GitLab双重身份验证196
18.6 雅虎PHP的信息披露197
18.7 HackerOne Hacktivity投票199
18.8 访问PornHub的Memcache安装201
18.9 总结203<