《黑客秘笈——渗透测试实用指南》—第2章2.4节Web应用程序的扫描

本文涉及的产品
.cn 域名,1个 12个月
简介:

本节书摘来自异步社区《黑客秘笈——渗透测试实用指南》一书中的第2章2.4节Web应用程序的扫描,作者【美】Peter Kim(彼得 基姆),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 Web应用程序的扫描
黑客秘笈——渗透测试实用指南
网络扫描器、Peeping Tom可大致揭露测试目标的网络构造。在此之后,我们就可以进行Web应用程序扫描了。本文主要围绕Burp Suite程序讨论Web应用程序的扫描方法。确实有许多开源、免费的工具可进行Web应用程序扫描,例如ZAP、WebScarab、Nikto、w3af等程序都很不错。但是我们有必要再次强调一下,渗透测试的工具应当是速度最快、扫描结果最好的测试工具。虽然Burp Suite专业版(http://portswigger.net/burp/)是款付费工具,但是其价格仅需300美元。不仅其作者积极地进行着更新,许多的安全研究人员还在为其开发各种插件,而且它还有许多用于手工测试的评估功能。综合来看,它无疑是我们的最佳选择。

2.3.1节没有逐一介绍漏洞扫描工具,这里也不会详细介绍Web应用程序的渗透测试工具,而会侧重性地介绍适合大多网络渗透测试的测试步骤。如果要对某个Web应用程序(网站源代码)进行全面测试,您就要进行源码分析(利用HP Fortify之类的软件)和深入的程序测试(The Web Application Hacker’s Handbook:Finding and Exploiting Security Flaws是个不错的选择)。现在,我们一起来了解如何高效使用Burp Suite吧。

2.4.1 Web应用程序的扫描流程
本节将介绍使用专业版的Burp Suite程序扫描Web应用程序的具体方法。一般来说,网络渗透测试的时间都很紧张,我们无法对Web应用程序进行完备的测试。在扫描大型Web应用程序的时候,我通常按照如下步骤进行测试。

用Burp Pro进行Spider(爬取)/Discovery(挖掘)/Scanning(扫描)。
用Web应用程序扫描器进行扫描。
手动注入参数。
Session令牌分析。
2.4.2 Web应用程序的扫描工具
在使用Nessus或者Nexpose找到常见的操作系统、应用程序、网络服务的漏洞之后,就应当针对应用程序进行深度测试了。本节将讲述使用Burp Suite深入测试Web应用程序的具体方法。有关的测试步骤如下。

1)配置网络代理

2)开启Burp Suite

3)对应用进行爬取(Spider)

4)对内容进行挖掘

5)进行主动扫描

6)漏洞利用(exploit)

1.配置网络代理和浏览器
Burp Suite应当作为Web浏览器和Web应用程序的通信通道来用。只有这样,它才可以清楚地获取浏览器发送的各种请求,您才可以对原始请求进行修改,而不顾忌客户端的保护机制。

首先,无论您的测试平台安装的是Windows系统还是Kali系统,您都要通过JAR程序启动Burp Suite(见图2.14)。启动程序之后,您还要开启Burp的代理服务器功能,使其在8080端口提供代理服务。即在Burp的Proxy→Options标签中,确保Burp处于运行状态。其实代理服务器程序工作于哪个端口都无关紧要,关键在于更改默认的端口设置时,要确保浏览器的代理服务器配置和Burp Suite的设置一致。


14cefdda4982b1bed6c0d9a07083c729cd817c21

接下来,我们调整Web浏览器的设置,让它使用Burp提供的网络代理功能。本文使用的Firefox插件是Foxy Proxy(http://addons.mozilla.org/en-US/firefox/addon/foxyproxy- standard/)。我们在1.1.3节介绍过它的安装方法。我们可以在Foxy Proxy中设置多个代理,并通过它快速地切换代理服务器。在浏览器地址栏的右边,有个带有圆圈、横线和狐狸的图标。单击这个图标,选中Add New Proxy,选中Proxy Detail标签,将Manual Proxy Configuration设置为本机127.0.0.1,代理端口设为8080。再回到General标签,为代理设置一个名字,保存配置即可(见图2.15)。


07fe18de6d191725facc2702cc6929d302754132

上述操作把浏览器的所有流量转发到本机的8080端口。这个端口应当是您刚才配置的Burp Suite的监听端口。Burp会接收这些流量,再把它转发给Internet。

在您保存了代理服务器的设置后,右击Foxy Proxy的图标,选择代理服务器的配置。在本例中,将代理的配置命名为Burp Suite,并且选用了这个配置(见图2.16)。


a5eb53718bf8ec231ec7881dc1a4b7481c715630

为浏览器配置好了代理设置之后,我们再来浏览先前挑选出来的Web应用程序。这里以我的网站www.securepla.net 进行说明。如果我们再切换到Burp程序,此时,可以看到Proxy/Intercept标签变亮了(见图2.17)。

如果配置无误,您应当能看到图2.17所示的效果。我们可以看到Burp捕获到了GET请求,同时也能看到cookie和其他请求信息。在默认的情况下,如果使用程序的最初设置,Burp会截获(Intercept)所有的流量。即Burp Suite会拦下Web浏览器发向Web应用程序的浏览请求,您可以读取或者修改它们,然后再将请求转发出去或者直接丢弃掉。


7931f1526b19ee5b032250e1eef79730021ec996

也就是说,默认情况下您是无法正常浏览网站的,除非您关闭掉Intercept(拦截)按钮。因为请求被拦截了下来,所以浏览器获取不到服务器的任何应答。在关闭Intercept按钮后,我们仍可捕获所有Web流量,不过这样一来我们就不能修改浏览器发送的请求数据了。关闭拦截功能之后,我们仍然可以在Intercept右侧的History标签中看到所有的浏览器请求和服务器应答。

现在,我们切换到Target标签,查看我们处理和转发的URL。首先,我们把网址添加到Scope中。Scope定义了进行自动抓取、测试的范围,帮您过滤掉扫描范围之外的域名。后文再对这个过滤功能将进行细致的介绍。现在,先将所有您想测试的URL或者FQDN添加到Scope中。在图2.18中,右击域名,选择Add to scope。


ec296ea9fbf18faf8b49468f7c1c951073c3605b

2.爬取Web应用程序
测试Web应用程序的第一步是爬取网站。即是说,我们首先要用Burp对整个网站进行爬取,记录其上的所有种类的文件、表格、HTTP方法等。我们要通过爬取手段知道网站都有哪些链接、使用了什么样的参数、都链接到了哪些外部的网站,进而了解Web应用程序的大致功能。

如欲爬取Web应用程序的页面,可单击Target→Site map标签,然后右键单击要爬取的域名,然后单击Spider this host,如图2.19所示。


b563a6cd0ae1b72bacd01de96d8e856d43083c0b

待其完成爬取网站的操作之后,Burp就会分析出Web应用程序的大致布局。如图2.20所示,单击任何文件,就能看到对应的请求和应答。在程序的左栏里可以看到网站全部的文件和文件夹,右栏里可看到浏览器请求和服务器应答。在Site map标签的正下方是执行过滤功能的Filter按钮。您可以通过它筛选出对渗透有价值的内容。通常,我先将所有的域名添加到Scope中,然后单击Filter按钮,设置程序令其只显示Scope中的内容。这样,就可以让Burp过滤掉不在测试范围内的大量内容。

3.深入挖掘网站内容
某些情况下,您无法直接通过Web应用程序(网站)的链接找到某些网页和文件夹。例如,一些网站上就没有admin文件夹或者登录页面的链接。但是,只要您在浏览器的地址栏里输入/admin/folder,就可以看到admin认证页面。爬取网站的操作阶段可能会漏掉这些信息。因为常规用户不应当看到这些内容,所以主机管理员通常会隐藏这些文件夹和管理登录页面的链接。然而渗透测试恰恰就要寻找这些内容,以便绕过认证,或者对这些认证页面进行暴力破解。


f902491abbafed2bfabf1a47ca286abf3d8f1676

Burp里专门有个专门应对此类场景的模块。同样是在Site map标签中,我们右击上级网址,然后在下拉菜单中选择Engagement tools,最后单击Discover content(见图2.21)。

c221f1adb9c8750bb22406a6d6f3a81dd92a8d37

在Discovery模块中,单击Session is not running按钮。此后,Burp就会对文件夹和文件结构进行智能暴力破解(smart brute forcing)。这里所说的智能暴力破解,是指Burp会根据它在应用中所找到的文件、文件夹,做出动态的选择,来进行更好的暴力破解。它能够快速地鉴别文件、文件夹,更好地帮助您进行应用程序测试。

在我自己进行安全评估时,我更喜欢使用一些专门定制的字典。我不知道现在是不是有人还在维护RAFT项目的字典。几年之前,确实有一帮小伙子开发出了常见文件夹名和文件名的字典——RAFT,他们那时还会定期更新。这个项目发布了各种不同的字典。您可根据自己的测试范围情况选用相应的字典。他们发布字典的网址是http://code.google.com/p/raft/source/browse/trunk/data/wordlists/?r=64

从图 2.22 中可以看到,Discovery 工具发现了文件夹/wp-includes/。这个文件夹通常是WordPress程序的目录。然后,它在那个文件夹中搜索常见类型的文件夹和文件。您可以单击Discovery模块顶端的Site map标签,查看所有的扫描到结果。这样就能快速地发现那些隐藏的文件夹、管理页面、配置页面,以及其他对测试有帮助的页面。


df74bf8297bc66c494a745266e1062285e42d2b5

4.主动式漏洞扫描
如果您已经掌握了目标网站的大致情况,就可以调整参数或请求,以查找它们的漏洞。右键单击上级域名,选择Active scan this host(见图2.23),即可启动Burp的应用程序扫描器,对网站进行模糊测试。这种扫描会造成极大的网络流量,会对Web应用程序发起大量查询。有一点需要注意,如果被测网站有评论功能,在进行模糊测试的时候,Web应用程序可能会给客户发送海量的E-mail邮件。所以,在主动测试之前,务必要让您的客户了解这些情况。

4bc788d79d0370dcd9fbc035430d508b9639b37e

启动扫描器后,您可在Scanner标签里查看扫描结果,以及将要进行的测试队列。您可能需要在Scanner标签下的Options标签中,对Burp Suite的选项进行深入地调整。我通常会增加Active Scan Engine的线程数,以减少扫描时间。虽然增加线程可显著地缩短扫描时间,但是过高的线程数量也可能把小型网站直接拖垮。

扫描结果表明,Burp Suite发现了该网站的一个XSS漏洞。它清楚地描述了问题所在、触发的请求,以及相应的服务器应答(见图2.24)。


e1d3e2d27be7c6878b512324c4b4bfad42bf80f1

渗透测试人员不仅要排除全部的误报,并且要验证漏洞的严重程度。所以我们要验证Burp找到的问题是否真的存在。单击扫描结果中的某个XSS漏洞,可以看到所触发漏洞使用的GET参数。接下来,我们要访问这个网址,再现这个问题:

http://www.securepla.net/xss_example/example.php?alert=9228a%3Cscript%3Ealert(1)%3C/script%3E281717daa8d%3C/script%3E281717daa8d)

打开浏览器之后,我们输入这个URL。如图2.25所示,网页信息证明了这个警告不是误报,是一个客观存在的漏洞。如果您尚未熟悉XSS攻击,可花些时间来了解像WebGoat这类的进行Web漏洞实验的应用平台:


aeada1eacbfa2821346bcc7d6d2ae8fe7b2db0ab

除了检测XSS漏洞之外,Burp还可以识别CSRF问题、无效SSL证书、目录遍历漏洞、SQL注入、命令注入等。关于Burp的详细使用方法,可参考4.1节。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
99 5
|
1月前
|
安全 网络安全
Kali渗透测试:使用Armitage扫描网络
Kali渗透测试:使用Armitage扫描网络
|
19天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
12天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
15天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
13 0
|
19天前
|
人工智能 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
|
1月前
|
安全 Linux Shell
Kali渗透测试:使用Metasploit对Web应用的攻击
Kali渗透测试:使用Metasploit对Web应用的攻击
|
1月前
|
安全 Linux 网络安全
Kali渗透测试:远程控制程序基础
Kali渗透测试:远程控制程序基础
Kali渗透测试:远程控制程序基础
|
1月前
|
安全 Java Linux
Kali渗透测试:通过Web应用程序实现远程控制
Kali渗透测试:通过Web应用程序实现远程控制
|
2月前
|
jenkins 测试技术 持续交付
自动化测试的高效之路:如何利用Python进行Web应用测试
【9月更文挑战第13天】在软件开发的快节奏中,自动化测试是确保质量和效率的关键。本文将引导你了解如何使用Python语言及其强大的测试框架来提升Web应用的测试效率。我们将一起探索编写简洁而强大的测试脚本的技巧,以及如何通过持续集成(CI)实现自动化测试流程。准备好让你的测试工作飞一般的感觉!