OSCP 2020 review

![offsec-student-certified-emblem-rgb-oscp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253111/6edc25b5-57cd-6fcb-9319-13b607a0f552.png)

###  初めに
今年の1月から<a href="https://www.stonebeat.co.jp/">Stonebeat Security</a>という情報セキュリティの専門会社で脆弱性診断やペネトレーションテストをさせていただいております。
インターンという身分ながらOSCP代を出していただいた社長には感謝しかないです。
ありがとうございます！！

### 本題

2020年にアップデートされたPWK/OSCPを受講したので、これから受ける人のためになるような記事を書いていこうと思います。

OSCPは完全実技のペネトレーションテストの入門レベルの試験です。
PWKという75台の脆弱なマシーンがあるラボ環境と850ページ越えのPDFが与えられて、そこで演習をして、最後にOSCPという試験で実際に実力を図ることができます。
試験時間は23:45分で、5台のマシーンを攻撃して侵害されたホストの難易度とレベルに基づいてポイントが付与され、試験終了後24時間以内に英語でレポートを提出して、70点を越えたら合格です
PWKのシラバスは<a href="https://www.offensive-security.com/documentation/penetration-testing-with-kali.pdf">こちら</a>


### OSCPを受ける前に持っていたスキル
1~2年生の時はインターンで、サーバサイドの開発をやっていて、個人ではインフラやセキュリティの勉強をやってました。
3年の1月から今のインターン先で脆弱性診断やペンテスト業務に携わっております。


### OSCPを受けるまでに勉強したこと

**[2月]**
ペンテストの勉強を始めました。
ペンテストに関してはnmapくらいしか知らなかったので、writeupを見ながらvulnhubのbeginnerレベルのボックスから始めて、<a href="https://github.com/ferreirasc/oscp">このサイト</a>を参考にoscp likeなボックスを合わせて30個ほど解きました。

徳丸本を一通りやっていたので、Webの基本的な脆弱性については知っていたのですが、実際にやると色々なパターンがあったり、どうゆうパラメーターや機能に発生しやすいかなど脆弱性への理解がより深まりました。なので、セキュリティに関して何も知らなくてもその都度調べながら、ボックスを解いていくやり方が一番身につくと思います。<a href="https://medium.com/@3B6B1DADD742A75/%E9%81%85%E5%BB%B6%E8%A9%95%E4%BE%A1%E5%8B%89%E5%BC%B7%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-8619db218765">（遅延評価勉強法）</a>
webはLFI、RFI、OSコマンド、FileUpload、SQLi、traversalあたりを重点的に勉強すると良いです。


**[3月、4月]**
HTB（Hack The Box）の有料会員（1500円/月くらい）になって、<a href="https://twitter.com/TJ_Null/status/1162419643283333120/photo/1">この表</a>に乗っているmachine、active machine、ユーザー評価が5のmachine、合わせて70個ほど解いてProHackerになりました。
また、4月の中旬に2ヶ月間のPWKの申し込みをしていただきました。（実際に開始できるのは、2、3週間後くらいになるので注意！）

あと、hackerランクになったあたりから<a href="https://github.com/Tib3rius/AutoRecon">AutoRecon</a>を使い始めました。
AutoReconは、最初にポートスキャンをかけて、その結果から各ポートに適したスキャンを自動で実行して結果を出力してくれるツールです。
AutoReconの結果は<a href="https://github.com/sharkdp/bat">batコマンド</a>で見ると見やすいです。例えば、80番ポートから攻撃しようと思ったときに

```bash:
bat *80*
```
ってやると以下の様に80番ポートの結果だけ見れて便利です。（これはlessではできないし、moreだと最後までいくと終わってしまう）

![Peek 2020-07-25 20-53.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253111/b0b0c009-824e-feca-0093-b2904ed04abf.gif)

この月から下記のことを意識してやりました。

- **難しめのBOX（Medium）を、Forumみずに自力攻略できること**
 - 攻略スキル向上
- **1つのBOXを、6時間程度で攻略できるようにすること**
 - 試験は時間との勝負。日頃から時間目標を作るなど短時間での攻略を意識しておくことで、限られた試験時間で焦らないようにしておく
- **1つでも多くのBOXのパターンを攻略して、慣れておくこと**
 - 初物に遭遇すると、それだけで時間がかかり、さらに焦るので、より多くのパターンに慣れておく
- **レポートの作成になれること**
 - レポートで落ちる人もいるみたいなので、書き慣れておくことが重要（フォーマットを決めておく、記載事項・貼り付けるエビデンスを整理しておくと良いと思います。）
- **チートシートの作成**
 - 手元で、実施手法を、フェーズ毎・サービスごとに整理しておく（<a href="https://book.hacktricks.xyz/pentesting/pentesting-ftp">こんな感じでまとめると良いですよ</a>）
- **何が原因で解けなかったのかをメモする**
 - 時間をおいて振り返ったとき、自分がどんなことで詰まっていたのか、どんなことに時間をかけていたのか、気付いていなかった点、見落としていたこと、誤って進んでいたアプローチなど、スムーズに攻略できなかったことに対する課題や失敗経験を、記憶と記録に刻んでおくことこそが、知識でありナレッジとなります。
また、これをしておくことで、自分が解けない原因が何パターンかに分類できて、解けないときにそのメモを見るとアイディアが浮かんできたりします。　
- **調査結果の要約を書く(note taking)**
 - ポート毎に、可能性のある脆弱性やアプローチ方法、取得したクレデンシャル情報などを整理して、一方がうまくいかないときはもう一方に移動したり、情報を組み合わせたりします。
- **metasploitを使うパターンと使わないパターンで解く**
 - 試験では一回しか使えないので、使ったときは必ず使わないパターンでも解くようにしました。
- **複数のwriteupを見る**
 - 1つのボックスから、複数のアプローチ方法、ツール、コマンドなどが学べるため。 特におすすめなのが<a href="https://0xdf.gitlab.io/">この人</a>です。root権限を取った後の考察などが非常に勉強になります。



**[5月、6月]**
PWKラボを開始しました。（ラボにはvpnで接続するのですが、毎回クレデンシャル情報を入力するのが面倒なので<a href="https://torguard.net/knowledgebase.php?action=displayarticle&id=138">この設定</a>をしてました）
まず、試験の予約をしましょう。（良い時間帯が1、2ヶ月先くらいまで埋まっているため）
リスケも2,3回できます(曖昧でごめんなさい...)

最初にPDFのExercises全てと、ラボマシーン10台の攻略手順をレポートにまとめました。（これをすると試験で5点加算されます。）
自分は丁度コロナで学校が無かった（噂によるとあったらしい）ので全部やれたのですが、PWKがアップデートされたことによって、Execricesが膨大な量になっている上に、何を問われているのかがわからない問題がしばしばあって結局、3週間くらいかかって、レポートは352ページになりました。

ラボに取りかかる際には、PDFの最終章、ラボの[α],[β],[γ] マシーンからやることをおすすめします。
ここでは、正しいenum（情報収集）方法やnote taking、マシーンへのアプローチの仕方などが丁寧に書かかれているので
最初にここで正しいやり方を身につけてから他のボックスで演習したほうが良いです。

BOFは、ネット上に転がっているやつに手を出すより、PDFに乗っている3つのExtra Mile Exercisesをしっかりやっておけば十分です。

あと、ラボのマシーンは他の受講者と共有しているのでenumしてる際に、誰かが悪用したPocとかが残っていたりするとそれがヒントになってしまったり、逆にそのファイルに惑わされたりするのでマシーンに取りかかる前に、再起動することをお勧めします。
また、ラボは組織のネットワーク環境を模擬しているので、そのマシーン上に他のマシーンを攻略するのに役立つファイルや情報が見つかる可能性があるのでroot権限を取得して終わりではないことに注意してください。

また、AD（Active Directory）の章でmimikatzを使用する場面があったので、ついでに<a href="https://allsafe.booth.pm/items/1861943">ミミミミミッミ</a>でも勉強しました。
とてもわかりやすくて、ADのマシーンはなかなかやる機会がないので時間がある人はぜひ併せてやってみてください！
最終的に50台のラボマシーンを攻略しました。


### PWK申し込みの目安
PWKでは、ペンテストを全くやっとことがない人でも取り組めるように、bashの基本的なコマンドから解説されているのですが、ラボではマシーンを攻略することに時間を費やしたほうがいいので、最低でもoscp likeなHTBはやっておいたほうが良いと思います。
あとBOFは理解するまでに時間がかかると思うので<a href="https://www.vulnhub.com/entry/brainpan-1,51/">brainpan</a>をやっておくと良いと思います。
以下の資料もおすすめです。
<a href="https://guif.re/bo">資料1</a>、<a href="https://netsec.ws/?p=180">資料2</a>、<a href="https://github.com/justinsteven/dostackbufferoverflowgood">資料3</a>


### 試験前日
試験の前日は<a href="https://support.offensive-security.com/oscp-exam-guide/">試験概要</a>を全部読んで、kali-linuxのスナップショットを取って、当日やることをまとめて勉強は一切しないで体力を温存しました。


### 試験の注意点
離席する際は、監督者に一言いって許可をもらう
試験前に部屋中を見せろと言われるので、パソコン内蔵のやつだと少しめんどくさい
画面共有ツールはkaliではなく、ホストマシン上で起動する
Webカメラで監視されるので、無い人は買う
試験前にパスポートを見せる
レポートは、試験終了から24時間以内にフォーマットに従って提出してそのリンクを指定のメールアドレスに送信する
<a href="https://medium.com/@falconspy/oscp-approved-tools-b2b4e889e707">試験で使えるツールは限られている</a>（このサイトには乗っていないのですが、pwntools使えました）



### 試験当日【7月】
(試験内容についてはあまり詳しく書いてはいけないので、ざっくりと書いておきます。)

試験の20分前くらいに、監督セッションにログインしました。
試験では、ディスプレイ2台とメモリ12GBのPCを使ったのですが、Webカメラが数回落ちる程度で特に支障は無かったです。


**[11:00]**
試験開始と同時にメールでコントロールパネルへの接続パックが送られてきます。
コンパネに接続し、マシーンの説明を読み、BOF以外のmachineにAutoReconをかけて、BOFにとりかかりました。
BOFは、1時間以内に終わらせる予定だったのですが、空目していたせいで、中々exploitが刺さらず結局2時間ほどかかりました

**[12:50]** 
bof終了,予定より1時間ほど遅れて少し焦りました
10点問題に取りかかる

**[13:10]**
これは簡単でした。root権限取得
予定よりだいぶ速く攻略できたおかげで少し安心しました。

**[13:15]** 
1つ目の20点問題に取りかかったのですが、中々足場が築けず解けそうに無いので一旦飛ばしました。


**[17:00]**
2つ目の20点問題に取りかかる。


**[18:12]**
ここはすんなりいけて1時間ほどで低特権シェルを取得

**[20:20]**
ご飯を食べながらenumして、2つ目の20点問題のroot権限取得


**[20:25]**
25点問題に取りかかる


**[21:20]**
25点の低特権shell取得、最初の20点問題より簡単でした


**[24:00]**
25点問題の権限昇格を試みる
一通りenumしたが、中々悪用できそうなポイントが見つからず、1つ目の20点問題に戻りました。


**[02:00]**
まだ時間に余裕があったので、丁寧に一からenum結果を見ていくと、最初に『ここにはないだろー』って思ってたところに、足場を築くヒントがあって、なんとか1つ目の20点問題の低特権シェルを取得できました。（固定観念は捨てよう！）
一応ここで77点+5点(ラボレポート)で合格点は越えたのですが、レポートでどれくらい減点されるかわからなかったので、20点問題の権限昇格をやりました。

**[03:00]**
怪しい箇所を見つけたがうまく権限昇格できず、なぜか右足が猛烈に熱くなったため、2時間ほど寝ました


**[05:00]**
起床すると左足が猛烈に熱くなっていました（1つ目の20点問題再開）


**[08:45]**
昨日うまく悪用できなかった原因をぐぐって、試行錯誤してるとシェルが舞い降りてきました（20点問題のroot取得）


**[09:30]**
25点問題の権限昇格はできそうになかったので、スクショのとり忘れがないか確認をして試験を終了しました



### レポート
MarkDownに書き慣れていたので、以下のMarkdownをPDFに変換してレポートっぽくしてくれるツールを使用しました。
<a href="https://github.com/noraj/OSCP-Exam-Report-Template-Markdown">OSCP-Exam-Report-Template-Markdown</a>
レポートに、exploitコードを張る必要があるのですが、そのまま載せるとPDFに変換した際に表示が崩れるのでbatコマンドの結果をスクショ撮って載せました。
文字の色を変える場合は、`\textcolor{red}{文字}`でできます

editorは<a href="https://typora.io/">typora</a>を使用しました。即座にmarkdownに変換してくれるのでqiitaみたいに2画面にならなくて良いです。

レポートの書き方は下記のものを参考にしました。
<a href="https://www.offensive-security.com/pwk-online/PWK-Example-Report-v1.pdf">参考1</a> <a href="https://www.offensive-security.com/pwk-online/PWKv1-REPORT.doc">参考2</a> <a href="https://www.yumpu.com/en/document/read/24329459/penetration-testing-sample-report-2013">参考3</a>

また、レポートでは脆弱性の説明、修正方法、脅威を書く必要があったので下記を参考にしました。
<a href="https://portswigger.net/kb/issues">参考</a> 

最終的に46ページになり、レポートを提出して（ラボレポートをやった人はここで一緒に提出する）から1週間くらいで合格通知が来ました。



### 感想

海外のoscp reviewを見ると最難関と書かれていたので、かなり対策しましたが、そこまで難しくはないかなと思いました。
ラボの難しめのボックスや、HTBのmediumがノーヒントで8時間くらいで解ければ受かると思います。
完全実技試験ということもあって、筆記試験とは比べ物にならないくらい技術が身についた感覚があります。
ペンテスターを目指している人は、ぜひ挑戦してみてください！

合格するとかっこいい証明書がもらえます。
![unnamed (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253111/49d0113a-0620-1aea-cccf-ba1e57ecc4be.png)
Try Harder.
Enjoy Hacking !!!