All Articles

【Easy/Windows】Optimum Writeup(HackTheBox)

「Hack The Box」という、ペネトレーションテストの学習プラットフォームを利用してセキュリティについて学んでいます。 「Hack The Box」のランクは、本記事執筆時点でProHackerです。

Hack The Box

今回は、HackTheBoxのリタイアマシン「Optimum」のWriteUpです。

image-70.png

本記事について

本記事の内容は社会秩序に反する行為を推奨することを目的としたものではございません。

自身の所有する環境、もしくは許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があること、予めご留意ください。

またすべての発言は所属団体ではなく個人に帰属します。

もくじ

探索

とりあえずいつも通りNmapのスキャンをかけました。

Starting Nmap 7.92 ( https://nmap.org ) at 2021-10-27 20:22 JST
Nmap scan report for 10.10.10.8
Host is up (0.30s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
80/tcp open  http    HttpFileServer httpd 2.3
|_http-title: HFS /
|_http-server-header: HFS 2.3
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 42.09 seconds

どうやら、HttpFileServer httpd 2.3というアプリケーションが稼働しているようです。

ググったらすぐにエクスプロイトコードが出てきました。

参考:HFS (HTTP File Server) 2.3.x - Remote Command Execution (3) - Windows remote Exploit

これをそのまま使えばリバースシェルが取得できます。

脆弱性について

このエクスプロイトコードで悪用している脆弱性はCVE-2014-6287でした。

The findMacroMarker function in parserLib.pas in Rejetto HTTP File Server (aks HFS or HttpFileServer) 2.3x before 2.3c allows remote attackers to execute arbitrary programs via a %00 sequence in a search action.

%00を検索ボックスに入れると任意のコード実行ができる模様。

脆弱性のカテゴリとしては、CWE-158: Improper Neutralization of Null Byte or NUL Characterに該当します。

このケースでは、parserLib.pasの正規表現にNULLバイトを処理しない問題が存在しており、検索ボックスに%00が入力された場合、それに続くコマンドが実行されてしまうという脆弱性でした。

この脆弱性を悪用することでリバースシェルが取得できました。

内部探索

とりあえずwinpeasを実行しました。

Basic System Information
Check if the Windows versions is vulnerable to some known exploit https://book.hacktricks.xyz/windows/windows-local-privilege-escalation#kernel-exploits
    Hostname: optimum
    ProductName: Windows Server 2012 R2 Standard
    EditionID: ServerStandard
    ReleaseId: 
    BuildBranch: 
    CurrentMajorVersionNumber: 
    CurrentVersion: 6.3
    Architecture: AMD64
    ProcessorCount: 2
    SystemLang: en-US
    KeyboardLang: English (United States)
    TimeZone: (UTC+02:00) Athens, Bucharest
    IsVirtualMachine: True
    Current Time: 3/11/2021 1:02:07 ??
    HighIntegrity: False
    PartOfDomain: False
    Hotfixes: KB2959936, KB2896496, KB2919355, KB2920189, KB2928120, KB2931358, KB2931366, KB2933826, KB2938772, KB2949621, KB2954879, KB2958262, KB2958263, KB2961072, KB2965500, KB2966407, KB2967917, KB2971203, KB2971850, KB2973351, KB2973448, KB2975061, KB2976627, KB2977629, KB2981580, KB2987107, KB2989647, KB2998527, KB3000850, KB3003057, KB3014442, 

  [?] Windows vulns search powered by Watson(https://github.com/rasta-mouse/Watson)

64bitのWindowsServer2012 R2であることがわかりました。

Watsonによる脆弱性検索はWindowsServer 2016以降でしか動作しないので、Sherlockを使って探索します。

この3つの脆弱性の影響下にあることが確認できました。

Title      : Secondary Logon Handle
MSBulletin : MS16-032
CVEID      : 2016-0099
Link       : https://www.exploit-db.com/exploits/39719/
VulnStatus : Appears Vulnerable

Title      : Windows Kernel-Mode Drivers EoP
MSBulletin : MS16-034
CVEID      : 2016-0093/94/95/96
Link       : https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-034?
VulnStatus : Appears Vulnerable

Title      : Win32k Elevation of Privilege
MSBulletin : MS16-135
CVEID      : 2016-7255
Link       : https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sample-Exploits/MS16-135
VulnStatus : Appears Vulnerable

MS16-032

Secondary Logon がメモリ内の要求ハンドルを適切に管理しない脆弱性であり、管理者権限での任意のコード実行ができます。

参考:Microsoft Security Bulletin MS16-032 - Important | Microsoft Docs

「Secondary Logon」とは、別の資格情報でプロセスの開始を有効にするサービスで、「別のユーザとして実行する」機能で利用するサービスです。

MS16-034

Windowsのカーネルモードドライバのメモリ内のオブジェクト管理の脆弱性で、任意のコード実行が可能になるそう。

参考:マイクロソフト セキュリティ情報 MS16-034 | Microsoft Docs

エクスプロイトはこれ

MS16-135

ASLRの回避につながるカーネル内の情報が漏洩する脆弱性のようです。

参考:マイクロソフト セキュリティ情報 MS16-135 | Microsoft Docs

PowerShellのセッション

MS16-032とMS16-034が管理者権限でのRCEが可能な脆弱性なので、このどちらかを使っていきます。

エクスプロイトコードを探したときに、MS16-032のPowerShellから実行できるスクリプトが見つかったので、こちらを利用していきます。

まず。MS16-032は、64bitプロセスでしか悪用できません。

そのため、リバースシェルを取得しているプロセスについても64bitである必要があります。

現在稼働しているプロセスが64プロセスかどうかは、.NETコマンドを使って簡単に特定することができます。

[Environment]::Is64BitProcess

参考:Environment.Is64BitProcess Property (System) | Microsoft Docs

64bitと32bitのPowerShellのパスは以下の通りなので、覚えておくと何かの役に立つかも。

  • 64bit PowerShell : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • 32bit PowerShell : C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

以下の表は、CPU/OS/アプリケーションのbit数と実行されるプロセスのbit数の組み合わせです。

CPU OS プロセス
32bit CPU 32bit 32bit 32bit
32bit OS 64bit 32bit 32bit
32bit アプリケーション 64bit 64bit 32bit(WOW)
64bit アプリケーション 64bit 64bit 64bit

今回は、CPUとOSのアーキテクチャは64bitですが、32bitのPowerShellを実行すると、プロセスも32bitになってしまいます。

というわけで、64bitプロセスのリバースシェルを取った状態でMS16-032のエクスプロイトをぶっぱなすとrootが取得できました。

まとめ

ハッキングを真面目に勉強しようと思ったので、とりあえずリタイアマシンを解きまくっていきます。