目录
1.使用Nmap进行扫描和识别应用服务
Nmap 是世界上使用最多的端口扫描器,它可以用于识别活动主机、扫描TCP和 UDP开放端口、检测防火墙、获取在远程主机上运行的服务版本,甚至使用脚本发现和利用漏洞。(除了Nmap,这个世界上还有一个据说在端口扫描领域更强的zmap)
在此小节中,我们将使用Nmap 来识别在目标应用服务器上运行的所有服务及版本,为了方便学习,我们将在对Nmap的几次演示中进行此操作,也可以使用一条命令完成。
准备
我们需要让我们的靶机vM_1运行起来。
实战演练
本小节的所有任务都可以通过一个命令来完成,为了更好的说明它们的功能和结果,这里分别展示了它们:
首先,我们想要知道服务器是否响应ping,或者主机是否是启动状态:
#nmap -sn 192.168.56.11
现在,我们可以知道这个主机是在启动的状态,让我们看看它的哪些端口是打开的:
nmap 192.168.56.11
现在我们将告诉Nmap向服务器询问它正在运行的服务版本,并且据此来猜测操作系统:
# nmap -sV -0 192.168.56.11
我们可以看到,我们的 VM_1很可能是一个Linux操作系统(Nmap无法准确的确定它)。它使用Apache 2.2.14 web服务器、PHP 5.3p1、Jetty 6.1.25等等。
原理剖析
Nmap是一个端口扫描器;这代表着它将数据包发送到指定IP地址上的一些TCP或UDP端口,并且检查是否有响应。如果有,则表示端口是开放的,即服务在该端口上运行。
在第一条命令中,对于-sn参数,我们指示Nmap只检查该服务器是否响应ICMP请求(或者是ping)。我们的服务器给出了响应,所以该主机是在存活状态的。
第二个命令是调用Nmap最简单的方法,它只指定目标IP地址。它所做的是ping服务器,如果它做出响应,那么Nmap将向1000个TCP端口的列表发送探测器,以查看哪个端口响应以及如何响应,然后它报告结果,显示哪些端口是打开的。
第三条命令在第二条命令的基础上添加了以下两个参数:
-sV:请求找到每个开放端口banner-header或自我标识,也就是每个端口运行服务的版本。-0:告诉Nmap尝试使用从开放端口和版本信息的信息来猜测目标上运行的操作系统。
2.识别web应用防火墙
Web应用程序防火墙(WAF)是一种设备或软件,它检查发送到web服务器的包,以便识别和阻止那些可能是恶意的包,通常基于签名或正则表达式
如果未检测到的WAF阻塞了我们的请求或禁止了我们的IP地址,我们最终可能会在渗透测试中要处理很多问题。在执行渗透测试时,侦察阶段必须包括WAF、入侵检测系统(IDS)或入侵预防系统(IPS)的检测和识别。这是需要采取必要措施防止被这些保护装置屏蔽或禁止的。
在这个小节中,我们将使用不同的方法,以及Kali Linux中包含的工具,来检测和识别目标和我们之间是否存在web应用程序防火墙。
Nmap有几个脚本可以来测试WAF中是否存在于所有检测到的HTTP端口.让我们来尝试一下
# nmap -sT -sV -p 80,443,8080,8081 --script=http-waf-detect 192.168.56.11
看起来没有WAF来保护这个服务器
现在,我们在有防火墙保护的服务器上尝试相同的命令。在这里,我们使用example.com来!椅虚构的名称;可以来尝试任何受保护的服务器。
# nmap -p 80,443 --script=http-waf-detect www.example.com
Nmap还有一个脚本可以帮助我们来更准确地识别正在使用的 WAF。这个脚本是:
http-waf-fingerprint
# nmap -p80,443 --script=http-waf-fingerprint www.example.com
Kali Linux中还有另一个工具,可以帮助我们来检测识别WAF的工具,就是wafw00f。假如www. example.com是一个受WAF保护的网站。
# wafw00f Example Domain
它是怎么工作的
WAF检测的工作原理是向服务器发送特定的请求,然后分析响应;例如,在HTTP WAF检测的情况下,它发送一些恶意的数据包,并且在寻找数据包被阻止,拒绝或者检测的指示符时比较响应。HTTP WAF
指纹也会出现同样的情况,这个脚本也尝试解释这种响应,并且根据已知的 IDSs和WAF,对其分类,同样也适用wafw00f。
3.识别HTTPS加密参数
在某种程度上,我们习惯于假设,当连接使用带有SSL/TLS加密的HTTPS时,它是安全的,任何拦截它的攻击者只会收到一系列无意义的数字。当然,这可能不是绝对正确的,这需要正确地配置HTTPS服务器,以提供强大的加密层,并保护用户免受中间人(MITM)攻击或密码分析。在SSL 协议的实现和设计中发现了许多漏洞,并且发现其继任者TLS在某些配置下也很脆弱,因此在任何web应用程序渗透测试中都必须对安全连接进行测试。
在这小节中,我们将使用诸如Nmap、SSLScan和TestSSL 等工具来分析服务器的配置(从客户机的角度),以确保其安全通信。
我们将在此项目中使用的工具之一TestSSL,他在Kali Linux中并没有默认安装,但是可以在它的软件存储库中使用。我们需要配置我们的KaliVM 来使用NAT网络适配器以允许它进行internet访问,并在终端中执行以下命令:
(1)安装TestSSL
# gitclone https://github.com/drwetter/testssl.sh.git
(2)运行TestSSL
# cdtestssl.sh
# ./testssl.sh Web的IP地址或者URL
在安装TestSSL后,将网络适配器保持为NAT模式,以便你可以与脆弱的虚拟机通信。
根据我们在前面的项目中所做的扫描,VM_1有一个运行在端口443上的 HTTPS服务,来让我们看看它是否安全:
1.使用Nmap查询HTTPS站点支持的协议和密码,我们需要扫描HTTPS端口并使用脚本ss1-enum-ciphers
# nmap -sT -p 443 --script ssl-enum-ciphers 192.168.56.11
SSLScan是一个命令行工具,用于评估服务器的SSL/TLS配置。要使用它,我们只需要添加服务器的IP地址或主机名(sslscan 192.168.56.11):
3.TestSSL 显示了比Nmap或SSLScan更详细的输入,它的基本用法只需要我们将目标附加到命令行中的命令。它还允许导出输出到多种格式,如cSv 、JSON或HTML
(root@kali :~# ./testssl.sh/testssl.sh 192.168.56.11):
原理剖析
Nmap、SSLScan和TestSSL通过尝试不同的密码套件和客户端配置来测试它接受什么,从而建立到目标HTTPS 服务器的多个连接来工作。在这三个工具所显示的结果中,我们可以看到一些可以放置加密通信的问题:
使用SSLv3。SSL 协议自2015年以来就被弃用了,它有固有的漏洞,使得它容易受到多种攻击,比如Sweet32(https://sweet32)POODLE (https://www.openssl.org/~bodo/ssl-pood1e.pdf)
使用RC4和 DES密码以及SHA和MD5哈希。RC4和 DES加密算法现在被认为是加密能力较弱的,SHA和MD5哈希算法也是如此。这是由于现代计算机处理能力的提高以及这些算法可以在相当长的一段时间内被攻破的事实。
使用TLS1.0。TLS是SSL 的后续版本,其当前版本为1.2。虽然TLS 1.0 仍然被认为是可接受的,但是在服务器中允许TLS 1.0被认为是一种糟糕的实践或安全问题。
证书是自签名的,使用弱签名算法(SHA1),RSA密钥不够强大(1024位)。当浏览器使用HTTPS连接到服务器时,它们交换关于浏览器可以使用哪些密码以及服务器支持哪些密码的信息,然后同意使用两者共同的更高的复杂性。如果MITM攻击是针对配置不佳的HTTPS服务器执行的,攻击者可以通过客户端只支持最弱的密码套件(比如SSLv2上的56位DES)来欺骗服务器,然后攻击者截获的通信将用一种算法加密,这种算法可能在几天或几个小时内就会被现代计算机破坏。
4.使用浏览器自带开发工具来做基本的分析和修改
Firebug是一个浏览器的插件,使用它可以分析网页的内部组件,比如<table>、CSS和<frame>,也可以用它查看当前网页的DOM对象,错误代码和浏览器与服务器之前的交互(请求和响应)信息。
在之前的章节中,我们通过查看HTML源代码的手段发现了隐藏在<input>标签中用来限制文本输入长短的值values,在这个章节中,我们将使用火狐浏览器的Firebug插件或者是OWASP的Mantra,来实现同样的功能。
确保VM_1正常工作的情况下,在你的Kali VM中打开浏览器访问http://192.168.56.11/WackoPicko
1.在网页上右键-审查元素(Inspect Element)
提示:还可以使用F12或者Ctr1+Shift+C来打来浏览器的开发者工具。
在<form>表单的第一个<input>上有一个type="hidden",双击选中hidden标签:
将hidden更改为text或者删除type="hidden"并按下“Enter”;
现在,双击 value的参数3000;
将3000改为500000:
现在我们可以在页面上看到一个value为 500000的全新的文本输入框,这是因为我们刚才的操作更改了限制文档大小的关键参数。
原理剖析
当网页被浏览器加载后,那么针对它网页元素所做的所有修改都会被即时展现出来,但是一旦刷新当前页面,那么真对元素所做的所有修改都将不复存在,它只会展示服务器传送过来的原有页面。
开发人员工具可以直接修改展现在浏览器中的任何元素,所以遇到需要修改控件的地方,就可以使用这个工具。
5.获取和修改cookie
Cookie是Web服务器发送给浏览器的一小段与特定用户相关的信息,它被存储在本地。在现代web应用中,cookie被用来存储特定用户的数据,比如颜色主题配置,已经设置好的选项,之前的活动内容,最重要的是会话标识。
在这个小节中,我们将使用浏览器工具来查看cookie值,它们是怎样被存储,以及怎样被修改的。
首先把我们的VM_1虚拟机运行起来,假如该虚拟机的IP地址为192.168.56.11。接下来将使用firefox 作为我们的浏览器。
在Firefox中,默认情况下不会启用开发者工具中的存储选项卡,要想启用它,先打开开发者工具(可以按F12),然后进入工具箱选项(右边的齿轮图标)。开发者工具默认勾选了存储箱。
要查看和编辑cookie 的值,我们可以使用开发者工具或第一章中被安装的cookie管理器插件。设置好Kali和测试环境,让我们试试这两种方法:
1.浏览器访问http://192.168.56.11/WackoPicko/2.打开开发者工具,进入存储选项卡(Storage):
我们可以通过双击cookie值来修改成任意cookie
现在,我们试试使用插件查看并编辑cookie。在 firefox的顶栏中点击cookie管理器(CookieManager)图标。
在上面的图片中,我们可以看到服务器给浏览器分配的cookie值,我们可以修改它们,删除它们,或添加新cookie
选择192.168.56.11分配给我们的phpsessid并双击编辑它
Http0nly参数选择为yes
我们修改的HttpOnly是告诉浏览器这个cookie不允许被客户端脚本访问。
原理剖析
Cookie Manager是一个可以查看、修改、添加、删除cookie的浏览器插件,由于一些web应用依赖这些存储的cookie值,所以攻击者可以通过注入恶意cookie来改变服务器行为或者修改虚假cookie来获得更高的权限。
另外在现代web应用中,会话cookie也经常被使用,并且经常被作为登陆后的唯一凭证。这就导致替换已激活的cookie可以模拟成其他有效用户的会话。
6.利用robots.txt
更进一步,我们需要弄清楚站点中是否有任何页面或目录没有链接到向晋趣用尸显示的内谷,例如,到内部网或内容管理系统(CMS)的登录页面。找到类似的站点将大大扩展我们的测试表面,开为我们提供关于应用程序及其基础结构的一些重要线索。
在这小节中,我们将使用robots.txt文件,用于发现一些在主要应用程序中无法链接到的文件和目录。
为了说明渗透测试如何利用robots.txt。我们将在VM_1中使用vicnum,这是一个脆弱的web应
用程序,它包含三个数字和单词猜测游戏。我们将使用通过robots.txt获得的信息。为了增加我们赢得这些比赛的机会:
浏览器打开http://192.168.56.11/vicnum/
现在,我们添加robots.txt 到URL 中,我们将看到如下结果:
这个文件告诉搜索引擎,对于每个浏览器(用户代理),不允许对目录jotto和cgi-bin进行索引。然而,这并不意味着我们不能浏览它们。
让我们打开http://192.168.56.11/vicnum/cgi-bin/
我们可以单击并直接导航到任何Per1脚本(.pl文件)在这个目录中。
让我们打开http://192.168.56.11/vicnum/ jotto/
单击名为jotto的文件,你将看到类似下面的截图:
jotto是一个猜五字的游戏,这可能是答案的列表吗﹖使用列表中的单词作为答案进行游戏,我们已经破解了这个游戏:
原理剖析
Robots.txt是web服务器用来告诉搜索引擎他们应该索引的目录或文件以及他们不允许查看的内容的文件。从攻击者的角度来看,这告诉我们服务器中是否有一个目录是可以访问的,但是通过隐藏的方式将其隐藏起来(也就是说,假设用户不知道某个目录的存在,他们就不会发现这个目录)。