本书以Web漏洞基本原理为切入点,将相似的漏洞归类,由浅入深、逐一陈述。本书共11章,分别为Web安全概述、计算机网络基础知识、测试工具与靶场环境搭建、传统后端漏洞(上、下)、前端漏洞(上、下)、新后端漏洞(上、下)、逻辑漏洞(上、下),每章以不同的漏洞类型为小节内容,尽可能涵盖已发现和公开的所有重大Web安全漏洞类型。本书配有53个漏洞实战案例,并附赠所有漏洞实战案例的完整源码,方便读者学习,获取方式见封底二维码。
本书可作为代码审计、渗透测试、应急响应、基线核查、红蓝对抗、防御加固等相关工作从业人员的参考资料,亦可作为企业安全管理者开展企业安全建设的技术指南,还可作为大中专院校及Web安全培训班的Web安全培训教材。
这是一本从Web漏洞深度解析到攻防实战的Web安全技术书籍,是从事Web安全研究和渗透测试工作者的技术指南;作者团队为信息安全领域的专家,本书集合了各位专家作者多年的实战经验,是一本难得的安全技术书籍。
Web安全发展到今天已经有20多年的历史了,每当接受Web安全相关课题的培训时笔者就会发现,Web安全虽已发展多年,但仍然鲜有一部著作能将其所有内容系统性地介绍清楚。这也是作者编写本书的一个初衷。
2019年,由长亭科技杨坤博士提议,应机械工业出版社邀请编撰本书,到今天已历时三年。写书是一个很枯燥的过程,本着对读者负责任的态度,很多内容需要经过不断论证。中间也曾遇到过阻力,甚至想过放弃,但还是坚持了下来。借此向曾经对本书贡献内容的小伙伴们致敬。
在编写本书时,笔者经历了两种不同的工作状态:进一步万丈深渊,退一步云淡风轻。每当提高对本书创作要求时,就会面临巨大的完成压力。而假如对知识点不求甚解,只是为了应付篇幅草草了事,则很快就可以完结。笔者最终还是坚定地选择了前者,因此,书中代码基本上没有单次引用超过一页纸的情况,力求每字每句都是有知识点的、有意义的。
本书的创作意图是总结Web安全20年来经典的漏洞,其中主要是漏洞原理,当然也不乏攻防技巧、有趣的小故事等。整体思想是:将相似的漏洞归类,每个漏洞介绍原理、利用方法、攻防对抗衍生的技术,最后配有实战练习。本书附赠所有漏洞实战练习的完整源码,方便读者结合本书进行学习,获取方式见封底二维码。
当然,想要完成本书,单凭笔者一己之力肯定是不行的,多亏有很多小伙伴不吝笔墨,才使得本书能够完成。解析漏洞的章节及大多数实战环境来自于国内知名Web安全研究员phith0n(龚潇),反序列化漏洞、表达式注入漏洞、JNDI注入漏洞章节出自于国内知名Web安全研究员Voidfyoo(王子航);XSS漏洞章节由国内知名XSS漏洞研究员Camaro(陈思涛)执笔;SSTI模板注入和实战分析内容来自白菜(刘聪)和zzkk(朱锟)。更有mi_xia(夏明成)、Noxxx(陈军先、方军力)合力把关审阅,在此对他们表示由衷的感谢!更要感谢阿里云先知社区负责人chybeta(宸毅)和机械工业出版社的编辑老师们,如果没有他们,本书难以顺利出版。最后,感谢我的父母及妻子晓璐对我这三年创作的支持。
Web安全是一门技术类学科,安全知识的获取离不开动手练习。纸上得来终觉浅,绝知此事要躬行。从实验中学是本书十分重要的一个思想。因此,本书的各个章节基本都配备了一些供读者动手练习的小实验,大多数的实验读者只需要拥有一台计算机,安装好浏览器、下载BurpSuite工具和配置Docker环境即可完成。本书大部分的实验环境来自于Vulhub平台(https://vulhub.org/),非常感谢Vulhub平台为我们节省了大量搭建实验环境的时间。
1998年SQL注入漏洞问世,拉开了Web安全战争的序幕,此间20余载多少信息安全从业者前赴后继,为探索Web安全真谛而斗争。那么Web安全的真谛是什么呢?直到今天,仍未有定论。但是,从这20年发展的规律中可窥知一二,笔者于2009年入行,经历了Web安全最为动荡的时期,此后又有幸经历了Web安全的后十年,而前十年的精彩故事主要是由前辈口口相传,又通过网络材料加以佐证。希望仅以本书记录我所从事和热衷的事业,也献给同样奋战在安全攻防一线始终未曾离去的你们。
王 放
王放, do9gy,从事Web安全工作十年,致力于Web攻防与Web漏洞研究。曾任腾讯科技安全平台部高级安全工程师、长亭科技华南区安全服务负责人、Web安全课程培训高级讲师。目前任绿盟科技对抗自动化攻防顾问。曾于2016年WooYun沙龙深圳站分享议题《漏洞与锁》。荣获2021年腾讯WAF挑战赛冠军和2022年腾讯主机安全挑战赛(猎刃计划)冠军。
出版说明
前言
第1章 Web安全概述1
1.1 什么是Web安全1
1.2 Web安全发展规律1
1.3 Web安全与Web漏洞2
第2章 计算机网络基础知识3
2.1 计算机网络概述3
2.2 TCP协议的交互5
2.2.1 TCP建立连接的三次握手5
2.2.2 TCP断开连接的四次挥手6
2.2.3 TCP协议的基本结构6
2.3 Wireshark工具的使用7
2.3.1 Wireshark监听网卡7
2.3.2 Wireshark数据包分析8
2.3.3 实战1:使用Wireshark分析TCP三次握手9
2.3.4 实战2:使用Wireshark分析TCP四次挥手9
2.4 HTTP协议的结构11
2.4.1 HTTP请求的结构11
2.4.2 HTTP响应的结构13
2.5 HTTP协议交互14
2.6 HTTP协议的不同表现形式16
2.6.1 GET方法16
2.6.2 POST方法17
2.6.3 multipart/form-data17
2.6.4 chunked18
2.7 HTTPS协议19
2.7.1 HTTPS协议简介19
2.7.2 心脏滴血漏洞(CVE-2014-0160)20
2.8 信息、进制与编码21
2.8.1 ASCII编码21
2.8.2 其他字符编码22
2.8.3 进制概述22
2.8.4 进制转换23
2.8.5 URL编码25
2.8.6 Base64编码26
第3章 测试工具与靶场环境搭建28
3.1 黑盒测试与白盒测试28
3.2 PoC、Payload与Exp28
3.3 Netcat工具的使用29
3.3.1 实战3:使用NC发送简单的HTTP请求29
3.3.2 实战4:使用NC发送复杂的HTTP请求30
3.4 BurpSuite工具的使用31
3.4.1 实战5:使用BurpSuite拦截并修改HTTP请求31
3.4.2 实战6:使用BurpSuite重放HTTP请求33
3.4.3 实战7:使用BurpSuite捕获HTTPS请求34
3.5 实战靶场环境搭建35
3.5.1 LAMP网站架构简介36
3.5.2 Docker简介36
3.5.3 实战8:使用Docker搭建LAMP环境37
3.5.4 实战9:使用Docker Compose搭建实验环境38
第4章 传统后端漏洞(上)40
4.1 SQL注入漏洞(上)40
4.1.1 SQL注入漏洞概述40
4.1.2 SQL与数据库40
4.1.3 SQL注入检测方法与攻击方法45
4.1.4 SQL注入点与HTTP协议56
4.1.5 SQL注入与SQL动词57
4.1.6 参数点位置对SQL注入的影响58
4.1.7 闭合符对SQL注入的影响59
4.1.8 不同SQL引擎下的SQL注入60
4.1.9 实战10:ThinkPHP5 SQL注入漏洞63
4.2 SQL注入漏洞(下)65
4.2.1 SQL注入其他攻击思路65
4.2.2 万能密码70
4.2.3 SQL注入漏洞的对抗71
4.2.4 SQL注入与回显73
4.2.5 SQLMAP74
4.2.6 SQL注入漏洞防御78
4.2.7 实战11:Django GIS SQL注入漏洞(CVE-2020-9402)78
4.3 远程命令执行漏洞81
4.3.1 远程命令执行漏洞概述81
4.3.2 反弹Shell82
4.3.3 命令拼接符83
4.3.4 远程命令执行漏洞检测84
4.3.5 远程命令执行漏洞防御85
4.3.6 实战12:Shellshock 漏洞(CVE-2014-6271)85
4.4 远程代码执行漏洞86
4.4.1 远程代码执行漏洞概述86
4.4.2 PHP远程代码执行86
4.4.3 白盒审计远程代码漏洞挖掘87
4.4.4 文件包含89
4.4.5 PHP文件包含漏洞进阶91
4.4.6 其他语言的远程代码执行漏洞92
4.4.7 远程代码执行漏洞防御94
4.4.8 实战13:Mongo-Express 远程代码执行漏洞(CVE-2019-10758)94
4.5 PUT漏洞95
4.5.1 IIS写权限漏洞95
4.5.2 Tomcat PUT漏洞97
4.5.3 PUT漏洞防御98
4.5.4 实战14:IIS写权限漏洞获取WebShell98
4.5.5 实战15:Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)102
4.6 任意文件读取漏洞105
4.6.1 任意文件读取漏洞概述105
4.6.2 目录穿越攻击106
4.6.3 任意文件读取漏洞进阶106
4.6.4 任意文件读取漏洞防御107
4.6.5 实战16:Apache Flink jobmanager/logs任意文件读取漏洞(CVE-2020-1751)107
4.6.6 实战17:Gitlab任意文件读取漏洞(CVE-2016-9086)107
4.7 任意文件上传漏洞110
4.7.1 任意文件上传漏洞概述110
4.7.2 常见的绕过场景110
4.7.3 任意文件上传漏洞防御112
4.7.4 实战18:WebLogic任意文件上传漏洞(CVE-2018-2894)113
4.7.5 实战19:Apache Flink文件上传漏洞(CVE-2020-17518)116
第5章 传统后端漏洞(下)119
5.1 解析漏洞119
5.1.1 解析漏洞概述119
5.1.2 IIS解析漏洞119
5.1.3 Nginx解析漏洞122
5.1.4 Apache解析漏洞127
5.1.5 解析漏洞的防御129
5.1.6 实战20:Nginx 解析漏洞129
5.1.7 实战21:Apache HTTPD 换行解析漏洞(CVE-2017-15715)132
5.2 目录浏览漏洞134
5.2.1 目录浏览漏洞概述134
5.2.2 IIS目录浏览漏洞135
5.2.3 Nginx目录浏览漏洞136
5.2.4 Apache目录浏览漏洞136
5.2.5 目录浏览漏洞防御137
5.2.6 实战22:Nginx目录浏览漏洞138
5.2.7 实战23:Apache目录浏览漏洞139
5.3 SSI注入漏洞139
5.3.1 SSI漏洞概述139
5.3.2 SSI语法139
5.3.3 SSI漏洞点与测试140
5.3.4 SSI漏洞防御140
5.3.5 实战24:Apache SSI 远程命令执行漏洞140
5.4