描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121314773丛书名: 安全技术大系
《白帽子讲Web扫描》的关键词:Web 2.0爬虫,扫描设计,漏洞审计,云扫描,企业扫描,扫描反制。
第1章 扫描器基础 1
1.1 什么是Web扫描器 1
1.2 扫描器的重要性 2
1.3 扫描器的类型 3
1.4 常见的扫描器(扫描器的示例) 4
1.5 扫描器评测 8
1.6 漏洞测试平台 9
1.7 扫描环境部署 9
1.7.1 测试环境 9
1.7.2 开发环境 12
第2章 Web爬虫基础 19
2.1 什么是Web爬虫 19
2.2 浏览器手工爬取过程 19
2.3 URL 21
2.4 超级链接 22
2.5 HTTP协议(Request/Response) 23
2.5.1 HTTP请求 23
2.5.2 HTTP响应 24
2.6 HTTP认证 25
2.6.1 Basic认证(基本式) 26
2.6.2 Digest认证(摘要式) 27
2.7 HEAD方法 29
2.8 Cookie机制 29
2.9 DNS本地缓存 31
2.9.1 浏览器缓存 31
2.9.2 系统缓存 32
2.10 页面解析 33
2.11 爬虫策略 34
2.11.1 广度优先策略 34
2.11.2 深度优先策略 34
2.11.3 优先策略(聚焦爬虫策略) 35
2.12 页面跳转 35
2.12.1 客户端跳转 36
2.12.2 服务端跳转 37
2.13 识别404错误页面 38
2.14 URL重复/URL相似/URL包含 39
2.14.1 URL重复 39
2.14.2 URL相似 39
2.14.3 URL包含 39
2.15 区分URL的意义 40
2.16 URL去重 40
2.16.1 布隆过滤器(Bloom Filter) 41
2.16.2 哈希表去重 41
2.17 页面相似算法 42
2.17.1 编辑距离(Levenshtein Distance) 42
2.17.2 Simhash 43
2.18 断连重试 43
2.19 动态链接与静态链接 43
第3章 Web爬虫进阶 44
3.1 Web爬虫的工作原理 44
3.2 实现URL封装 45
3.3 实现HTTP请求和响应 47
3.4 实现页面解析 58
3.4.1 HTML解析库 58
3.4.2 URL提取 59
3.4.3 自动填表 66
3.5 URL去重去似 67
3.5.1 URL去重 67
3.5.2 URL去似去含 73
3.6 实现404页面识别 75
3.7 实现断连重试 77
3.8 实现Web爬虫 78
3.9 实现Web 2.0爬虫 83
第4章 应用指纹识别 94
4.1 应用指纹种类及识别 94
4.2 应用指纹识别的价值 95
4.3 应用指纹识别技术 96
第5章 安全漏洞审计 102
5.1 安全漏洞审计三部曲 102
5.2 通用型漏洞审计 103
5.2.1 SQL注入漏洞 103
5.2.2 XSS跨站漏洞 111
5.2.3 命令执行注入 120
5.2.4 文件包含漏洞 129
5.2.5 敏感文件泄露 136
5.3 Nday/0day漏洞审计 146
5.3.1 Discuz!7.2 faq.php SQL注入漏洞 147
5.3.2 Dedecms get webshell漏洞 150
5.3.3 Heartbleed漏洞(CVE-2014-0160) 153
5.3.4 PHP multipart/form-data远程DDoS(CVE-2015-4024) 157
第6章 扫描器进阶 160
6.1 扫描流程 160
6.2 软件设计 163
6.3 功能模块 164
6.4 软件架构 165
6.5 数据结构 166
6.6 功能实现 167
6.6.1 IP/端口扫描和检测(端口模块) 167
6.6.2 端口破解模块 170
6.6.3 子域名信息枚举 172
6.6.4 文件、目录暴力枚举探测(不可视URL爬取) 175
6.6.5 扫描引擎 176
6.7 扫描报告 180
6.8 扫描测试 182
第7章 云扫描 185
7.1 什么是云扫描 185
7.2 云扫描架构 185
7.3 云扫描实践 187
7.3.1 Celery框架 188
7.3.2 扫描器Worker部署 189
7.3.3 云端调度 193
7.4 云扫描服务 199
第8章 企业安全扫描实践 202
8.1 企业为什么需要扫描 202
8.2 企业扫描的应用场景 202
8.2.1 基于网络流量的扫描 202
8.2.2 基于访问日志的扫描 208
8.2.3 扫描的应用场景比较 217
第9章 关于防御 218
9.1 爬虫反制 218
9.1.1 基于IP的反爬虫 218
9.1.2 基于爬行的反爬虫 221
9.2 审计反制 223
9.2.1 云WAF 223
9.2.2 云WAF的价值 223
9.3 防御策略 225
附录A 227
附录B 229
推荐序
非常荣幸受刘漩的邀请为本书写推荐序。
刘漩是安全宝位安全工程师,也是早期WAF规则的主要维护者,这六年多来,他一直在Web安全的前线与黑客做斗争,从防御到漏洞挖掘,都有着丰富的经验,也正是因为如此,他眼中的扫描技术有着更为系统化的视角。
纵观网络安全的发展历史,扫描器是早出现的工具,从著名的开源实现Nmap,到国人为之骄傲的流光FluXay,都是端口扫描的利器。而Web安全领域里的扫描器虽然原理类似,但实现却更为复杂,需要考虑扫描频率、扫描深度、爬虫对于HTML的解释能力,还要不断地积累POC。
记得我早使用过的扫描器是IBM的AppScan,其爬取能力很强,但扫描速度却奇慢无比,基本上对URL要尝试所有扫描特征,后还需要从大量的漏洞中去伪存真。
扫描器也是百度安全团队早开发的工具之一,百度公司有数百个产品线,每天的发布量数不胜数,如果没有一个高效的漏洞扫描,安全几乎无从谈起。无论是新上线的业务,还是当出现0day时的大规模临检,扫描已经成为例行化工作。扫描结合被动的URL发现,目前已经成为的漏洞来源,同时扫描与工单系统联动,完成派单、巡检、复检也成为现代安全管理自动化流程的一部分。
扫描已经成为所有互联网业务中必不可少的安全工作。这本书将系统化地为读者讲解扫描原理与实现方法,我相信无论你是甲方安全工程师,还是乙方安全服务人员,都将受益匪浅。
百度云安全技术总监,百度云加速总负责人
冯景辉
序
我的安全路
本人次接触安全是在大学期间,有一次无意中读到室友买的一本《黑客防线》杂志,立刻就被里面的黑客技术深深吸引,从那以后,我就开始疯狂学习安全知识,而那时候大学还没有设立类似的课程,只能靠自己独立钻研,一方面我借助安全杂志学习入侵实践知识,另一方面则“泡”在图书馆里翻阅各类与安全相关的书籍补充理论知识,成长非常快。
但在大学毕业的时候,我却并没有选择进入自己感兴趣的安全类公司,反而进入了一家大型跨国公司,在里面做了一年的软件测试工作,感觉这段经历对我的改变就是,养成了喜欢用自动化方式去解决一些重复工作的习惯。
后来我还是希望遵从内心,决定找一份与安全相关的工作。在辞职前,我成功地入侵了公司的内部网络,拿到公司域控的管理权限,并在服务器的桌面上留下了善意的修复建议,目的只是为了证明自己的安全能力。
有着大公司的背景及对安全工作的执着追求,我顺利地加入瑞星公司,在这里开始进一步学习安全的知识。得益于瑞星宽松的工作环境和浓厚的安全氛围,在完成本职工作之外,我开始进行更多的学习和研究,同时也接触到很多新的安全产品。也是在那段时间,我写了自己款移动端的手机防火墙软件,不过此时我对安全的理解更多的是攻防学习和漏洞研究,所掌握的知识并不成体系。
再后来我加入安全宝创业。安全宝算是我有感情的一家公司,它让我从零开始踏上一个公司的安全建设之路,对安全工作进行系统的规划,以闭环的方式来推进和完善每个工作流程,然后通过攻防对抗实践进行迭代式的改进。其实对于企业来讲,攻防对抗仍然可以作为企业安全建设中有价值的应用实践之一。
之后我加入百度。虽然还是以乙方的视角做着安全服务工作,但甲方的工作氛围和技术培训也让我对攻防的理解更加全局化,更加工程化,也更加体系化。此时,我对扫描的看法也发生了变化:扫描作为攻击的一种方式,它应该更贴近真实的攻击;而真实的攻击其实是一种全视角、持续性、动态化的入侵行为,它会对目标进行全视角的信息和资产收集,然后通过持续性的漏洞测试,以及动态的情报能力发现其中的脆弱点。因此,如果我们想重塑扫描的价值,那么就应该以攻击者的视角,同时将更多的安全能力融入扫描中,并以攻击的全流程来对其进行改进和扩充,从而终实现扫描的情报化、插件化,以及智能化。
我的安全观
我眼中的Web安全
还记得自己刚刚加入百度,小哥(程岩)在面试我的时候,问了一个问题,我至今依然记忆深刻:每个Web安全人员都有自己的安全体系,你眼中的Web安全是什么样子的?
当时我也是次被问到这么宏观的问题,感觉就是问题很大,一时又不知从何说起,现在我还记得自己当时的回答:我眼中的Web安全包含着我做的所有内容,比如:漏洞挖掘、漏洞分析、漏洞攻击和规则防御等。它们都是围绕漏洞的生命周期进行展开的,可以按照时间顺序将它们划分为4个阶段,如下。
? 漏洞的感知:我们需要从各个方面和渠道去关注Web漏洞,获取的漏洞资源和信息,如,漏洞监控、漏洞预警或漏洞挖掘等。
? 漏洞的分析:获取漏洞资源后,我们就需要对漏洞进行分析和研究,弄清楚漏洞的原理及成因,而这主要体现在两方面的价值,一方面是可以构造出漏洞的POC,并补充到扫描器中,对漏洞实现自动化检测和验证;另一方面则是深入理解漏洞原理后,能够写出对应的漏洞匹配特征,制作漏洞签名,并给WAF升级进行防护。
? 漏洞的响应:这里主要分为两部分,一部分是对内的响应,也就是自身的漏洞响应,对漏洞进行快速排查和修复;另一部分则是对外的响应,也就是对互联网的全网客户进行响应,评估漏洞对其影响,以及协助修复,并对全网的安全态势进行监控。
? 漏洞的沉淀:按照漏洞的描述、原理、场景,以及修复策略等相关信息,对每个漏洞进行编号和积累,形成有价值的漏洞知识库。
现在回想起来,对于当时的回答,我其实并不满意,只能算是勉强应付下来了。但事后自己却想得更多了,这个问题属于主观题,或许它没有标准的答案,也没有所谓的对与错,但它却可以让每个人按照自己的角度、自己的工作、自己的理解,重新去思考和审视自己的知识体系。从那以后,这个问题也就一直伴随着我,它也是我作为面试官必问的题目之一。因为我相信在不同的阶段,每个人对它的理解肯定是不一样的。
三个基础的安全认知
1.木桶原理
盛水的木桶是由多块木板箍成的,盛水量也是由这些木板共同决定的。若其中一块木板很短,则此木桶的盛水量就被限制,该短板就成了这个木桶盛水量的限制因素,若要此木桶盛水量增加,只有换掉短板或将其加长才行,这就是木桶原理。它表达的意思就是,一个水桶无论有多高,它盛水的高度取决于其中短的那块木板。在信息安全领域中,目标系统就好比盛水的木桶,它的安全性完全取决于系统中薄弱的那个环节。
举个例子,我们在给企业进行渗透测试服务时,发现弱口令的安全问题仍然是企业的一个重灾区,这些企业虽然在安全方面做了很多工作,而且也部署了一些安全设备,但往往却因为一个简单的弱口令导致整个系统被入侵和攻破,所以我们需要审视系统中的薄弱点,并进行加强。
2.攻防不对称,安全是相对的
攻防不对称其实很好理解,防御方需要保护的是一个整体,而攻击方却可以通过审视这个整体,选择其中一个薄弱的环节进行持续的攻击。在这个对抗的过程中,其实很多内容都是不对称的,如下。
? 技术不对称:攻击方可以针对目标使用的某个软件或组件进行深入的漏洞挖掘,然后通过新的0day漏洞完成攻击和入侵,而防御方却无法对系统每个部分的漏洞都有所了解。
? 成本不对称:攻击方可以选择成本低廉、破坏力强的DDoS拒绝服务攻击,而防御方却需要消耗巨大的成本进行整体的防御。
? 信息不对称:攻击方可以选择通过人员、社交、无线等与企业有依赖关系的入口制订攻击路径,而防御方却无法覆盖所有的关联入口。
因此不论是安全产品,还是安全设计,它们的目标从来都不是安全的,而只是追求相对安全。但这个认知绝不是用来找借口或是逃避安全责任的,而是用来提醒我们:安全是一个动态的过程,当前的安全工作仍然还有提升的空间;攻防其实只是一种成本的博弈对抗,只需要在允许的成本范围内进行适度、有效的防御即可;在攻防不对称的面前,我们可以选择用攻击驱动的方式进行防御。
3.纵深防御
我们知道,当今所有的信息安全技术其实都是以“用户是好人”为信任前提,只有当确认他干了坏事之后,才会把他定义为“坏人”,然后开始对其进行响应或防御。只有当某个用户已被证明产生了危害后,才将其定位为黑客或攻击者,开始对他进行应急处置,这种防御方式显然存在天然的滞后性,也势必会导致安全人员处于被动、挨打的局面。
为了能够改变这种被动、滞后的劣势,就需要拉伸防御的纵深。其实一个完整的攻击并不是由单点完成的,它通常会由一系列的环节关联组成,属于一个持续、连贯的过程。因此,我们可以在攻击过程中的每个必要环节点设置防御,从而做到提前感知和防御,利用这种层层设防、联动防御的方式,就可以化被动为主动,在攻击产生危害之前对其进行应急响应和处置。
安全其实是一个动态、整体的概念,正如道哥所说,互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了;而研究安全的人归根结底可以分为攻与防两个大分支,不过这里所说的攻防不是单纯的攻击入侵与技术防御,它们会结合技术、业务、流程、人员、制度和管理,形成一个广义的攻防概念,并一起构成了安全这个整体。因此我们看待安全的时候需要从攻与防两个不同的角度来整体审视和博弈均衡;同时攻击和防御也会在不断碰撞和对抗的过程中得到发展和变化,攻击通常会选择系统相对薄弱的环节来实施,防御则需要从各个角度及不同维度进行整体防御,补齐系统的各个短板,但攻防它又是不对称的,因此我们需要利用纵深防御的理念,将完整的攻击链条进行拆分和细化,在每个环节进行深度分析和防御,从而建立起立体化的安全防御体系。
前言
随着互联网的高速发展,Web应用在其中所扮演的地位也越来越重要,因为很多业务都选择使用Web的形式来提供服务,但随之而来的Web安全问题也日渐凸显出来,企业往往会因此遭受巨大的损失,此时很多企业都会在Web应用上线前或运行中对其进行相应的安全测试来保证安全性,减少由于安全问题造成的损失。
通常而言,Web应用的安全测试技术主要有:黑盒测试和白盒测试,还有一种灰盒测试,它是介于黑盒和白盒之间的。这里我们主要说一下黑盒测试,它又称为动态调试,这种方法主要是测试应用的
评论
还没有评论。