OSCP 合格体験記 [2020]

# OSCP 合格体験記

こんにちは、久々にqiitaの記事を書きます、というのもタイトルのようにここ数ヶ月間 OSCP (Offensive Security Certified Professional ←名前がかっこいい)の勉強に励んでいました。今回はその体験記を書いていこうと思います。ただ OSCP の詳しい説明や勉強方法などは他の合格体験記を読んだ方が参考になると思います、なのでこの記事ではあくまで主観的な内容や他の体験記に書いてなかったことに留め、2020年になってから OSCP のパッケージの内容が大きくアップデートされていたようなのでそこにも少し触れていこうと思います。
また、自分は background としてサイバーセキュリティを専門として働いたことも研究をしたこともない、普段は機械学習を使った画像処理関係の研究をしている大学院生なので、そういった方や日中は仕事をされている方に参考になればと思います。

## 参考になった合格体験記

> 高林の雑記ブログ https://kakyouim.hatenablog.com/entry/2020/05/11/225348
>> 僕が所属しているCTFチームの一人である方が書いたブログです。めちゃくちゃ色々詳しく書いてあるので大いに参考になりました。ありがとうございます！笑
>
> oscp 2020 review https://qiita.com/Howtoplay/items/2145ffea1ebf1b653cf7
>> 受けるにあたって使えそうなサイト、ツールなどを紹介してくれてます
>
> Hacking Blog https://tento.hatenablog.com/entry/2020/09/17/204627
>> 失敗談やこうしたほうがよいといったことが書いてあります

他にも海外の review など探せばたくさん出てくるので読んでおくとよいと思います。

## 自分の background と受験期の主な一日
自分は今大学院の修士1年生で、上に書いたように普段は機械学習を使った画像処理関係の研究をしています。ですが趣味として学部2,3年生くらいからCTFを始め、セキュリティの知識はそこそこ身についていましたが、OSCPのようなPentest系 [^1] は全然やったことがなかったです。
その他は、ネットワークやプログラミング言語、Linux関係はほぼ独学で勉強して、web開発も少ししたことがあり、自分でサーバーを立ち上げてPHPで書いたwebサイトを公開したことがある程度です。

日中は研究をして夜7~9時くらいに家に帰ってきてから夜1~2時に寝るまでの時間を全てOSCPの勉強に割いていました。他の体験記に3ヶ月で200時間以上の勉強時間は必要とのことだったので平日はできるだけ4時間は確保しました。休日も研究関連のことはすることありましたが出来るだけOSCPの勉強に割いていました。論文執筆の時期と重なった時期は死にそうになりながら勉強してました笑

[^1]: この記事でのPentestはOSCPレベルの難易度のことを指します。めちゃめちゃ難しいPentestでは当てはまらないことがあるかもしれないです。

## CTFとの違い
CTFとの違いについて書いている記事があまりなかったので少し書いておきます。
終わってみての感想ですが、CTFとPentestは結構違うなと感じました。具体的に何が違うかというと

* CTFではほとんどWindowsのマシンを攻撃することがないのでWindowsコマンドやPowershellコマンドを使わないこと
* CTFでは権限昇格どころかリバースシェルを取ったりしない
* そもそも攻撃方法が違う。CTFでは作者が作成したシステムをいい感じに自分で考えながらバイパスしますが、OSCPは既知の一般的に使用されていたシステムを攻撃します。なのでexploitコードがネットに落ちているのでそれをカスタムしたりして攻撃する。
などなど...

CTFではPentestで使用するexploitコードを書くための知識が問われると言った方がわかりやすいと思います。なので良くも悪くもCTFで培った知識はそんな使わなかったです。

## 申し込みから受験まで

自分は8月に3ヶ月のプランに申し込み、8月10日に本格的にスタートしましたが、始まる前にHack the box で数台練習して肩慣らしをしました。
受験料は$1400で、コロナの給付金を全プッシュしました。

### 8月
2020年版では配布されるPDFが850ページほどあり、最初の二週間くらいはExerciseをやりながら読み進めていたのですが、あまりに膨大な量だったのでExerciseは一旦諦めて次の一週間くらいでとりあえずPDFを読みきりました。PDFは基礎の基礎から応用まで網羅されていて、完全な初心者が読んでも理解できるようになっていてめちゃくちゃ勉強になりました。また、解説動画(?)のようなものも配布されますが僕はほとんど見てないです笑
ちなみに2019年以前は300ページくらいだったそうなのでめちゃくちゃアップデートされていました。アップデートの内容は以下の様になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465545/4e501ad6-47eb-4655-25ad-af9e7eff690e.png)

このアップデート内容で500ページも増える！？と思いましたがOSCP終わった後でも使えそうなものがてんこ盛りなのでまぁいいかなって感じです。

### 9月~10月

PDFを読み終わって早速提供されているLabに取り組みました。2~3日で1つのマシンの攻略を目標にしてました。ちなみに学生フォーラムは答えはありませんが、限りなく答えに近いヒントのようなものもあるので行き詰ったと思ったらフォーラムを隈なく読んでみるといいです。また、ある程度慣れてきたらYoutubeでHack the boxの[解説動画](https://www.youtube.com/c/ippsec)をご飯を食べながら見て時間を有効活用して、コンピュータが使えなかったり動画が見れないときは Vulnhub の Write up をスマホとかで読んでいました。
10月に入ったころに試験の予約をしました。一か月前に予約を取っておくと良いとどこかのサイトに書いてあったのでそうすることをお勧めします。

あっさり書きましたがこの期間が一番しんどいです。10月は学会があり論文執筆とスライド作りと並行して行っていたのでメンタルがズタボロになってました笑

### 11月

10月の終わりくらいにはだいたい40個のマシンを攻略出来ていたので一旦諦めていたExerciseを終わらせることにしました。半分くらいはやってあったので執念で終わらせました。
ExerciseとLabのレポートを作るときなのですがスクリーンショットを一回一回ファイルとして保存してからWordに張り付けていたのですが、途中から [Ctrl]+[Shift]+[Print Screen]でスクリーンショットをクリップボードに保存してそのまま張り付けることが出来ることを知りめちゃめちゃ作業効率が上がりました笑
その後何個かのマシンを攻略して最終的に48個のマシンを攻略しました。
11日に練習期間が終わってから21日の試験までひたすらOSCP likeなHack the boxのマシンを解いていました。OSCP likeなHack the boxのマシンのリストは[このシート](https://docs.google.com/spreadsheets/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/edit#gid=1839402159)にあります。( Vulnhub の OSCP likeなマシンもここにあります)
さすがに全部を自分でやるのは時間がなさすぎるので大体は例のYoutubeの動画やWrite upを読んで使えそうなコマンドや知識を自分のチートシートにコピーしておきました。

## 試験日

試験は21日の午前11時からだったのですが前日の夜まで22日からだと思っていて何となくメールを確認したら次の日ということが分かり急いで食糧とかを買い出しに行きました笑。メールを確認していなかったら試験を受けれてなかったので確認しといて良かったです笑
試験当日はギリギリまで寝て、ご飯食べてシャワー浴びて試験に臨みました。
ただここで問題が起きます。時間の11時になっても試験管の人がチャットに現れないのです。どういう訳かわからず、本部(?)にメールすると既に試験管の人は待っていると返ってきました。結局 Google chrome のバージョンせいだとわかり急遽 Firefox をインストールしてログインすると管理人がいました。その後、本人確認としてパスポートを試験管に見せるのですが、てっきり webカメラに見せればよいと思っていたのですが、写真で取ってから見せる必要があるらしく、そこでまた手間取って結局11時50分くらいに試験を始めることになり、50分のロスを食らいました。

試験のマシン攻略の作戦と手順は以下のようにやりました

* 最初にBOFの問題を解きながら2つの20ポイントのenumerateを行いました。なぜ20ポイントからかというと他の体験記の感じから10ポイントの問題は脳死でも解けそうな気がしていたので疲れがピークである夜中にやるために取っておき、25ポイントは最悪解けなくても 10pt + 25pt + 20pt + 10pt (20pointのユーザー権限分) + 5pt(レポート分)で70pointで合格点に達する & 難しくて時間をめちゃ取られる可能性があるので余裕があったら解く程度で取っておきました。そんなこんなでBOFの問題を1時間ちょいで解くことが出来ました。
* そのあとは20ポイントの問題をほぼ同時並行って感じで解いていきましたが、なかなかどちらも足掛かりが掴めず結局5時間後くらいに一つのユーザー権限を奪取して、その二時間後くらいにもう片方のユーザー権限、root権限を奪取しました(こっちの権限昇格はめっちゃ楽だった)。
* とりあえずあとは10ポイントのやつを取れば70ポイントに乗るので1,2時間くらいかけて攻略しました。
* これで一応70ポイントになったのですが1点でも減点があったら死ぬので20ポイントのroot権限 or 25ポイントのユーザー権限を取ろうと頑張ったのですが全然出来ず、試行錯誤すること8時間後...試験開始から21時間後にやっと20ポイントのroot権限を奪取しました！これで一安心したので今までのスクリーンショットなどに不足がないかチェックしました。
* その後一休みして残り時間1時間となったのですが最後までやりきろうと思い、25ポイントの問題に取り掛かりました。今までの調査から権限昇格の脆弱性は見つかったのですがなかなかユーザー権限が取れず苦労していたのですが試験終了15分前にユーザー権限を奪取することが出来ました！結構最後まで粘ってみるものですね...。速攻でスクリーンショットを取ってまとめたのですが、さすがに権限昇格の攻撃をする時間がなくそのまま終了しました。

最終的に 4.5/5 のマシンを攻略できました( ~~最初のトラブルさえなければ全部できたかもしれないのに:rage:！！~~ )。
終わった後はそのまま寝ようと思ったのですがエナドリ&コーヒーを飲みまくってたので寝れず、レポートを作成し提出しました。

## 最後に
僕のようにあまり時間が取れないような人でもある程度のセキュリティの知識などがある人であれば頑張ればそんなに難しい試験ではないと思います。ただ、他サイトでは英語力は要らないと書いてあるのもありましたが、個人的には英語力もある程度必要だと思います。勉強するにあたって教材やフォーラムなどはすべて英語なのでいちいち翻訳機を使うのは面倒だし、それだけでかなりの時間が取られます。Write upなどの英語を苦なく読めるだけの英語力がついてれば問題ないと思います。

今後はしばらくお休みしていたCTF(特にpwnやりたい)、Hack the boxをやっていき、今後の人生も **Try harder** していきたいですね！