TryHackMeのCorpというマシーンのWriteup。

Corpについて
基本的にウォークスルーで進行。
かなり短めのマシンなので、早いと1時間ほどで終了する。
内容は、シンプルなWindowsディレクトリ実行権限系の話(AppLockerの回避)と、KerberoastingでのActiveDirectory攻撃。
そして、PowerUp.ps1を使ったUnattendedの読み取りによる権限昇格。
Task1:Deploy the Window machine
このTaskは準備段階に関することのみなのでパス。
Task2:Bypassing Applocker
Question1:AppLockerを回避して任意のバイナリを動かす
AppLockerはご存じのとおりWindowsの機能のひとつで、実行ファイルを起動させない仕組み。
Corpマシンの説明文でもこのように画像表示がある。

青い画面はおなじみのことだろう。
このAppLockerをバイパスする方法はいろいろあるようだが、Corpで取り上げるのはデフォルトルールの脆弱性。
デフォルトでは、
C:¥Windows\System32\spool\drivers\color\
のディレクトリ内はホワイトリストに入っているため、ここに実行ファイルを保存することでAppLockerを回避できる。(ことがある)
今回のマシンでは、ターゲットを起動すると自動的にターゲット端末にログインした画面が表示される。
まずは上に記載のドライブに移動してコマンドプロンプトで何らかのexeをダウンロードする。

これを実行すればOK。
(msfvenomで作ったリバースシェルバイナリを送ったせいでDefenderに遮断されたので、実行結果はなし…)
Question2:ConsoleHost_historyにアクセスしてflagゲット
マシンの説明文によると、
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
には、Powershellの過去のコマンドヒストリーがあるそう。
こちらにアクセスする。

ということでflagゲット。
急にフォレンジック要素が出てきてビビる。
Task2:Kerberoasting
Question1:SPNの中に含まれているユーザー名は?
ActiveDirectoryの代表的な脆弱性として、Kerberoastingがある。
SPNというリスト内にユーザー名が含まれているとき、パスワードを読み取られる脆弱性があるというもの。
ログイン中の画面でコマンドプロンプトを開き、コマンドを実行する。
コマンドの中身はSPNの中のアカウントを全部出力するというもの。
>setspn -T medin -Q */*

これを確認したところ、
HOST/fela@corp.local
があり、ユーザー名が含まれていた。
Question2:SPNチケット(ハッシュ)をゲットする
SPNユーザー名がわかったため、次はSPNチケットを入手する。
入手にはPowerShellスクリプトを使う。
今回使うのはInvoke-Kerberoast.ps1だが、kaliであれば最初から入っているので以下のコマンドで検索し、そのディレクトリでWebサーバを稼働させておく。
$find / -iname *kerberoast.ps1* 2>/dev/null
次に、ターゲット端末上でPowerShellコマンドを使い、Invoke-Kerberoast.ps1を遠隔で読み込む。

パスワードハッシュを後から解析するが、それにはhashcatを使うので、オプションで明示的にhashcat形式を指定しておく必要がある。(マシンの解説文では、Invoke-Kerberoast -OutputFormat hashcat |fl が正解だが、上のコマンドでもOK)
Question3:パスワードを解析
このデータをコピペでもできれば簡単だが、RDPの仕様なのかうまくいかなかった。
そのためSCPを使って転送をする。
まずはkali側でSSHを起動させておく。(デフォルトではログオン時に起動しない設定)
$sudo systemctl start ssh
次に、Invoke-Kerberoastの結果をテキストにして転送する。

受信したテキストファイルをKali側で開こうとすると文字化けすることがあるが、その原因は文字コードがUTF-16のため。
そういう時はiconvコマンドで変換すればOK。
テキストファイルの中身を確認すると、Hashの先頭が特徴的な文字列と分かる。
これをHachcatのサンプルサイトで検索する。
すると、「Kerberos 5, etype 23, TGS-REP」というハッシュ形式だとわかる。
余計な文字を削ってHashだけにしたテキストを作り、hashcatで解析する。

ということでパスワードをゲットした。
Question4:新しいユーザーでログインしてフラグゲット
ユーザ名とパスワードが分かったのでログインをする。
Linux用RDPソフトとして定番のremminaを使う。

ログインに成功すれば、デスクトップにflagがあるのでゲットするのみ。
Task4:Privilege Escalation
Question1:デコードされたパスワードは?
今回は権限昇格として、Unattendedを使う。
Unattendedはadminパスワードが載っているxmlだが、残念なことに一般ユーザーではアクセスできない。
これを可能にするため、PowerUp.ps1を使う。
Kaliにもともと入っているが、私の環境からターゲット端末に移したところ「マリシャス!!」と怒られたので、EmpireのPowerUp.ps1を使った。
例のごとく攻撃元でWebサーバを稼働させ、ターゲットの端末からダウンロードして読み取らせ、PowerUp後にtypeコマンドで出力した。

このパスワードは、最後に=がついていることからわかるようにBASE64でエンコードされているので、簡単にデコードできる。
Question2:Administratorでログインしてflagゲット
こちらは割愛。
まとめ
若干のWindowsフォレンジック要素がありつつ、メインはKerberoastだった。
KerberoastはおそらくActiveDirectoryの攻撃手法として一番お手軽でポピュラーなので、目をつぶっても動かせるように何度か練習したい。(OSCPでもAD攻略必須になったしな…)
コメント