AS-REP Roasting攻撃【TryHackMe-Services-Writeup】

登山に成功
※当サイトはプロモーションが含まれています

こんにちは、ぎんたです。

今回は、TryHackMeで提供されている「Services」という、比較的最近提供されていたルームの攻略をしていきます。

こちらの「ServicesのURL」でアクセスできます。

  • AS-REP Roastingを使ったKerberosへの攻撃手法に興味のある方
  • evil-winrm、kerbrute、hashcat、impacketのツールの使用に興味のある方
  • CTFに興味のある方

が今回の対象です。

無料でアクセス可能なので、試してみたい方はぜひやってみてください。

目次

ポートスキャンによるサービスの列挙

nmapでポートスキャンを始めます。

以下のコマンドで結果を確認します。

nmap -sV -sC -T4 -p- サーバのIPアドレス

  • -sV :サービスのバージョン列挙
  • -sC :サービスに対するデフォルトスクリプトの実行
  • T4 : 高速モードで実行
  • -p- :全ポートを調査対象(ポート指定しないと、デフォルトの1000ポートを探索する)

実行した結果の一部

nmapの実行結果

内容をパッと見たところ、Domain Controller(以後、DCと記載)の可能性が高いことが分かります。

DNS、Kerberos、LDAPのサービスが稼働しているためです。

また、画像が切れてしまいましたが、5985/tcp wsmanが稼働していました。

Windowsリモート管理(WinRM)が有効になっているようです。

有効な認証情報を取得できたら試すことができそうです。

Server Message Block (SMB)の確認

TCPの445番ポートが開いていたので、SMBの列挙をしたいと思います。

現在利用可能な認証情報が無いため、匿名ログインが可能かどうかを確認します。

smbclientというツールを使って試してみます。

smbclient -N -L //10.10.147.132

smbclientの実行結果

匿名ログインは成功しているようですが、DC上に利用可能な共有ファイル・フォルダがないことが判明しました。

Web Serverの確認

先の列挙でhttpのサービスが稼働していることが判明しているので、実際にアクセスしてみます。

TOPページの下部に連絡先のメールアドレスが記載されていました。

Webページで発見したメールアドレス

また別のタブを調査すると、従業員の名前も確認できました。

Webページで発見した従業員名

メールのフォーマットと従業員の名前から攻撃に利用可能なユーザ名のリストを以下のように作成しました。

  • j.doe
  • j.rock
  • w.masters
  • j.larusso

このリストを使ってActive Directory(以後、ADと記載)への攻撃を行っていきます。

AS-REP Roastingを使った認証情報の取得

現状、認証情報のセットがないので、RDPへのアクセスが行えません。

この状況下でも実行できるAS-REP Roastingを行います。

AS-REP Roastingについて

ADのリソースにアクセスするためには、ユーザはまずDCに存在するKDC(Key Distribution Center)からTGT(Ticket Granting Ticket)を要求することになります。

TGTを要求(AS-REQと呼ばれる)するために、ユーザは「自身のNTハッシュを利用してタイムスタンプを暗号化したもの」を含めて送信します。

KDCはこの暗号化されたタイムスタンプを受け取ると、あらかじめ保持しているそのユーザのNTハッシュを使ってタイムスタンプの復号をし、比較します。

比較して問題がなければユーザにTGTを発行します(AS-REPと呼ばれる)。

ただし、デフォルトでは有効になっている事前認証(自身のNTハッシュを利用してタイムスタンプを暗号化するステップ)を無効に設定することもできます

これにより、事前認証が不要なユーザカウントの場合パスワードを知らなくてもTGTをリクエストでき、TGTを受け取ったらオフラインクラックをすることでパスワードを特定することが可能となります

TGTにはクライアントのパスワードが元になって暗号化されたデータがあるので、そのデータをオフラインクラックするイメージです。

まずは、Kerbruteというツールを使って作成したリスト内(userlist.txt)のユーザが有効であるかどうかを試しました。

kerbruteの実行結果

services.localはdcのアドレスと同じになるように事前に/etc/hostsに登録してます。

リスト内のユーザは有効なようなので、次にimpacket-GetNPUsersというツールを使用しました。

このツールを使って事前認証が無効のユーザの発見、アカウントハッシュの取得を試みます。

impacket-GetNPUsersツールの実行結果

ユーザj.rockは事前認証が無効になっており、アカウントハッシュ値を取得できました。

取得したハッシュ値をクラックします。

hashcatを使っておこなったところ、パスワードを取得できました。

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

impacket-GetNPUsersツールの実行後のパスワードクラックの実行結果

なお、「-m」でモードを指定しています。

AS-REPをクラックするためのモードは以下のURL掲載の表から18200であることが分かりました。

hashcatのGeneric hash types

j.rockの認証情報がそろったので、リモートアクセスを行いたいと思います。

WinRMでのリモートアクセスを実行

先の列挙でSMBのポートが開いていたのでpsexecで実行しようとしましたが失敗しました。

原因は、j.rockが管理者ユーザではなかったためです。

そこで先の列挙で5985ポートが開いていたので、WinRMでのアクセスを試みます。

evil-winrmというツールを使います。

evil-winrmによるリモートアクセス成功

上手くDCのPowerShellセッションを取得でき、そのままユーザフラグも確認できました

権限昇格

「whoami /all」コマンドを使ってj.rockユーザの権限やグループを調査します。

whoamiコマンド結果

「Server Oparators」グループに属しているため、稼働しているサービスの開始と停止ができそうです。

サービスで実行されるバイナリパス(実行ファイルまたはコマンド)を悪意のあるコードや権限昇格につながるコマンドに変更できれば権限昇格が可能です。

また、バイナリパスの変更を反映させるためには、サービスの停止や開始を行う必要があります。

では、実行してみます。

evil-winrmにはserviceというコマンドがあり、利用可能なサービスとアクセスに必要な権限を表示できます。

servicesの実行結果

一番上にあるADWSというサービスのバイナリパスを変更し、サービスを再起動します。

ここではサービスのバイナリパスに「ユーザをAdministratorsグループに追加するコマンド」を記載しています。

binpathの変更

いったんログアウトし、再度evil-winrmを使ってログインすると、管理者のグループに入っていることを確認できます

管理者の追加に成功

この後rootのフラグを取得しようとしましたが失敗しました。

j.rockにはroot.txtのファイルへのアクセス権が無いようです。

rootフラグ取得失敗
ぎんた

もうrootフラグが取れた気でいたのでびっくりしたよ~。

管理者のパスワードを変更してAdministratorsアカウントでログインしなおす方法もありますが、別の方法を試しました。

j.rockは管理者になっているので、impacket-psexecを使うことでSYSTEM権限のリモートシェルを取得できます

psexecは認証後、サービス実行ファイルをADMIN$共有にアップロードします。

その後、ランダムな名前の実行ファイルをサービス開始時に実行されるバイナリとして指定し、サービスとして開始されます。

そのときのサービスはローカルのSYSTEMアカウントで実行されるので、SYSTEM権限のリモートシェルを取得できるわけです。

いったんログアウトしてimpacket-psexecを使うことで、このようにrootフラグも獲得できました

rootフラグ取得

まとめ

今回は、AS-REP Roastingを使ったADの攻撃を体験できるCTFを紹介しました。

振り返り
  • nmapによる列挙でAD環境であることが判明。
  • Webサイトの調査でユーザ情報を取得
  • AS-REP Roastingで事前認証を無効にしたユーザのアカウントハッシュ値を取得
  • ユーザのアカウントハッシュ値をクラックし、パスワードを取得
  • 取得した認証情報を使ってWinRM経由でサーバに侵入、ユーザフラグをGET
  • ユーザが「Server Oparators」グループに所属していることが判明
  • evil-winrmでユーザがアクセスできるサービスを列挙
  • サービスのバイナリパスを変更し、ユーザをAdministratorsグループに追加
  • psexecを使ってSYSTEM権限のリモートシェルを取得し、rootフラグをGET

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

以上、ぎんたでした。

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

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

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

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

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

ぜひご覧ください!

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