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