はじめに
webapp開発、ペネトレーションテストともに未経験の状態からoffsecのLearnOneを受講し、OSWAに合格しました。
OSCPは多くの記事がありますが、OSWAはあまり記事がなかったため、どなたかの参考になればと思い雑に書き残します。
筆者の経歴
- 半コンサル半技術者の大卒IT会社員6年目
- ちょっとだけLinux触ったことある
- 開発経験ゼロ
- 情報処理安全確保支援士 は取得済み(XSS, SQLiの名前は知っている程度)
学習手段
offsecの公式OSWAモジュールラボ、チャレンジラボ
チャレンジラボは本当に大事です。
3周くらいやりました。
本番は大体チャレンジラボと同じくらいの難易度でした。
チャレンジラボは1周目に自力で解けたものはありませんでした。
すべてdiscordで過去の投稿を見ながらです。
それでも学びは多くあります。
総学習時間
大体 5,6時間×90日
攻撃的スキルを学ぶことが初だったため、結構時間をかけた印象です。
当時は業務の閑散期だったのでほぼ毎日5,6時間はやってました。
チャレンジラボは本当に大事です。(2回目)
テスト結果
70点で合格(合格ライン70点)
5台のマシンに2つずつflagがありますが、3台完答、1台localのみ、1台は足掛かりすら掴めずでした。
合格ラインまでは6時間程度でしたが、そこから12時間近く地獄の無進捗で、諦めてレポート作成に移りました。
この記事を読んでいる方ならご存知かと思いますが、各マシンのflagの場所は次の通りです。
- local:webappの管理者画面に記載
- proof:webappが稼働するサーバのwebディレクトリにtxtファイルで存在(/var/www/htmlなど)
OSCPとの比較
私自身、現在OSCP勉強中ですが、OSWAはバージョン情報から既知の脆弱性を探して〜のようなアクションがいらない分、やりやすいと思います。
また、OSCPのlocal.txtにあたる内容がproof.txtであり、サーバー内での権限昇格が不要なのも初心者向きだと思います。
攻略時の考え方(ちょっとメタい)
local
localは管理者画面に存在します。
そのため、よく用いられる攻撃手法は次の通りです。
- XSS
- SQLi
- 管理者画面への認証試行
逆にサーバー側に対して何かしらアクションを行うようなXXE、コマンドインジェクション、ディレクトリトラバーサルなどは使わないことが多いです。
管理者が何かを確認するシーンが考えられる(掲示板、ログなど)場合にはXSSでcookieを取ったり、ユーザー追加やPW変更のjavascriptを実行させるなど。
proof
proofはサーバー側に存在します。
そのため、よく用いられる攻撃手法は次の通りです。
- SQLi
- XXE
- コマンドインジェクション
- ディレクトリトラバーサル
- テンプレートインジェクション
- SSHの認証試行
XSSからサーバーへの足掛かりが得られる可能性は完全に排除してよいのではないでしょうか。
(私が知らないだけで全然あるかもしれませんが)
攻略の流れ
流れ自体は意外とシンプルです。
- ポートスキャン:80以外でhttpが開いているかもしれない。
SSHは基本空いているが一旦無視。 - ディレクトリ列挙:とにかく列挙しまくる。
最初は少ないリストでいいが、ヒットしたリストを見ている間に大きいリストで調べておくのがおすすめ。
リストはこの辺を使いました。
最初はcommon.txt、次にraft-large-directories.txt。
largeはとても時間がかかるので最初からやるのはあまりお勧めしません。 - 入力できる箇所全てに前述の攻撃手法を試す(ゴリ押し)
以上です。
冗談ではなく、ひたすら列挙列挙列挙・・・、入力入力入力・・・
おすすめツール
nmap
おすすめというよりポートスキャンで必須
burp
おすすめというよりwebappに対するテストでは必須(特にrepeater, intruder)
dirsearch
個人的にはgobusterよりおすすめ
もしかしたらgobusterの方が早い、のようなことはあるかも
見つけたディレクトリに対して、再帰的に探索してくれるので便利です。
dirsearch -u http://**** -w /usr/share/seclists/web-content/common.txt
sqlmap
POSTのrequest formを丸ごとtxtファイルにして -r オプションで投げれば楽ちん
dbs→tables→dumpの順で徐々に狭めていくのがおすすめ
最初からdumpするととんでもない時間がかかる場合あり
sqlmap -r request.txt --dbs --batch
sqlmap -r request.txt --dbms=mysql -D dbname --tables --batch
sqlmap -r request.txt --dbms=mysql -D dbname -T tablename --dump --batch
--batchはユーザーに対する問いを自動でyesにして進めてくれる。
使い方はこのページがおすすめ
他にもXSStrikeがおすすめという記事を見かけましたが、私には使いこなせませんでした。
最後に
OSCPは分かりませんが、OSWAはいい時間からの開始がありませんでした。
朝4時から or 夕方16時からだった気がします。
生活リズムが乱れるので気をつけてください。
正直無理な時はとことん無理です。
私は最初の3時間進捗無しで絶望しましたが、攻略マシンを変えたら一瞬で合格ラインまで突っ走れました。
ある程度やって進捗なければマシンを変えた方がいいと思います。
今後の展望
OSWA後、OSWP、CEH MASTERは取得できたので、そろそろOSCPを目指します。
ともにtry harderしましょう・・・