OSWA/OSWE合格体験記(2026.02) - Try Harder

Writer:b1uef0x / Webページ建造途中

概要

2025年11月にOSWA、2026年2月にOSWEを取得したので、合格体験記をまとめた。知識の大半はCTFのWeb力で賄えたのでOSCP+ほどの情報量はないが、一連の記録である。攻略の参考になれば嬉しい。

目次

OSWA(WEB-200)

OffSec Web Assessor(OSWA)について

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:4070点+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は切っておくか事前に済ませておこう。

OSWE(WEB-300)

OffSec Web Expert(OSWE)について

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を使えばすぐに作ってくれる。

XSS受信機能
XSSではWebサーバーを立ち上げて通信を受信する必要がある。PoCの中でWebサーバーを起動して受信待機して所定の通信を受信したらサーバーを停止して受信データを返すPythonコードを準備した。これによって別途Webサーバーを立ち上げる事前準備が不要になった。
リバースシェル受信機能
RCEではリバースシェルを受信して対話シェルを開く必要がある。これもPoCの中でリスナーを起動してマルチスレッドでRCEを投げるPythonコードを準備した。事前にリスナーを準備する必要がなく、対話シェル確立後に全自動でコマンドを投入してシェルのアップグレードやproof.txtの抽出まで自動化できた。