如今,Web 技术繁荣发展的同时,也带来了前所未有的安全挑战。有数据统计,所有黑客入侵事件中,85% 以上都是针对 Web 应用漏洞发起的攻击。
本教程《Web安全》是Kali大神讲师【苑房弘】的新课,隶属于『Kali Linux工具大全』技术系列的第三部分。向你解密所有Web攻击技术,是你掌握对黑客攻击进行提前检测、提前防御的能力,避免你所服务的机构再次遭受此类威胁。
通过学习本课程,为你揭开Web黑客技术的神秘面纱,成为一名专业的Web渗透测试工程师。
理论讲解是本课程的独特亮点,也是本课程不同于其他同类课程的最大差别,通过本课的理论讲解,你将深刻理解每个工具背后的技术原理,从此摘掉“脚本小子”的帽子。
Web安全测试工具介绍
nikto
向目标发送探测数据包,并根据回包来判断其运行状况和处理方式的做法,称之为扫描。WEB扫描器的本质也不外如此。衡量WEB扫描器优劣的两个关键指标,是爬网能力和漏洞检测能力。nikto这款开源WEB扫描工具,在爬网能力上有独特的亮点,同时可以检测大部分常见漏洞类型,以及因配置管理不当造成的安全漏洞。更具有插件扩展、躲避检测等多种能力,称得上是一款非常不错的扫描软件。
slowhttptest
多数人心目中的拒绝服务攻击,总是伴随着大流量、高并发等具体表向。但事实上某些针对应用层协议的拒绝服务攻击,完全不会造成明显的流量和连接数量的激增。slowhttptest即是针对HTTP协议实现慢速拒绝服务攻击的代表,它提供四种方法实现对目标连接池的耗尽,使得服务器完全无法接收新的访问请求。在被KALI收录之前的很多年里,它一直是我无坚不摧的秘密武器,并曾在多次产品测试过程中,打穿众多大牌厂商的防护设备。
apache-user
用户枚举属于渗透测试初期阶段的任务之一。其最常见的手段无外乎基于字典的爆破,但这种方法耗时耗力的同时又很容易引起目标的察觉,实在算不上一种巧妙的方法。apache-user并非普遍适用的工具,它只针对特殊场景,从另类的角度实现高效的用户枚举。虽然功能单一,但却充分体现了作者的巧思,而且提供了足够的定制能力。arachni因前两年国外一次著名的黑客攻击事件,arachni走进了大多数人的视线。这是一个功能全面,且明确为了大型网络分布式部署而设计的WEB扫描软件。不过Kali官方的作法却令我非常费解,它并未包含arachni的完整功能,因此我每次要使用时都不得不从官网下载完整版的软件包。arachni采用了一种self-contained的发行方式,因此可以完美实现跨平台、免安装和开箱即用。至于扫描能力,arachni曾在强手如林的同类产品测评比赛中名列前某。
bbqsql
如同本工具的作者所说,SQL注入漏洞就如同BBQ一样美味,因此他为本工具取了这样一个充满食欲的名字。bbqsql是一个半自动化的SQL盲注工具,曾登上过第20届DEFCON大会的讲台。不同于常见的自动化SQL注入工具,要想正常发挥bbqsql的功能,你必须具备手动挖掘SQL注入漏洞的能力。本课内容包含基本的SQL注入原理,纯手工的SQL盲注手法。如果你已经注入了很多年,但却依然无法体会SQL注入的美味,也许这就是你需要补上的一课。
BlindElephant
与以往相比,现在的程序员已经越来越轻松。大量现成的框架和库,使得WEB开发越来越像是一种搭积木的游戏。更有大量开源的CMS系统,使得即使完全不懂程序开发的外行也可以轻松搭建自己的WEB应用。这样做的好处主要体现于其效率优势,但由于部署量巨大,任何一个CMS系统自身的漏洞被曝光,其实际的受影响范围都可能非常巨大。BlindElephant基于对静态文件的HASH比对,快速识别目标基于的开源CMS版本,进而判断其可能存在的已知漏洞。
cadaver / davtest
WEBDAV是基于HTTP 1.1的扩展协议,其支持使用PUT方法上传文件,基于这个特性可以实现功能强大的内容或配置管理系统。但丰富的功能特性总是会带来安全方面的更多隐患。davtest是一个文件上传漏洞的检测和验证工具,而cadaver作为一个命令行形式的WEBDAV客户端程序,可以对相应服务器进行任何操作。本课我结合以上两个工具,分别向服务器上传正向、反向WEBSHELL,从而最终实现对目标服务器的远程控制。
cutycapt
这应该算不上是一个安全工具,但Kali Linux还是坚持吸纳了这个成员。cutycapt的主要功能是将目标WEB页面抓取并保存成为一张图片。我认为其合理的使用场景,应该是作为一个功能组件,在企业自建的安全监控和报告系统中,被直接调用生成页面的截图照片。cutycapt可以识别并执行客户端脚本语言,以及忽略SSL证书相关的错误提示。同时其可以自动识别有效的页面元素,在保证抓取信息完整的前提下,确保图片文件的体积最小。
whatweb
whatweb是一个功能简单的WEB扫描工具,其主要功能并非发现WEB应用程序的常见漏洞,而是对其进行指纹信息的收集。具体包括服务器软件版本、开发框架、语言环境、IP地址、javascript库等信息。其内建的约1000个功能插件,可针对不同类型的系统信息进行收集。而且whatweb支持批量扫描,定制请求前缀和后缀,同时还支持代理功能,通常是WEB渗透信息收集阶段使用的第一个工具。
uniscan / uniscan-gui
这是一个外表低调内心狂放的WEB扫描器,其功能却远不仅限于WEB一域。除了常规WEB扫描器该有的所有功能全部具备之外,uniscan还提供了『01-信息收集』类工具的很多功能,例如网络层路径追踪、端口发现、指纹探测、漏洞扫描等主动信息收集功能,以及DNS域名解析、搜索引擎信息收集等被动信息收集能力。甚至它还可以作为压力测试工具用来评估服务器的性能极限。uniscan-gui是它的图形化界面版本,功能与命令行界面的uniscan完全一致。
burpsuite
如果上天只允许我选择一个WEB安全检查工具的话,我相信自己会选择Burpsuite。这个高效的模块化工具,几乎适用于所有WEB安全测试的场景。它的所有模块之间信息均可互通,同时还拥有大量的扩展插件,即使在面对极度诡异的场景,它总能不辱使命,成为渗透测试者最有利的帮手。整整一年前,我曾讲过一次这个工具。本次课程我在提炼总结了原有内容基础之上,又填加了一些新增功能的介绍,他们个个特色突出,也许日后会有突破性的发展。
ua-tester / grabber
ua-tester是个小工具,其唯一功能是基于字典探测什么样的UA不会被服务器拒绝。grabber则是一个面向小型WEB应用的漏洞扫描工具,虽然它支持不少常见漏洞类型的检测,但仅就不支持身份验证这一点,就已经扎实的把它限定在小型WEB扫描器的领域无法逾越了。之所以要一次课程讲这两个工具,没有什么技术性的内在原因,只是因为它们都很小。
dirb / dirb-gendict / dirbuster
衡量WEB扫描器优劣的两大指标分别是爬网能力和漏洞检测能力。爬网爬的越全面,发现漏洞的可能性就越大;漏洞验证能力越强,漏洞检测结果就越精准。两者缺一不可。dirb是一个基于字典对目标WEB应用程序路径进行爆破的命令行工具;当现有字典无发满足需求的时候,dirb-gendict可以按指定字符类型和长度生成字典;如果你不喜欢字符界面也没关系,dirbuster提供了图形操作界面,而且功能上涵盖了前两者之和。
Gobuster
衡量WEB扫描器优劣的两大指标分别是爬网能力和漏洞检测能力。爬网爬的越全面,发现漏洞的可能性就越大;漏洞验证能力越强,漏洞检测结果就越精准,两者缺一不可。Gobuster由Go语言编写,其一方面是基于字典的WEB路径暴破工具,这一点和dirb非常相似。另一方面Gobuster是一个基于字典的子域名暴破工具(这种工具在『信息收集』类工具中我曾介绍过很多),在渗透测试者面对主站一筹莫展的时候,可以帮助我们发现旁路的渗透渠道。
fimap
当WEB应用程序将文件路径作为参数赋值,而服务器端对用户输入并未严格过滤的时候,就有可能存在文件包含漏洞。如果被包含的文件非程序代码,则内容会被直接返回给客户端浏览器,造成信息泄露;如果被包含的文件中包含程序代码,则会在服务器端被解析执行。本课我介绍了多种方法实现代码的植入,和对服务器的控制。
fimap
作为文件包含漏洞的检测、审计、利用工具,同时具备爬网和调用搜索引擎的能力,可极大简化渗透测试者的工作。vegaKali Linux中绝大部分工具都是命令行工具,大家的学习使用成本都比较高。vega是一个由java语言编写的图形化WEB扫描器,即使是初学者也可以快速学会并上手使用。它不但基于截断代理实现手动爬网,同时也具备主动爬网和自动扫描的能力,对大多数常见漏洞类型进行检测发现。身份认证方面vega支持全面,不但提供HTTP和Cookie认证方式,而且还具备登录过程重放功能,大大简化了WEB应用因身份认证给渗透测试者造成的繁琐。
jboss-autopwn
jboss AS是一个开源的J2EE应用程序服务器,由于其灵活性而受到众多程序员的喜爱。但灵活和易用似乎永远对安全都不够友好,jboos曾经被发现存在默认配置漏洞,而jboss-autopwn就是该漏洞的利用工具。它是个纯shell脚本,因此其连接建立、上传布署、获得shell等功能,都注定必须依赖其他工具来完成,其中metasploit就是最重要的一个。由于metasploit自身的快速迭代,已经造成jboss-autopwn的使用失效,本课我会向你介绍修正的方法。commixcommix是个All-in-One的命令注入漏洞检测、利用工具。它的出现弥补了命令注入漏洞长期以来文献匮乏的现状,它严格精细的对各种命令注入漏洞进行了细分,并通过代码实现了过程的自动化。本工具考虑到命令注入漏洞的各种场景,包括shellshock命令注入场景。由于其优秀的功能和高度准确的检测结果,在开发测试阶段其就曾发现多个安全产品的0day漏洞,并于2015年登上了黑帽大会的讲台。本课我从手动到自动完整向你展示命令注入漏洞。
joomscan / wpscan / plecost从促进行业发展的角度出发,软件开发工作需要不断逼近应用层面,这是必要的趋势。因此要求程序的基本功能不断被整合、打包、固化,成为新的软件开发的基础设施,只有这样程序员才能拿出更多的时间和精力来考虑现实层面问题的解决方案。CMS系统本省已经提供了一个完善的WEB应用,基于这个已经完工的产品,我们可以快速修改生成自己的WEB应用。本讲的三个工具都是对常见CMS系统进行漏洞检测的最优扫描工具。
skipfish
skipfish是谷歌开发的一款命令行WEB扫描工具。我们常见的开源扫描工具,大多都使用python、perl等脚本语言进行开发,以提高开发效率降低开发难度。这一点skipfish的做法略有不同,它使用了C语言进行开发。但也正因为如此,它的运行速度要明显优于其他同类扫描器软件。同时其具备的启发式扫描功能,使得其扫描结果的误报率相对较低。具体功能方面,skipfish也表现不凡,爬网、扫描、身份验证等功能一应俱全。
wapiti
wapiti是个黑盒WEB扫描器,爬网、扫描、报告等基本功能完备。它使用了一种模块化的工作方式,使用者可以按照自己的需要选择特定漏洞类型和HTTP方法进行扫描。为进一步完善自身能力,wapiti调用了nikto对可疑文件进行发现和检测。作为配套工具,wapiti还提供了wapiti-cookie、wapiti-getcookie两个小程序,用于从目标WEB服务器自动获取并生成json格式的cookie文件,以便应对需要身份认证的扫描场景。
jsql
Linux最不友好的方面大概要算缺乏优秀的图形界面了,但jsql在这方面让我们刮目相看。这款由JAVA编写的SQL注入漏洞利用工具,具有非常友好的图形界面,甚至让我们有一种回到了windows的感觉。这款工具支持多种HTTP方法,和几乎所有你听过没听过的数据库。检测手段上它几乎做到了全覆盖,基于标注、报错、时间、忙注等漏洞检测方法全有。同时还包含WEB Shell、SQL Shell、后台爆破、密码爆破等多种功能,可谓是个一站式的安全产品。
paros
作为一名安全技术人员,想必你一定知道Burpsuite、OWASP ZAP等基于截断代理方式工作的安全检查工具。但你知道吗?以上说到的这些工具最初都是模仿paros开发出来的。作为截断代理型WEB安全检查工具的先行者,十几年前它就已经具备了今天Burpsuite最核心的几个模块的功能(包括扫描)。所以如果你已经用过了Burp,那么当你再使用paros的时候,一定会有一种莫名的亲切感。
funkload
Funkload是一个由Python编写的WEB项目测试工具套件。为了简化测试人员的工作,Funkload提供了基于代理的自动代码生成功能,使得测试人员在只需要很少量编码的情况下,即可以快速生成测试代码。利用Funkload,我们可以自动实现回归测试、性能测试、负载测试、压力测试,并自动生成图文并茂的测试报告,更可以对多份报告进行比对和趋势分析。为了方便大家使用,我在本课中给出了大量例子代码。
owasp-zap
OWASP-ZAP是由OWASP组织开发维护的综合型WEB安全检查工具。由于其全面的功能和强大的扩展能力,使我坚信这是除BurpSuite之外,另一个必须被WEB安全人员掌握的强大工具。ZAP不但可以作为自动WEB扫描器使用,同样也提供截断代理的能力,我们可以利用这一个工具,全部完成自动和手动的WEB漏洞挖掘工作。同时丰富可定制的Fuzz能力,更可以极大提高渗透测试人员的工作效率。另有API接口,可供开发人员编写自己的扫描器。
padbuster
阿里有位道哥,在他写的《白帽子讲WEB安全》一书中,曾介绍一种称之为Padding Oracle Attack的漏洞利用方式。这是一种针对加密算法,通过边信道攻击实现对加密数据进行解密的攻击方式。道哥书中的理论部分完全来自于该漏洞首位复现者的博文,不过道哥只引用了文章前半部分的内容。本课我将向大家完整介绍此文章的全部内容,以及如何利用padbuster工具自动实现漏洞利用的方法。
httrack
在对目标WEB站点进行侦察的阶段,我们需要多次反复的浏览目标站点的结构。但频繁且无意义的访问行为容易引起目标站点的警觉,此时比较稳妥且隐蔽的做法是,先将站点全部结构镜像下载到本地,然后进行离线慢慢观察和浏览。httrack就是这样一个全站下载工具,它功能全面参数巨多,可以满足不同场景的需要。同时它支持多种身份验证机制,因此对要求授权用户才能访问的地址页面也可以一并下载。
deblaze
在很多使用Flash的网站上,都使用了Adobe的Flex编程方法。从效率方面来看,这种基于AMF协议封装序列化二进制数据包的通信方式,比我们通常使用的基于文本的传输方式要快10倍以上。但取得高效便利的同时,Flex App也引入了新的攻击面,使其更加容易受到黑客的攻击。deblaze分析和枚举Flex服务器端地址和服务方法名称,并利用pyamf模块伪造AMF协议报文,进行漏洞检测和验证。
owasp-mantra-ff
你是否听说过某些“大牛”说,自己只凭解一个浏览器他就可以黑掉整个世界的网站。是吹牛还是真牛我不得而知,但owasp-mantra-ff确实是一个完全基于FireFox浏览器打造的WEB安全工具,通过集成大量安全相关的浏览器插件,mantra不但具备类似于BurpSuite截断代理的功能,在某些条件下甚至还可以当作一个自动扫描器来使用。但mantra的作者表示:仅依赖浏览器是无法完成所有WEB漏洞挖掘的。
webscarab
webscarab是一个由JAVA语言开发的截断代理型的WEB安全检测工具,曾经是由OWASP组织开发并维护的。我们课程的同学可能还记得,ZAP也是由OWASP组织开发的同类型WEB安全工具。随着ZAP功能的不断强大和丰富,最终OWASP组织在Kali Linux诞生之前就已经停止了webscarab项目,但Kali还是收录了这款工具。
websploit
自从MSF诞生之后,很多人都尝试模仿它来打造自己的漏洞利用框架,websploit就是其中之一。因此其命令格式和操作界面都与MSF非常相似,甚至有些漏洞利用模块也是直接调用MSF的。websploit基于python语言开发,面向的漏洞类型并不仅限于WEB方向,但本质上其并未全新实现任何漏洞利用功能,更多是调用已有开源工具。由于缺乏及时维护,其某些模块已失效。
sqlmap
看过很多介绍sqlmap的技术文章和教程,但似乎并没有谁能将其所有功能和参数全部清晰呈现,因此本课我试图弥补这一空白。sqlmap是一个由python语言编写的SQL注入漏洞检测工具,它强大的检测引擎和丰富的功能特性,几乎适合所有SQL注入漏洞的检测场经。除漏洞检测之外,sqlmap还包含对漏洞的利用验证能力,脱裤、文件访问、系统指令执行等无一不包,这些都使其成为了该领域必知必会必备的工具。
wfuzz
Fuzz即模糊测试,其原理是向应用程序发送各种随机、半随机的数据,并根据程序对随机数据的处理结果来判断程序是否漏洞,其中用于大量发送随机数据的工具称为Fuzzer。wfuzz是一个专门针对WEB服务的Fuzzer程序,它功能全、速度快、可扩展、灵活性高、使用简单,它可以向WEB服务的任何数据入口提交数据。虽然在结果数据的过滤上wfuzz存在一定瑕疵,但它仍然是该领域最优秀的工具。
xsser
与其他威胁服务器安全的漏洞类型不同,XSS漏洞攻击的对象不是服务器端,而是网站的最终用户。由于攻击者发动攻击所利用的漏洞让然存在于服务器上,所以我们称之为跨站;另外,由于攻击是通过客户端脚本语言最终实现的,所以XSS被称为跨站脚本。xsser是一个XSS漏洞的检测和利用框架,它支持命令行和GUI两种方式,并且内建多种WAF的绕过技术,免去了手动bypass的繁琐。
beef
Browser Exploitation Framework简称BeEF,是一个由ruby语言编写的浏览器攻击框架。它适用于多种应用场景,具体包括结合XSS漏洞、中间人、社会工程学、链路劫持等手段实现攻击。BeEF首先通过注入的hook脚本与受害者浏览器建立连接,并以此作为进一步攻击客户端的滩头阵地,不断向浏览器植入新的攻击向量,甚至可以最终实现对客户端计算机的完全控制。