开篇词 学习 Web 安全,防止你的网站被入侵
我在安全行业从业 10 年,目前就职于某世界 500 强知名企业,主要从事安全应急、渗透测试等信息安全相关的工作。我曾多次获得“微软全球最具价值安全研究员”,也曾获得国内外各大知名厂商的漏洞致谢,包括 Mcicrosoft、Google、Apple、Adobe、阿里、百度等。
早年,我在《黑客防线》《黑客手册》等知名技术杂志上发表文章,并常年混迹于国内各大 SRC 平台,以及 HackerOne 等国外知名的漏洞奖励平台,擅长领域涉及 Web、Android、Windows、macOS/iOS 等多个安全方向。
拉勾教育在做的事情,让我有幸触碰一种新的内容分享方式,来和你系统化聊一聊 Web 安全。
未知攻,焉知防
高中时,某日在一手机论坛上闲逛,碰巧有两个网站的站长因为矛盾产生了一场骂战。最后其中一位站长把另一站长的网站给黑了,还挂了“黑页”(黑客篡改掉的网站页面),上面写着“Hacked By xxx”的字样。当时对那位站长深感敬仰,感觉真酷。现在回想起来,难免自嘲那会儿太年轻,没见过世面。
这里声明下:非法入侵他人网站属于违法行为,要负法律责任的。
早些年,国家网络安全法律还不健全,很多网站的安全性也非常欠缺;很多网站被黑掉,被黑客们美其名曰“友情检测”;各种黑页满天飞,甚至还有专门的网站来统计和排名。有人为了上榜,就拼命地乱黑网站,挂黑页炫耀,甚至留 QQ 号收徒,然后截图提交到排行榜网站。
写开篇词的时候,我还去搜了下,找到了一张比较有挑衅意味的黑页:
图 1:黑页展示
一些小网站被黑,可能影响不大。但如果是大公司的网站被黑,随便一起都是一次严重的公关事件,甚至股价腰斩。
2017 年 9 月,美国三大信用评级机构之一的 Equifax 公司服务器被黑,数据库被盗,导致近一半的美国人隐私信息遭泄露,包括姓名、生日、电话、住址、信用卡号、驾驶证号等。被曝光当天,Equifax 股价暴跌,花了近 2 年的时间才恢复原先的价格。
图 2:艾可菲公司股票
可能你觉得其他公司和你没有关系。那如果是你的网站被黑,或者是你就职公司的网站被黑,你会做何感想呢?
我们当然不希望发生这种事情。所以学习相关的网络渗透技术,正是为了更好地防御。如果你不知道黑客是如何攻击的,自然也就无从做出相应的防御对策。这就跟警察抓罪犯一样,如果警察不具备犯罪相应的知识,又如何洞察他人的犯罪行为呢?“未知攻,焉知防”,正是此理。
为什么要学 Web 安全?
随着时代的发展,如今无论是国家还是企业,都十分重视网络安全,各种相关的岗位也随之出现。在拉勾网上搜“Web 安全”就能找到相关的岗位。
图 3:招聘信息来源拉勾网
根据 HackerOne 的报告数据(下图),71% 的安全问题都出现在网站上,其次是一些 API 接口,这些接口可能是 Web 的,也有可能是二进制软件的;再往下就是 iOS 与 Android 应用了。
图 4:HackerOne 的报告数据
可以说,网站安全攻防,也就是我们俗称的 Web 安全,占比通常达到了 80%以上。Web 安全是最受外部黑客关注的目标,也是企业应该重点防御的对象。
尽管 Web 安全如此重要,但我在面试一些渗透测试岗位的求职者时,发现多数人要么只懂得利用,不懂得防御,要么就是缺乏实战能力。
企业你是想让你来发现和解决安全问题的,如果不懂防御,又如何为企业提供相应的解决方案呢?更何况 Web 安全是一项注重实战的技能,如果缺乏实战能力,到了真被入侵的时候,根本就无法应对。
如果你想从事安全行业,或者是想从事前后端开发工作,学习 Web 安全知识能让你更有效地应对入侵问题,甚至是提前做好安全防护,防止安全事件的发生。
另外,学习 Web 安全相关的知识,不仅可以帮助你提升自己,还能赚取赏金。
国内外企业都有自建安全响应中心,用于接收外部报告漏洞;然后,依据漏洞危害等级和质量给予相应的赏金或礼品,比如 TSRC(腾讯安全应急响应中心)、MSRC(微软安全响应中心)。此外也有一些知名的第三方漏洞奖励平台,比如 HackerOne,上面经常会公开一些漏洞案例,非常有学习价值。
一开始想赚赏金是有些难度的,因为在上面挖漏洞的白帽子非常多,遇到报告相同漏洞的情况时(俗称“撞洞”),平台只会把赏金给到最早报告漏洞的人。如果你没有系统化的 Web 安全知识,只会用一句弹提示框的语句到处填写输入框,看是否会弹框,那基本是挖不到漏洞的。
我刚开始去国内 SRC(安全响应中心)平台赚赏金的时候,有点力不从心,很难挖到有价值的高危漏洞。我尝试购买了一些相关的书籍,但那些书大多是停留在理论知识上,没有提供实践操作的方法。后来即便挖到了一些漏洞,当厂商来问我一些具体的危害和修复建议(有助于提高厂商评估的奖金额度)时,我又经常答不上来。
课程设计
面对这些问题,我确定了本课程的思路,也就是前面我提到的“未知攻,焉知防”。我将课程分成了 3 个模块,通过工具和方法论介绍、理论分析、案例实战,从多个维度带你了解 Web 安全,建立完整的 Web 安全知识体系。
-
模块一,Web 攻防基础。这是正式开始前的准备工作,主要介绍了一些常用的工具,并带你搭建靶场,避免非法测试他人网站。通过这一部分的学习,你可以掌握一些常用的渗透工具和信息收集的方法,帮助你提高测试效率和成功率;搭建靶场也能让你更好地理解漏洞的产生原理和利用,提高实战能力。
-
模块二,漏洞攻防原理。作为这门课最硬核的部分,在模块一的基础上,我补充了一些实用的工具和测试方法(例如 sqlmap),讲解了各种常见的 Web 漏洞攻防原理,教你进行安全测试,并通过靶场进行演练。通过这一部分的学习,你可以了解 XSS、SQL 注入、CSRF 等常见 Web 漏洞类型的攻击与防御方法。只有深入学习这些漏洞攻防技术,才能避免自己成为只会使用工具的“脚本小子”。
-
模块三, Web 安全建设。这里介绍的是企业内部对于 Web 安全漏洞的防御方法。如何更系统、更全面、更早地检测、修复、拦截各种漏洞,防止企业产品遭受外部利用漏洞进行恶意攻击是这一模块的重点。业务开发过程中,避免安全漏洞的产生也是一个非常重要的流程。
通过这一部分的学习,你不仅能保障自己业务产品的正常运行,而且能避免自己的绩效受到安全事件的影响。业务产品上线后,若是被攻击入侵,也能拥有修复漏洞和应急处置的能力,这是在工作中表现自己能力的最佳时刻。
在这个过程中,我希望“授人以渔”地教授你正确的学习方法,不仅引你入门,更能让你获得持续的自我提升;同时,我希望通过分析常见的 Web 漏洞类型的原理、利用、检测与防御,让你能够独立完成渗透测试工作,让你能够帮助企业更早地发现和修复漏洞,防止被外部攻击入侵。
课程中,我还会结合公开的漏洞靶场和 CTF 赛题,通过实例来讲解 Web 安全攻防的方方面面,指导你搭建环境练习,在实践中学习与应用。
讲师寄语
入门 Web 安全并不难,难的是如何在实战中不断提升自己,在前人的技术研究基础上,有所创新和提升。在这门课中,我会带你系统了解安全知识体系,学会分析和解决 Web 安全相关问题,帮助你胜任更具有挑战性的工作。
哪怕你是研发岗,并未在从事安全行业,掌握安全技术,也一定会在将来的某一时刻发挥作用。用技术打造自己的核心竞争力,做职业生涯的常青树,做生活的保护伞,也不失为一种提升职场竞争力,抵御职业风险的有效手段。
相信你只要认真学完本课程,并认真跟着课程进行实战练习,就能够具备独立的渗透测试能力。如果在学习完本课程后,你刷到了自己的第一笔漏洞奖金,记得回来分享下,期待你的好消息。
01 武器库:常用的渗透测试工具
这一讲,我来介绍一些常用的 Web 渗透测试工具。通常每个安全人员都有自己熟练使用的一套工具,这样在实战中才能高效,也不用浪费时间去自己重复造轮子。
白帽子最喜欢用什么安全工具?
2020 年的 HackerOne 黑客报告中,统计过白帽子们最喜欢用的软硬件工具。
图 1 白帽子最喜欢使用的工具统计图
从图中可以看到,89% 的白帽子都会使用 Burp Suite 这个 Web 应用安全测试工具,有 39% 会尝试自己写工具,第三名的 Fuzzers 是模糊测试工具。再后面主要是一些代理抓包工具、漏洞扫描器和调试器(用于调试二进制程序居多)。
从以上信息中我们也能了解到,涉及 Web 渗透的常用工具集中在代理抓包工具和漏洞扫描器上。Burp Suite 两者兼具,还有丰富的插件,并集成了很多渗透测试的常用功能,是手工挖掘漏洞的必备神器。因此,成为白帽子的最爱也在情理之中。
这一讲我收集整理了一些个人比较常用的工具,有一定的个人爱好偏向,你也可以根据自己的喜好选择顺手的使用,并不必局限于我列举的工具。
这里我主要介绍常用的工具以及在使用上的一些技巧和心得,你可以自己动手安装尝试一下。在未来的课程中,我会在合适的实践场景讲解相应工具的实战应用,比如在“第 04 讲”将介绍 Nmap,在“第 07 讲”和“第 08 讲”提到“SQL 注入”时又会应用 SQLMap。
我比较推荐从资料的源头入手,哪怕是英文的原始资料,你自己认真阅读一遍,肯定好过被别人嚼烂的东西。下面的工具我也会尽量标出原始技术内容来源,此处不会过多详细地介绍每一样工具的使用,你可以参考文末列出相关的资料清单,边操作边学习。
Burp Suite:集成化的 Web 应用测试工具
我们先来看看白帽子们最喜欢的 Web 应用安全测试工具:Burp Suite。
图 2 Burp Suite
Burp Suite 分免费的社区版、收费的专业版和企业版。社区版主要是一些代理抓包改包的基本功能,专业版则包含漏洞扫描器、插件商店、Burp Instruder(比如用来暴力破解账号)等功能。
专业版一年收费 399 美元,按当前汇率算,相当于 2637 元,也并不便宜;企业版更贵,要 3999 美元(相当于 26435 元),主要增加了一些定期循环漏洞扫描和 CI 持续集成功能,具有更好的扩展性。
对个人而言,专业版就足够了。其实我觉得 Burp Suite 的漏洞扫描功能一般,漏洞发现能力并没有那么强,其检测结果仅作为参考。对于漏洞扫描,我更喜欢使用稍后要介绍的几款漏洞扫描工具。
以前我做渗透测试时比较习惯用 FireFox,因为它有丰富的安全测试插件。现在 Chrome 市场占有率已经超过 70%,以前 FireFox 中很多优秀的插件也移植到了 Chrome 中,因此我现在基本只用 Chrome。
这里提到浏览器,是因为在使用 Burp Suite 前需要配置浏览器代理,这样才能将 HTTP/HTTPS 请求转发到 Burp Suite 上进行分析与测试。
在 Chrome 的设置中搜索“代理”会让你选择“打开您计算机的代理设置”,如下图所示:
图 3 Chrome 代理设置
打开之后你就可以设置 HTTP/HTTPS 代理为 Burp Suite 的对应端口,默认为 127.0.0.1:8080。下面两张图分别是系统和 Burp Suite 上的代理设置页面:
图 4 系统代理设置页面
图 5 Burp Suite 代理设置页面
如果每次使用都要进行这样的配置代理其实还挺麻烦的,毕竟有时也得正常地使用浏览器上网。我在这里推荐个小技巧:你可以使用 Chrome 上的插件“Proxy SwitchyOmega”来快速切换代理,如果你用的是 FireFox,那可以使用 FoxyProxy 插件。
在 Chrome 应用商店中搜索“Proxy SwitchyOmega”并安装它,然后像下图这样配置:
图 6 Proxy SwitchyOmega 配置
配置完成后你就可以在 Chrome 浏览器右上角的插件栏中点击“Proxy SwitchyOmega”插件图标,选择上面创建的“Burp Suite”情景模式开启代理,若想关闭代理直接选择“系统代理”即可。
图 7 Proxy SwitchyOmega 快速代理展示
下图是代理成功后,Burp Suite 拦截到流量的效果图:
图 8 Burp Suite 代理成功
其他更详细的 Burp Suite 功能,你可以参考Burp Suite Document和Burp Suite 实战指南这两份资料学习,此处不再展开。
Acunetix WVS
Acunetix WVS(Web Vulnerability Scanner)是我以前经常用的 Web 漏洞扫描器,也曾用它刷了不少国内 SRC 平台的漏洞。
图 9 Acunetix WVS
WVS 支持登录态扫描,可以登录账号访问需要权限的页面,从而爬取更多 URL,提高漏洞发现率。这个功能很重要,有些网页的功能全都要求登录,如果没有这一步设置,你什么也扫不到。不过现在很多扫描器也支持登录态扫描了。
这几年 WVS 也在不断地更新维护,它属于收费软件,一年 3,331.99 美元(相当于 22049 元),对企业来说可以接受。但 WVS 的规则越做越烂,现在的版本扫出来的漏洞大部分都是误报,参考价值不如以前。
关于 WVS 的具体使用,你可以参考 Acunetix WVS 官方提供的使用文档。
Xray:Web 漏洞扫描器
随着 WVS 的没落,国内的长亭科技出了一款叫作 Xray 的漏洞扫描器,现在国内不少白帽子开始使用它。他们会自己开发一些自动化工具去爬虫,然后导入地址到 WVS 和 Xray 扫描(参考资料:Xray_and_crwlergo_in_serve、crawlergo_x_XRAY),在扫到漏洞后,微信会自动通知。
图 10 Xray
我在使用 Xray 的时候发现,Xray 的准确率要比 WVS 高,但漏洞发现率不是很高,经常扫完后报告是空的,而且 Xray 的扫描速度很慢,还有一定优化的空间。
Goby:基于网络空间测绘的漏洞扫描器
Goby 是一款国内新出的安全扫描器,它基于网络空间测绘技术进行资产收集,也就是先通过对目标网络的 IT 资产进行规则分析,建立知识库,在发生安全事件时就能直接用于应急响应,这项功能比较适合企业内部。Goby 属于免费的工具,且跨平台支持 Windows、Linux 和 macOS,界面不错,还提供了多个皮肤。
图 11 Goby
Goby 有个比较实用的功能,那就是支持自定义规则的漏洞扫描框架。它本身也会收集一些产品的 PoC(概念证明,常被用于验证是否存在漏洞,如下图所示),同时在外部曝光或自主挖掘到漏洞时,借助该框架添加规则,可以快速去扫描相关资产是否存在漏洞,对于企业应急和个人刷 SRC 平台漏洞是一个神器。
图 12 Goby 收集的 PoC
Goby 的使用可以参考官方文档中的内容。
SQLMap:SQL 注入检测与利用
SQLMap 无疑是 SQL 注入工具中的王者。在 SQL 注入漏洞检测与利用上,SQLMap 提供了非常全面的功能,哪怕是一些漏洞无法检测到,许多白帽子仍习惯在上面做二次开发,或者利用 tamper 脚本来扩展。
图 13 SQLMap
我将在“第 06 讲”和“第 07 讲”中详细介绍该工具的使用,此处不再赘述,详细的使用方法可以从官网了解。
Nmap:网络扫描与主机检测
Nmap 有界面版本和命令行版本,我比较喜欢使用命令行,因为可操作空间大一些。
图 14 Nmap 界面版本
图 15 Nmap 命令行版本
很多人只知道 Nmap 可用于端口扫描和主机服务识别,但实际上它远不止如此。Nmap 提供的丰富脚本,大大扩展了它的功能,它可以探测弱口令,甚至是漏洞扫描。Nmap 的功能十分强大,需要你慢慢探索。
关于 Nmap 详细的使用说明,你可以参考官方文档,在下一讲“信息收集:掌握目标的一切信息”中,我还会提到 Nmap。
Postman:模拟发包工具
虽然 Burp Suite 功能强大,但有时会觉得开启代理麻烦,对于能在浏览器上直接完成的,我一般都不开 Burp Suite 操作。
Chrome 上自带的开发者工具可以直接抓包查看:通过在网页右击,选择“检查”即可打开;然后切换到“Network”标签页,操作网页后即可获取到网络请求包,但它不支持拦截修改请求包。
图 16 Chrome 抓包
如果你想直接构造请求去发包,或者用来测试一些网络接口的调用,那使用 Postman 再适合不过了。安装完 Postman 后,通过 Chrome 标签栏的“应用”即可打开 Postman。
图 17 Chrome “应用”标签
图 18 Postman
Postman 也支持网络拦截来修改数据包重发,但需要另外安装个插件“Postman Interceptor”,我感觉没有 Burp Suite 来得好用和强大,因此我很少用它。关于 Postman 更多的使用方法,可以参考官方文档。
对于 Postman 与 Burp Suite,轻量操作可以选择 Postman,比如单纯发包测试接口,又懒得配置代理的操作;如果你需要更多安全测试方面的功能,比如改包、批量发包测试用来暴力猜解密码或遍历信息,那么 Burp Suite 无疑是最佳的选择。
HackBar:安全测试插件
HackBar 是一款非常经典的 Web 安全测试插件,最早出现在 FireFox 浏览器中,后来也被移植到了 Chrome。它可以用来构造 GET/POST 请求,自带一些编码解码工具,以及 XSS 和 SQL 注入常用测试用例,能为你在实际测试中提供很大的便利。
图 19 HackBar
HackBar 的功能跟 Postman 有些类似,都是用来模拟发包的工具,但 HackBar 显然是为专业的安全人员开发的,而 Postman 虽然有很多开发在用,但常被用来测试一些网络 API 接口。
HackBar 使用非常简单,正如它简洁的界面一样,所有的功能都可以很快上手,用几次基本就熟练了。无论是 HackBar 还是 Postman,你都可以试一下,选择自己顺手的工具即可。不管什么工具,能够帮助你挖到漏洞的都是好工具。
NC(NetCat):网络瑞士军刀
我习惯称 NC 为瑞士军刀,因为它简单易用,功能强大,在行业内非常流行。在实际渗透测试中,我最常用的有两个功能:
-
监听端口以等待后门回连;
-
发包测试,有时请求包内容较多,可以放在一个文件里面直接提交(不局限 http/https 这种请求),其他任意端口都支持,所以它要比 postman 和 hackbar 这些发包工具的应用范围要广。
除此之外 NC 还有其他功能,比如端口扫描、作为代理来端口转发数据,甚至可以在两台主机之间搭建起聊天室。
图 20 NC
更多 NC 命令参数的使用,可以通过 man nc 命令来查看。
Metasploit:渗透测试平台
Metasploit 在渗透测试中经常被使用到,它不是一个单纯的工具,而是一个集成各种渗透测试工具的平台,上面有很多漏洞利用工具,还有免杀处理、后门生成与留存、远程控制等很多强大的功能。
图 21 Metasploit
以前我经常用 Metasploit 来辅助编写名为“内存破坏漏洞”的利用程序。Metasploit 在主机渗透,甚至是当前移动手机上的渗透测试都可以使用,所以这里我非常推荐你去好好研究一下 Metasploit 平台的应用。
国内外已经出版了很多本关于 Metasploit 的书籍,你也可以直接阅读官方文档。
总结
这一讲我向你介绍了一些常用的渗透测试工具,它们也是我平常用得比较多的几款工具,你可以多用用,挑选自己感觉比较顺手的工具。
这里没有详细介绍每一款工具的安装和使用,因为这些工具在网上都有很多资料,我只对它们做一个简单的介绍,让你能了解它们。
我非常推荐去阅读官方的第一手资料,它们经常保持更新,且资料说明也比较全面,比二手资料要好很多。本讲除了介绍一些常用工具外,更重要的是想向你传递两个信息:
-
尽量阅读一手资料;
-
多用搜索引擎查找相关资料学习。
除了本讲介绍的工具外,你还知道哪些好用的渗透测试工具呢?欢迎在留言区分享推荐。
下一讲,我将带你了解一些收集渗透目标相关信息的方法和工具,它是我们开展渗透测试工作的第一步。
02 信息收集:掌握目标的一切信息
你好,我是赢少良。上一讲我介绍了一些常用的渗透测试工具,有些在这一讲中就会用到。这一讲主要是想和你分享渗透目标的信息收集技术,它在开始一项渗透测试工作的前期工作中有着很重要的地位,因为这决定了你能找到的攻击面有多大,也是你能否成功渗透目标的关键。
信息收集方法
根据收集方式的不同,我们可以将信息收集分为两类:主动收集和被动收集。下面我先介绍一下这两个概念。
-
主动收集是指通过扫描确认目标的操作系统和网络服务,为后续发现漏洞提供信息帮助,但它可能引起目标的注意,或被记录下扫描行为。一些服务指纹检测、网站爬虫都是主动收集的方式,它们直接向目标发起请求,在有防火墙的情况下,可能会被拦截告警。
-
被动收集是指在不接触目标的情况下,通过互联网搜索来收集目标遗留在网络中的信息。这样可以避免引起目标的警觉。网上很多人说的公开来源情报(Open-Source Intelligence,OSINT,简称“开源情报”)正是需要被动收集的信息,它是从公共资源中收集到的。
综上可以看出,主动收集与被动收集的主要区别就在于收集信息的过程中是否需要接触目标。在实际渗透测试过程中,一般两种方法都会用上,以收集更多有价值的信息。
在收集信息时,无论是主动还是被动,都建议使用小号,尤其是在一些社交平台上的信息收集,小号可以避免行为暴露。
信息收集实践
关于信息收集的工具,你平常可以多关注一些开源工具。GitHub 上有很多,遇到好的工具可以下载收藏,避免临时找工具或者被迫手工操作,那会非常影响效率。
在操作系统 Kali 和 Parrot 中有相应的工具列表,你可以找到很多不错的工具。
下面我将介绍 6 个信息收集的方法,分别是子域名与 IP 收集、端口服务探测、网站指纹识别、旁站与 C 段查询、WAF 探测和敏感信息收集。
子域名与 IP 收集
收集子域名和 IP 常常是信息收集的开端,这对你摸清整个目标的资产起着很关键的作用,它们直接决定了渗透目标范围的大小。当然,有时候渗透测试任务直接限死子域名,这种情况下这一步就可以直接省略了。
在 GitHub 上有一个开源项目,叫 bounty-targets-data,它会收集一些漏洞奖励计划中的域名范围,并在持续更新,目前已经收集了 2000 多个域名。对于喜欢刷漏洞奖励平台的同学,bounty-targets-data 确实是一份不错资源,它可以开启循环扫描,不停地去扫这些有奖励计划的域名,运气好的话,可以挖到漏洞拿奖金。
关于收集子域名的技术原理在《红蓝对抗之域名搜集方法总结》中有详细的介绍,主要包括证书透明度、DNS 查询、Whois 查询、备案网站、搜索引擎、暴力猜测等多种方法实现。
收集子域名可以通过一些在线网站或者本地工具来收集,常用的工具或站点有 OneForAll、subDomainsBrute、subfinder、ESD、Amass、DNSDumpster 和 Subdomain Finder。
-
OneForAll 在功能上非常集全,使用字典爆破、证书透明度、常规检查(域传递、sitemap 文件、robts 文件、内容安全策略 csp 等)、网络爬虫、DNS 数据集、DNS 查询、威胁情报平台、搜索引擎等多种方式,也支持多种文件格式导出。OneForAll 收集到的有效域名很多,但经常会有误报,速度也相对比较慢。
使用示例如下:
python3 oneforall.py --target lagou.com run
图 1:OneForAll
-
subDomainsBrute采用暴力猜解域名的方式,速度快、准确度高。但由于是字典猜解方式,仍会存在一定的漏报。
图 2:subDomainsBrute 运行效果图
图 3:subDomainsBrute 爬取的域名结果图
同一域名有时会有指向多个 IP 地址情况,因为企业可能采用 CDN 内容分发网络,就近选择网络最好的节点服务器响应用户。因此,有时同一台机器访问同一个域名时,会访问到不同的 IP,比如 weixin.lagou.com 就是如此。
图 4:同一个域名的不同 IP
subDomainsBrute 也会将同一域名指向的多个 IP 一并收集起来,但如果超过 10 个 IP 就会放弃收集。
使用示例如下:
python3 subDomainsBrute.py lagou.com
-
subfinder 的扫描速度很快,它支持很多第三方 API 接口(需要配置),同时支持多种输出格式,但 subfinder 没有字典爆破域名的功能。
使用示例如下:
subfinder -d lagou.com
图 5:subfinder
-
ESD支持域名爆破、DNS 解析、域传递、搜索引擎、证书透明度等多种搜索方式,还支持 zoomeye、censys、fofa、shodan 等网络空间搜索引擎的接口结果收集,这个需要在配置文件中设置 key 或者账密才能使用。
ESD 有时的搜索结果不太稳定,对同一域名的多次搜索可能会不一样,比如跑 lagou.com,一次跑出 27 个域名,一次跑出 67 个域名,差异很大。
使用示例如下:
esd -d lagou.com
图 6:ESD
-
Amass是一款 OWASP 出口的资产搜索工具,除了常规的域名收集方式,它还支持搜索结果可视化,并能从很多网站和 API 收集子域名。另外,它提供了一套类似 Nmap 的脚本引擎,支持用户自定义数据源以扩展搜索范围。它的扫描速度非常慢,但能够收集到非常多的子域名信息。
以 lagou.com 为例,它共收集到了 40769 个子域。这数据相当多了,不过里面有不少是跳转到主页 lagou.com 的,实际没有单独的子域网站,即不同域名指向同一台服务器,或者是直接 302 跳转到主页的情况。这些子域在网站扫描时可以考虑去重,避免重复扫描。
使用示例如下:
amass enum -o out.txt -d lagou.com
图 7:Amass
-
DNSDumpster可以在线搜索子域名以及相应的 IP 地址,提供 xlsx 文件导出,以及整个域名映射关系图、IP 分布地图等信息,在展示和准确度上还是不错的。它的搜索速度也很快,但就是子域收集相对少很多。
图 8:DNSDumpster
-
Subdomain Finder支持在线搜索子域名以及相应的 IP 地址。它的扫描速度很快,若没有显示 IP 则代表域名没有绑定有效的网络服务器,或者无法访问该域名。在界面上,它直接提供“Check Status”功能来检测网站的访问状态。该网站上还提供有“Private scan”功能,可以防止扫描时被记录。但它的不足之处在于,扫描结果无法直接导出文件到本地。
图 9:Subdomain Finder
以拉勾网(lagou.com)为例,我对上述工具的子域检测结果进行了统计对比,得到的结果如下表所示:
图 10:不同工具的子域检测结果统计对比
可以看到,Amass 扫出的数据实在是太多了(大部分是直接跳转到 lagou.com 主页),其他工具的柱状数据会小得无法比较。因此,在画统计图的时候我去掉了它。
图 11:子域检测结果统计图
我用得比较多的是 OneForAll 和 Subdomain Finder,在收集域名时则更喜欢用 Subdomain Finder + OneForAll + subfinder + Amass 的组合。像 Amass 输出太多了,它扫描和验证有效性的时间也比较长。
端口服务探测
在上一讲“01 | 武器库:常用的渗透测试工具”中我介绍了 Nmap,用它来扫描端口服务就足够了。那我们为什么要做端口服务探测呢?
近期 FBI 发布紧急警告称,SonarQube 商业化源码审计系统被利用默认弱密码窃取政府内部一些产品源代码。
安装 SonarQube 时会默认开启 9000 端口,默认的管理员账号密码均为 admin。攻击者在网站上扫描开放 9000 端口的服务器,若发现是 SonarQube 就可以尝试用 admin 登录,如果能登录就可以窃取到上面的产品源码了。这是扫描端口服务非常典型的应用场景。
再比如端口 3389 用于远程桌面连接,如果发现了,也可以尝试用弱密码登录,或者利用一些远程桌面漏洞去测试。
针对开放端口和服务识别的方式,在渗透测试过程可以有针对性地采取不同的测试方法,虽然简单,但非常有效。
下面以探测拉勾网的端口服务为例,使用 Nmap 去探测:
$ Nmap -A lagou.com
Starting Nmap 7.91 ( https://Nmap.org ) at 2020-11-15 12:55 CST
Nmap scan report for lagou.com (117.50.36.103)
Host is up (0.037s latency).
Other addresses for lagou.com (not scanned): 117.50.39.99 106.75.118.232
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
80/tcp open http OpenResty web app server
|_http-server-header: openresty
|_http-title: Did not follow redirect to https://www.lagou.com/
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
443/tcp open ssl/http OpenResty web app server
|_http-server-header: openresty
|_http-title: Did not follow redirect to https://www.lagou.com/
| ssl-cert: Subject: commonName=*.lagou.com/organizationName=\xE5\x8C\x97\xE4\xBA\xAC\xE6\x8B\x89\xE5\x8B\xBE\xE7\xBD\x91\xE7\xBB\x9C\xE6\x8A\x80\xE6\x9C\xAF\xE6\x9C\x89\xE9\x99\x90\xE5\x85\xAC\xE5\x8F\xB8/stateOrProvinceName=\xE5\x8C\x97\xE4\xBA\xAC/countryName=CN
| Subject Alternative Name: DNS:*.lagou.com, DNS:lagou.com
| Not valid before: 2019-04-01T08:51:44
|_Not valid after: 2021-05-19T12:00:00
|_ssl-date: TLS randomness does not represent time
| tls-alpn:
| h2
|_ http/1.1
| tls-nextprotoneg:
| h2
|_ http/1.1
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
4444/tcp filtered krb524
Service detection performed. Please report any incorrect results at https://Nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.95 seconds
-A 参数开启端口扫描、系统检测、版本检测、脚本扫描及路由追踪,是一个比较常用的参数。
从扫描结果可以看到,lagou.com 开放端口:80、135、139、443、445、593、4444 以及对应的服务名称。
网站指纹识别
网站指纹是 Web 服务组件在开发时留下的类型、版本等标记信息,包括 Web 服务器指纹、Web 运用指纹及前端框架指纹等。
除了前面用 Nmap 扫描端口和服务的方法,我们还可以通过前端网页和返回一些 HTTP 头信息来判断网站使用的哪些开发框架、服务器、系统,在渗透测试时也可以提供有针对性的测试思路。
我比较推荐 Chrome 插件Wappalyzer。在你打开网站后,点击插件,按钮就会弹出如下类似信息,网站的指纹信息一目了然。
图 12:Wappalyzer
还有一个在线检测网站也支持指纹检测:https://scan.top15.cn/web/,如下图所示:
图 13:ThreatScan
其他检测指纹的工具还有 WhatWeb、WPScan、JoomScan 等,你可以自行搜索试用。
旁站与 C 段查询
有时测试的网站非常坚固,找不到任何漏洞,那我们就可以尝试对“旁站”进行渗透测试。旁站即同一服务器上的其他域名网站,如果你能攻下该旁站,就有机会间接拿到目标网站的权限。
还有另一种方法就是查询 C 段 IP,即同一内网段的服务器。比如 lagou.com 的 IP 为 106.75.118.232,那它的 C 段 IP 为 106.75.118.1~106.75.118.255,通过攻下同一 C 段的服务器,再间接渗透到目标服务器。
无论是旁站还是 C 段渗透方式,都是尝试从目标网站的旁路途径去间接渗透目标。在这里我推荐几个在线查询旁站和 C 段的网站,同时提供一些指纹检测信息。
图 14:The Web of WebScan
图 15:IP 查询
WAF 探测
当网站开启 WAF(Web 防火墙)时,很多测试请求都会被拦截,导致无法正常扫描。此时就要分析 WAF 找到绕过的方法,否则很难挖到漏洞。在不知道的情况下,还以为真的没有漏洞,其实有时只是被 WAF 拦截了而已。不过就算挖到了漏洞,利用起来也有一定的门槛。
因此,在测试前,若发现发包经常测试失败的话,除非网络不通,否则都建议先探测下 WAF。如果存在 WAF 就尝试寻找绕过的方法,再改造测试用例进行重试。
上一讲中介绍的 SQLMap 就支持 WAF 检测,上文介绍的 TScan 也支持,不过有时会误报。这里我主要介绍一下 SQLMap 检测 WAF 的方法,使用命令如下:
python sqlmap.py -u "http://www.lagou.com" --identify-waf --batch
上述代码中,--identify-waf 参数开启 WAF 检测,--batch 参数不询问用户输入,按默认执行。
SQLMap 既支持常见 WAF 的检测,也支持自己写脚本扩展检测能力。
敏感信息收集
2019 年 4 月发生了一起大疆前员工泄密源码的事件,该名员工将大疆公司的在用产品源码开放到 GitHub 上,其中还包含云服务器上登录密钥,导致他人可以登录服务器查看上面存在的各种用户数据,最后被判刑。
图 16:大疆前员工泄密源码事件
从这件事也可以看到在网络上泄露的一些敏感信息,有时会直接导致服务器被入侵,公司相关的知识技术产权被窃取,造成实际的经济财产损失。
因此,在授权的渗透测试过程中,我们要多方收集与目标相关的信息,包括 Google、GitHub、社交平台等多方渠道。我曾多次利用 GitHub 找到一些账号密码或密钥,从而获得授权测试的网站的最高权限,收集 GitHub 相关的敏感信息如下:
根据收集到的相关信息,我们还可以制作字典用来猜解一些相关账号和密码,此类的相关工具有:
-
Wordhound,https://github.com/kurobeats/wordhound;
-
BruteScrape,https://github.com/cheetz/brutescrape。
最后我再推荐几款综合能力较好的信息收集工具。
-
Recon-NG 是一款被动信息收集工具,它可以通过搜索获取 IP 地址、地理位置、用户、邮件地址、密码泄露或者其他敏感信息,最终生成一份完整报告。
图 17:Recon-NG
-
iKy的界面很酷,它能够从 Twitter、GitHub、Skype、Linkedin、Instagram 等社交平台上收集信息,但需要提前设置各平台上的 API KEY,可以输入一个邮箱地址去搜索其上述平台上的关联信息,最后会以可视化效果展示出来,如下图所示。
图 18:iKy
-
discover综合使用了很多工具,包括 dnsrecon、goofile、whois、recon-ng、dnssy\Nikto 等,它能够收集邮箱地址、雇员名字、主机信息、域名、IP 等一系列信息,最后提供 html 报告。
信息收集不局限于我上面举例的这些,有些你通过 Google 搜索到的文档、图片、敏感文件和目录等都可以。在后面的渗透测试过程中,说不定它们就能派上用场了。
收集的信息不怕多,就怕不全。
总结
这一讲我主要介绍了一些收集目标相关信息的常用方法和工具,包括域名和 IP、端口服务、网站指纹、旁站和 C 段、WAF、敏感信息等信息的收集。但信息收集不应局限于此,你可以根据渗透测试的需要,对扩展收集信息的范围,灵活变通。
收集信息之所以如此关键,是因为它能曝光出更多的攻击面,有助于我们寻找到目标的短板,这常常决定渗透测试的成败。
前面讲的域名收集方法中介绍了不少工具,但扫出来的域名该如何批量检测是否可访问呢?手工显然是不合理的,毕竟数量通常都很大。因此,我们需要自己动手写个脚本。
你可以尝试写一个看看,比如用 Python 的 requests 模块。但你要注意一下,有些域名只允许 https 或 http 的方式连接,需要把这些因素考虑进去。如果域名较多,你还要考虑下多线程并发提高检测速度,同时还要做好域名的去重。比如下列脚本的检测效果:
图 19:域名验证脚本
你可以尝试写一个域名验证脚本(Python、Shell……),如果遇到了什么问题或者是有什么心得,欢迎在留言区分享和讨论。
下一讲,我将带你了解如何自己搭建用于练习漏洞攻防的靶场,避免你在他人网站做测试,造成承担不必要的违法责任。
03 靶场:搭建漏洞练习环境
这一讲我来和你聊一聊“靶场”,也就是存在漏洞的实验环境,为了方便你边学习边实践,我强烈建议你在学习前搭建好靶场环境。
本讲主要介绍几款用于学习 Web 漏洞的常见靶场,你可以直接跟着我介绍的操作方法边看边安装。
安装与使用 Docker 容器
以前我们搭建网站,需要在服务器依次安装 Apache、PHP、MySQL 等应用,比较烦琐,而且不同的源还有不同的应用版本,跟系统环境又可能存在兼容性的问题,这就需要手动添加源地址,甚至是自己编译安装。
后来出现了 XAMPP、PHPStudy 等优秀的 PHP 集成环境,可以非常便捷地安装。但是安装好之后,如果要使用某些 PHP 网站代码,我们仍然需要查找下载,再部署上去。PHP 网站代码有可能与 PHP 版本、系统环境存在兼容问题,或者需要额外安装其他依赖库。若需要迁移服务器,那上述安装过程又得重来一遍。
到底有没有高效的安装方式呢?有,答案就是 Docker。
Docker 安装
本课程主要在 Ubuntu 系统下进行演示,在 Ubuntu 下可通过以下命令安装 Docker:
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
如果是 Windows 或 macOS 系统,可以直接从官网下载安装包安装,它会自动识别你当前的操作系统,并提供相应平台的下载地址。
安装完成后,可运行以下命令,若输出“Hello from Docker!”则代表安装成功:
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Docker 常用命令
安装完之后,我再介绍一些 Docker 的常用命令,基本是你在使用 Docker 会用到的。
安装 sqli-labs 靶场
sqli-labs 是一款用于学习 SQL 注入的靶场平台,覆盖了各种类型的 SQL 注入,题目共 75 道,按难度划分为 4 页。sqli-labs 靶场的难度循序渐进,对于提高 SQL 注入实战能力有很好的帮助。sqli-labs 靶场的项目开源地址为https://github.com/Audi-1/sqli-labs。
那如何使用 Docker 快速安装 sqli-labs 呢?首先,搜索 sqli-labs 镜像,挑战 STARS 星标最多的镜像,这里选择“acgpiano/sqli-labs”镜像:
$ sudo docker search sqli-labs
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
acgpiano/sqli-labs sql injection labs 12
c0ny1/sqli-labs sqli-labs 是一个 sql 注入的练习靶机,项目地址为… 2
sari3l/sqli-labs-safedog Base: sqli-labs & safedog(version Linux64_2.… 1
promiseit/sqli-labs 1
0bajie0/sqli-labs 1
tinmin/sqli-labs 0
area39/sqli-labs sql inject 0
hl0rey/sqli-labs 0
sari3l/sqli-labs Base: Debian-Wheey + MySQL 5.5 + PHP 5 0
sari3l/sqli-labs-yunsuo Base: sqli-labs & yunsuo(version Linux_3.0.6… 0
aqyoung/sqli-labs 0
xuanxuan3000/sqli-labs 0
fengbj/sqli-labs lamp+sqli-labs please down 2.0 0
jylsec/sqli-labs 0
baohs/sqli-labs-cenos 0
mendickxiao/sqli-labs sqli-labs based on ubuntu 0
r0ulier/sqli-labs sqlInjection 0
然后拉取镜像:
$ sudo docker pull acgpiano/sqli-labs
Using default tag: latest
latest: Pulling from acgpiano/sqli-labs
10e38e0bc63a: Pull complete
0ae7230b55bc: Pull complete
fd1884d29eba: Pull complete
4f4fb700ef54: Pull complete
2a1b74a434c3: Pull complete
fb846398c5b7: Pull complete
9b56a3aae7bc: Pull complete
1dca99172123: Pull complete
1a57c2088e59: Pull complete
b3f593c73141: Pull complete
d6ab91bda113: Pull complete
d18c99b32885: Pull complete
b2e4d0e62d16: Pull complete
91b5c99fef87: Pull complete
bf0fd25b73be: Pull complete
b2824e2cd9b8: Pull complete
97179df0aa33: Pull complete
Digest: sha256:d3cd6c1824886bab4de6c5cb0b64024888eeb601fe18c7284639db2ebe9f8791
Status: Downloaded newer image for acgpiano/sqli-labs:latest
docker.io/acgpiano/sqli-labs:latest
接着再在容器中运行 sqli-labs:
$ sudo docker run -dt --name sqli-labs -p 80:80 --rm acgpiano/sqli-labs [13:36:58]
2c40ccae95775f7dca6064c95e5eed9c58e66c93e92775a04f22f407b665d331
各参数含义如下所示:
-d:代表后台运行
-t:为容器分配伪终端
--name:命名容器
-p:指定映射端口,此处将 acgpiano/sqli-labs 的 80 端口映射到本地的 80 端口
--rm:退出时自动移除容器
现在我们直接访问http://localhost,可以看到 sqli-labs 已经成功运行了。
图 1:sqli-labs 成功运行
最后点击“Setup/reset Database for labs”链接完成数据库的安装:
图 2:完成数据库安装
到此,sqli-labs 安装结束!
安装 DVWA 靶场
DVWA(Damn Vulnerable Web Application)是一款比较著名的漏洞靶场,很多 Web 安全的初学者都会拿它来练习,一些高校以及相关书籍里面也会介绍它。DVWA 的项目开源地址为https://github.com/digininja/DVWA。
DVWA 靶场可以直接通过 Docker 安装:
$ sudo docker pull citizenstig/dvwa
$ sudo docker run -d --name dvwa --rm -p80:80 citizenstig/dvwa
安装成功后,打开http://localhost:
图 3:DVWA靶场
然后点击“Create/Reset Database”创建数据库,使用默认密码 admin/password 登录,即可正常使用。做题时它能直接提供阅读源码的功能,不过题目相对少一些。
图 4:DVWA 支持在线查看源码
上面的 XSS 漏洞默认是安全的,在实际练习时,可以在“DVWA Security“中设置安全等级,即题目的难度等级,共有 4 等,其中 Impossible 代表的是已修复漏洞的情况,可以用来熟悉如何修复漏洞。
图5:DVWA 安全等级设置
安装 Pikachu 靶场
Pikachu 也是一款 Web 漏洞靶场,涵盖各种 Web 漏洞类型的练习,也是基于 PHP+MySQL 搭建的平台,是由国人开发的。平台采用中文描述和基本的页面设计,相比 sqli-labs 这种单调的界面还是好看很多的。Pikachu 的项目开源地址为https://github.com/zhuifengshaonianhanlu/pikachu。
安装 Pikachu 也很简单,通过 Docker 即可快速安装。我们先搜索下镜像:
$ sudo docker search pikachu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
area39/pikachu https://github.com/zhuifengshaonianhanlu/pik… 3
……
然后取第一个镜像安装&运行:
$ sudo docker pull area39/pikachu
$ sudo docker run -d --name pikachu --rm -p80:80 area39/pikachu
安装成功后,打开http://localhost即可。
图 6:Pikachu 靶场
CTF 赛题练习
CTF(Capture The Flag)夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF 起源于 1996 年 DEFCON 全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,CTF 已经成为全球范围网络安全圈流行的竞赛形式。
一些 CTF 出题方经常会直接搭建现成的漏洞测试环境供参赛者使用,有些赛后会取消,有些会一直保留。所以你也可以直接利用现成的 CTF 赛题环境来练习,连搭建环境这一步都省去了。对于一些未保留在线赛题环境的 CTF 题目,就只能自己搭建了。
前面的漏洞靶场更新频率不高,CTF 赛题会更与时俱进一些,每年都有新比赛和新赛题,特别是新的漏洞场景和利用技术,这在 CTF 上很容易看到。
图 7:CTF TIME
各种国内外的赛事、题目与解答(write-up)都可通过该链接获取到,我在这里顺便也介绍几个现成的 Web 漏洞 CTF 在线练习环境:
1. XCTF 攻防世界:https://adworld.xctf.org.cn
图 8:XCTF 攻防世界
2. SQL 注入挑战平台:http://redtiger.labs.overthewire.org
图 9:SQL 注入挑战平台
3. 韩国 Web 安全挑战平台:https://webhacking.kr/
图 10:韩国 Web 安全挑战平台
4. Websec CTF 练习平台:http://www.websec.fr/
图 11:Websec CTF 练习平台
5. 网络信息安全攻防学习平台:http://hackinglab.cn/index.php
图 12:网络信息安全攻防学习平台
6. 国外的 XSS 挑战平台:http://prompt.ml/
图 13:国外的 XSS 挑战平台
你可以根据自己的喜好做选择进行练习。
安装 VulHub 真实漏洞靶场
Vulhub 是一款基于 Docker 和 docker-compose 的漏洞测试靶场,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。Vulhub 的项目开源地址为https://github.com/vulhub/vulhub。
前面的靶场都是精心构造的漏洞场景,与真实的漏洞场景还是有一些差异的。为了提高实战水平,熟悉更多的真实漏洞场景,建议你安装 VulHub 来重现各种历史漏洞进行实战练习。
对于每个漏洞,VulHub 都有相应的文档描述其漏洞原理以及测试利用方法,你在重现漏洞后,可以进一步研究相关漏洞类型的利用技术,并对漏洞代码进行阅读,以提高代码审计能力。
我们需要先从 GitHub 上下载 VulHub,然后进行相应目录去创建和运行容器:
$ git clone https://github.com/vulhub/vulhub
$ cd vulhub/flask/ssti
$ sudo docker-compose up -d
安装使用都很方便。
该项目几乎每个月都在更新,非常适合用于检测、利用和防御漏洞时的测试环境搭建。
总结
这一讲我主要介绍了一些用来实战漏洞攻防的训练靶场,并重点介绍了 Docker 快速搭建环境的方法,它相比传统方法中一个个工具的安装更加便捷;同时,靶场还能避免对真实网站非法测试的风险。
我向你介绍了 sqli-lab、DVWA、Pikachu、VulHub 这些业界常用的漏洞靶场,你可以都安装了,然后跟着后面的教程,边学边动手操作,以提高自己的实战能力,以及对漏洞的理解。
除了上述靶场之外,你如果还知道其他好的靶场,也欢迎在留言区中推荐。
下一讲,我将带你了解在渗透测试过程中需要注意的法律法规。之后,咱们就会进入本课程最核心的内容,模块二的漏洞攻防。
转载:https://blog.csdn.net/fegus/article/details/125715518