Writer:b1uef0x / Webページ建造途中
2025年11月にOSWA、2026年2月にOSWEを取得したので、合格体験記をまとめた。知識の大半はCTFのWeb力で賄えたのでOSCP+ほどの情報量はないが、一連の記録である。攻略の参考になれば嬉しい。
Offsec社が提供しているWebに特化したペネトレーションテスト資格で、Offsec社の難易度区分ではレベル2とされている。Webアプリケーションに対するペネトレーションテストの基本的な手法を取り扱っている。OSWAが資格名、WEB-200がコース名。
資格には合格した日付が記載され、維持費などはかからない。
23時間45分の実技試験と24時間のレポート作成の合計47時間45分からなり、試験は自身で用意したマシンからVPN接続して遠隔で行う。Webカメラでデスク周辺が監視されるので、マシン周辺は整理しておく必要がある。
試験マシン5台はすべて独立したWindowsまたはLinuxマシン、OSCPと違って権限昇格の必要はない。後述するOSWEがソースコードが開示されるホワイトボックスであることに対して、OSWAはブラックボックスになっていることが特徴。
公開されているシラバスにもあるように次のような脆弱性を扱う。
認証バイパスしてlocal.txt、リモートコード実行してproof.txtという構成から想像できるように、各段階で使われる脆弱性はある程度決まっていることに気づくはずだ。認証バイパスするなら管理者の認証情報を盗むからXSSやSQLi、あるいは管理者を作成したりリセットしたいならCSRFやSSRF、リモートコード実行するならCommand InjectionやSSTIが使われる。目標に対して使われる攻撃手法を絞り込むことことができる。
また、CTFのWeb問と違って捻ったり複雑な使い方をすることもなく、コース教材を学べば十分に試験も戦える印象がある。コース教材を履修してからがスタート地点だったOSCP+に比べれば素直なコースと言える。
9月頭にOSCP+の試験に落ちて再試験まで2ヶ月の時間があったので、その間にOSWAの教材を履修して、教材の攻撃手法を一通りまとめたチートシートを作成した。ペネトレ業務経験はないが、CTFでWeb担当をしていたのでOSWAで扱うWeb攻撃手法はだいたい知っている。
10月末にOSCP+に合格したので、早速2週間後にOSWAの試験を申し込んで、ChallengeLabをもう一周して試験本番に挑んだ。
11月初旬に試験を受験。便宜上マシン1~マシン5と呼称する。
| 日にち | 時刻 | 内容 | 点数 |
|---|---|---|---|
| 1日目 | 11:00 | 試験開始、マシン1へ | |
| 12:50 | マシン1のlocal.txtを入手 | 10点 | |
| 15:00 | マシン1に行き詰まったのでマシン2に移動 | ||
| 15:40 | マシン2のlocal.txtを入手 | 20点 | |
| 16:00 | マシン2のproof.txtを入手、マシン3へ | 30点 | |
| 16:30 | 夕食休憩 | ||
| 17:15 | 再開 | ||
| 17:55 | マシン3に行き詰まったのでマシン4に移動 | ||
| 19:25 | マシン4のlocal.txtを入手 | 40点 | |
| 19:50 | マシン4のproof.txtを入手、マシン5へ | 50点 | |
| 20:40 | マシン5のlocal.txtを入手 | 60点 | |
| 21:20 | マシン5に行き詰まったのでマシン3に戻る | ||
| 22:45 | マシン3のlocal.txtを入手、合格点に到達 | 70点 | |
| 23:00 | 就寝 | ||
| 06:20 | 起床して再開 | ||
| 07:30 | マシン3のproof.txtを入手 | 80点 | |
| 07:40 | 70点+10点を得たので一旦レポート素材の確認作業を行う | ||
| 08:40 | 休憩 | ||
| 09:30 | 再開 | ||
| 10:15 | レポートの素材が揃っていることを確認、まだ時間があるのでマシン5に挑む | ||
| 10:40 | マシン5のproof.txtを入手 | 90点 | |
| 10:45 | 試験終了 | 90点 | |
| 2日目 | 12:00 | 勝利の寿司 | |
| 12:30 | お昼食べている間にWindowsUpdateがかかってPCが再起動されている惨事が起きる。レポート素材を事前に揃えておいてよかった | ||
| 18:00 | 夕食 | ||
| 00:00 | 色々コードを盛ったら90ページほどになったレポート提出 |
レポートは公式のテンプレートの形式に従いつつ、local.txt及びproof.txtに到達するまでの攻撃過程を再現できるように書いて提出した。翌日の朝には合格証が発行されており、夜には合格通知が届いた。
レポート作成は24時間あるが、試験環境に接続できないので最初の24時間のうちに必要なスクリーンショット等を揃えておく必要がある。そのため満点まで攻めずに80点到達時点でレポート作成に時間を使うマネジメントとなった。PCが再起動されるトラブルに見舞われたのでこのやり方は正解だったと言える。というか危なかった。WindowsUpdateは切っておくか事前に済ませておこう。
Offsec社が提供しているWebに特化したペネトレーションテスト資格で、Offsec社の難易度区分ではレベル3とされている。ホワイトボックス形式でWebアプリケーションの高度なペネトレーションテスト技術を扱っている。OSWEが資格名、WEB-300がコース名。
資格には合格した日付が記載され、維持費などはかからない。
47時間45分の実技試験と24時間のレポート作成の合計71時間45分からなり、試験は自身で用意したマシンからVPN接続して遠隔で行う。Webカメラでデスク周辺が監視されるので、マシン周辺は整理しておく必要がある。
OSWAのブラックボックスに対してOSWEではソースコードとデバッグが可能なホワイトボックス形式をとっている。大きな特徴として、攻撃全体を自動的に実行するPoCの提出が必要になっている。言語は自由だが、Pythonが扱いやすい。試験環境に接続できるのは最初の48時間だけなので、スクリプトはこの間に作る必要がある。実機環境がない状態でスクリプトを組み上げるのは不可能に近いだろう。
基本的な攻撃手法はOSWAと共通しており、OSWAの内容に加えて次のような脆弱性(公式のシラバスから抜粋)が追加される。
さらに、定型的な攻撃コードを使えば攻撃が成功するOSWAと異なり、攻撃が通らないようにフィルタリングや対策が行われたソースコードをバイパスする必要がある。SQL Injectionも定型的なものではなく、Blind SQL Injectionを前提にしてターゲットのWebアプリケーション固有の方法で情報を取り出すSQLコードを書くことが要求される。もちろんSQLmapは使えないので手作業になる。
公式のシラバスでは以下の項目が該当する。
基本的な方針はOSWAと同じく、認証バイパスしてlocal.txt、リモートコード実行してproof.txtで構成されるので、攻撃パスを予想してソースコードの該当箇所を探っていく方法が有効。攻撃を通すにはバイパスが必要なので、CTFのWeb問のような感覚がある。
コース教材は実在するWebアプリケーションの脆弱性の解説になっており、とても難易度が高く読み応えのある内容に仕上がっている。ただし、ChallengeLabや試験とは質的に異なる。
11月初旬にOSWAに合格したので、OSWEを開始。攻撃手法そのもののチートシートは作らず、OSWAのチートシートをそのまま流用した。ただし、エクスプロイトの自動化が要求されているので、ChallengeLab全問題をPythonで自動エクスプロイトして、そのために作ったコードを機能ごとにまとめたOSWE用のチートシートを作った。これは非常に重要。
ChallengeLabが終わる目処が付いたあたりで試験を申し込んだ。ChallengeLabは1周目で自動エクスプロイト用コードが揃ったので2周はしなかった。
2月初旬に試験を受験、便宜上マシン1~マシン2と呼称する。
| 日にち | 時刻 | 内容 | 点数 |
|---|---|---|---|
| 1日目 | 09:00 | 試験開始、マシン1に取り組む | |
| 12:00 | マシン1の脆弱性を発見、昼食 | ||
| 13:00 | 再開 | ||
| 14:30 | マシン1の認証バイパスの手段を確立、このままRCE探索に移行 | ||
| 16:00 | マシン1のRCEの手段を確立 | ||
| 18:00 | マシン1のPoCが完成したが、実環境向けに修正の必要がある。夕食 | ||
| 19:00 | 再開 | ||
| 19:30 | マシン1のPoCが通ってlocal.txtとproof.txtをまとめて入手、マシン2のソースコード読解に移行 | 50点 | |
| 00:30 | マシン2の脆弱性を悪用してlocal.txtを入手 | 85点 | |
| 02:30 | マシン2のproof.txtに届く脆弱性を発見したが悪用できない。一旦local.txtまでのPoCを作る | ||
| 03:40 | マシン2のlocal.txtまでのPoCが完成、就寝 | ||
| 2日目 | 10:30 | 起床して再開、合格点に達したのでここまでのレポートを先に作る | |
| 12:00 | 昼食休憩 | ||
| 13:00 | 再開 | ||
| 15:00 | マシン1のlocal.txtまでのレポート完成 | ||
| 16:00 | マシン1のproof.txtまでのレポート完成、夕食休憩 | ||
| 18:30 | 再開 | ||
| 21:00 | マシン2のlocal.txtまでのレポート完成、ここからマシン2のproof.txtチャレンジを再開 | ||
| 23:30 | マシン2の脆弱性を悪用してproof.txtを入手 | 100点 | |
| 02:15 | マシン2のPoC及びproof.txtまでのレポート完成、就寝 | ||
| 08:30 | 起床して再開、マシン1及びマシン2のPoCの最終動作チェック良好 | ||
| 08:45 | 試験終了 | 100点 | |
| 3日目 | 19:00 | レポート提出 |
試験時間中にレポートはほぼ書き終えており、3日目はレポートの英訳だけを行った。レポート提出後はOSWAのときと同じく翌日の朝には合格証が発行され、夜には合格通知が届いた。
レポート作成ではレポートのPDF内にPoCコードを含める必要があり、かつPDFからコピーしたコードが完璧に動作しないといけない。インデントで入れ子を表現するPythonコードは破損しやすく、PoCコードをbase64文字列でも併記して、PoCの復元手順と復元後のファイルのハッシュ値を記載して対策した。48時間の間にPDFからPoCを動作させる試験もほしいので、試験時間中に不完全でもいいのでレポートPDFを出力できると安全を確保できる。
特に次の2つの機能をPythonコード内に組み込んだおかげで、準備作業を必要とせずPoCの実行のみでエクスプロイトが完結して便利だった。コードまでは記載しないが、AIを使えばすぐに作ってくれる。