はじめに
OSCP取ろうと思ってる人向けや困ってる人向けです。
まだ受験前ですが、困ったことを忘れないようにメモしておきます。
合格後の観点でのメモは下記です。1回目0点、一月後2回目合格です笑
受験前の懸念 英語
- 動画もあるけど、文章だけでも学べるからブラウザの翻訳機能だけで問題ない。あんまり気にしなくていい。
- たまに何かいてるかわかんないときはちょっとだけ調べる必要はあるかも。
勉強の進め方
最初にすべきはDISCORDに入ること
ちなみにあんまり説明とかないので、この辺の記事とかあちこち見ないと詰まるかもしれない
=> Flagは取れたけどFlagの提出方法がわかんないとか全体的にどうでもいいことで詰まった
答えやヒントを積極的に見るべき
- 答えを見ずに解くことにこだわるととてつもなく時間がかかる
- 知らないものはいくら調べてもわからない(inputが十分じゃないのにoutputしようとするとよくなさそう)
- 答えを見て逆算であったり、なぜわからなかったかを調べるほうが最初はよい
=> OSCPのラボ数が少ないのが懸念であれば、外部のTry Hack MeやHack The Boxを使うべき(というか必須)
外部プラットフォームなどを利用するべき
- OSCPのシラバスないで説明していない攻撃が多くまずは外部プラットフォームでInputすべき(n回目)
- OSCPのシラバスじゃなくて、Pivoting Groundでもいいけど、場所がわかりづらい
ここ: https://portal.offsec.com/labs/practice-2 - Hack the box で課金して、Retired Machineをある程度やって、わかんなかったら答えを見るをしたら結構Flag取れるようになった。(答えを見ないことにこだわるのは時間がもったいないしストレスがたまる)
- 下記のラボを順番にWindows Linux Active Directoryをバランスよく実施
https://docs.google.com/spreadsheets/u/1/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/htmlvie
シラバス飽きたらラボをやってもいいし、わかる分野は飛ばしてもいい
- 特に書くことないけど、OSCPのラボを最初にやってみて、わかんなかったらHTB、THM、Proving Ground
- 弱い分野があったらシラバスを読むとかが早いかもしれない
エラーが起きたら
404 Not Found
- 昨日までなにもなかったのに、急に発生する.
- まってても一生治らない、すでに知られているバグらしい
- ダッシュボードからアクセスではなく Explorerってとこからアクセスすると戻る
その他、ペンテストがうまくいかない場合
- ラボの再起動を結構やるべき、意外と再起動したらうまくいくとかある
- 手法は間違えていないけど、バグでうまくいかないとかある、ダメなときは飛ばすべき、もしくはDISCORD確認
パスポート取得
やったことないから結構わかんないことだらけだった
1. 電子申請
申請時に必要なもの
- 証明写真 => 近くの24時間の写真撮りきで撮影 => 1回目は目に髪の毛がかかっていたので再撮影
- サインの画像 => ノートにボールペンで記載して写真を撮った(笑) 白い紙とかマッキーとか使ったほうがいいと思う
- マイナンバーカード => 発行済み
- マイナンバーカードのパスワード 4桁の数字
- マイナンバーカードの証明書のパスワード ?? ちょっと複雑な奴 => これぎりぎりまで間違えかけた
- マイナポータルのインストール
Google Play
Apple Store
申請の手順
- マイナンバーカードを使って、マイナポータルにログイン
- パスポート発行があるのでクリック
- ひたすら情報を入れていく => 住所とか画像アップロードとか
困ったこと
- マイナポータルのエラーがめちゃくちゃ起きる
=> たぶんセッションハイジャック対策でゼロから全部入れ直しになる。
スマホの回線の問題か、2時間くらいかかって何度か心折れた
(ある程度入力したらファイルで保存、進んだら保存を繰り返したが、保存でもたまにエラーが出る笑) - 発行しましたの通知がない、申請したらその中に発行予定日があるので勝手にとりにいかないといけない
2. 申請後から受け取りまでにやること
必須ではないがクレジットカード情報登録推奨
- たぶん電子申請じゃないほうは大変そうに見えた
- 現地でもパスポートセンターの前に手数料払うようの証書?みたいなのが打ってあるからどちらでもいい
- クレジットカードで払ったほうが証書?みたいなの買うところで待たなくていいかも
パスポートセンター前でマイナポータルログイン
- ログインして受付表みたいなのを見せたらバーコードで読んでくれる
PC購入と環境設定
性能が悪すぎて、古すぎるPCだったので買い換えた
1.PC購入
- 32GB RAMを最低ラインで探した
- 中古30万円ちょっとBlade16を買った
- NVIDIA 搭載だけど、VMWare Workstation Playerに直接接続ができないからいうほどGPUはいらないかも?
環境の設定
- 英語の設定のまま => 日本語だとディレクトリ構造があんまりすきじゃなかったりetc
- 下記のチートシートとか参考になれば Kali Linux
kali 初期設定
# Kali Linux VMWare用設定
- VMWare用Kali Linuxファイルをダウンロード
- 7zで解凍
- 仮想マシンを開く
- 選択
- 仮想マシンを停止
- 選択して、仮想マシンのアップグレード
=>カーソルが表示されるようになる
# Kali Linuxの設定(必要があれば)
## 1. Wi-Fi接続、キーレイアウト設定、ディスプレイ設定
- 右上から Wi-Fi の設定 > Available wifi から設定
- keyboard > Layout > User system defaults をオフにして Japaneseのキーボード設定
- display > ミラー表示をオフ、 スケールでも字サイズを調整、 解像度や位置関係を調整 > 適用
## 2. リポジトリ、パッケージの更新
```bash
sudo apt update
sudo apt upgrade
```
- すべてのツールをダウンロードするには
```bash
sudo apt install kali-linux-everything
```
## 3. ロケール設定、日本語化設定、入力の調整(仮想マシンならなしでも)
```bash
locale
sudo apt install task-japanese task-japanese-desktop
sudo dpkg-reconfigure locales
```
- ja_JP.UTF-8 UTF-8 までスクロール > Shiftにより選択 > TabでOKを選びEnter
```bash
sudo apt install ibus-anty zenity im-config
sudo im-config
```
- OK > ibusを選択 > OK
- ibusの設定 > 一般 > 次の入力メソッド > 好みのものにする
- 入力モード > ひらがな
- キーボードの永続化設定(再起動してもKeyboardの設定がなぜか戻る場合)
```
sudo cat /etc/default/keyboard
```
```
XKBMODEL="pc105"
XKBLAYOUT="jp,jp"
```
時間設定
```
timedatectl set-timezone Asia/Tokyo
```
## 4. 再起動、設定の適用
```
reboot
```
### 文字化けが発生した場合にはフォントの再インストール
```
sudo apt remove fonts-vlgothic
sudo apt install fonts-vlgothic
```
## デザイン
- デスクトップ > 背景 > 好みのものにする
- Terminal > 外観 > 好みのものにする
# Kali Linuxへのアプリ追加や設定
## Google Chrome
- https://www.google.com/intl/ja_jp/chrome/dr/download/
- 拡張機能: Simple Translater
## VMware 用設定
```
sudo apt update
sudo apt install virtualbox virtualbox-ext-pack
```
- https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
## FireFoxに拡張機能を追加
- Foxy Proxy => プロキシの切り替え
- 拡張子のバーへの表示
## CyberChefのダウンロード
## Sliver C2のダウンロード
## BurpSuiteの初期設定
- 証明書
- https://portswigger.net/burp/documentation/desktop/external-browser-config/certificate/ca-cert-firefox
- FoxyProxyにBurpSuite用の設定を追加
ちなみにFlare-VMも作ってる
(Windowsのエクスプロイトテスト用とファイル解析)
- ファイルの中に認証情報とか含まれてた時用だがあんまり必須ではないかも
Hack the boxではそういうシナリオがあった、、、
flare-vm 初期設定
# 初期設定
- Windowsのインストール
- VMXファイルを編集するとメモリを解放できるらしいがあんまり変わらないかも?
```ini
mainMem.trimming = "TRUE"
MemTrimRate = "30"
sched.mem.pin = "FALSE"
```
- Windows Updateの適用&無効化
- Windows Defenderの無効化
- FlareVMの実行 => 全部
- https://github.com/mandiant/flare-vm
# ツール
## パッケージマネージャ経由
- Signature Yara forge
- https://github.com/YARAHQ/yara-forge/releases
chocoパッケージ
```powershell
choco install ericzimmermantools,sysinternals,strings2
```
pipパッケージ
```
python -m pip install --upgrade pip
pip freeze
pip install oletools pdf-tools yara sysinternals pe flare binwalk pecli qiling
```
## Ghidraを使う場合には
- Ghidrathonを使えるように手動でインストール
- 好みの拡張機能
- Ghidrathon用のショートカット作成の時にICONを設定
## その他
- CyberChef
- PDF関連 https://blog.didierstevens.com/programs/pdf-tools/
- 証明書 https://blog.didierstevens.com/programs/disitool/
## VSCodeの拡張機能
- PowerShell
- bash
- zsh
- Python
- JavaScript
- PHP
- Java?
- Yara
# 使いやすさ
## パスの追加
diec.exe用
- C:\Tools\die
新規追加したツールを都度追加
## ショートカット作成
好み:上2段の右端側
- IDA
- dnSpy
- DIE
- PEStudio
- x64dbg/x32dbg
- VSCode
- Systeminformer
- Procmon
- RegShot
- Sysmon
- WinDbg
- Hollows_Hunter
- PE-Sieve
## 背景など
- ダークモード
- ツールによっては見づらいので画像をかえてもいいかも
チートシートの整理
結構作り替えた、見やすいように&わかりやすいように
修正方法
- ツール、OS、手法ごとにチートシートを作成 (もともとはOSCPのセクションごとだった)
- 重複が結構あるが、検索できるためあんまり気にせず
- Obisidianを使った(Markdown形式)
Fuffは結構使いこなすと面白そうなので、張っておきます。
Tools Fuff
デフォルトでFUZZをワードリストに置き換えてリクエストをする
# パラメータ
- -ft '>200' 時間によりフィルター
- -fw 9 文字数によるフィルター
- -fs 900 サイズによるフィルター
- -fc 404 ステータスコードによるフィルター
- -fr abc 文字によるフィルター
- -b クッキーの設定
- -H ヘッダの設定
- `-x http://localhost:8080` プロキシ設定 重いときは外したほうがいいかも?
# 困ったとき
- 辞書を検索
```bash
find /usr/share/seclists -name "*windows*"
```
- オプション検索
```bash
ffuf | grep -i header
```
# ドメイン
- 仮想ホストをスキャン
```bash
ffuf -u http://domain.local -H "Host: FUZZ.domain.local" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fs 1131
```
# ディレクトリ
- 404以外を探す
```bash
ffuf -u http://domain.local -w /usr/share/wordlists/dirb/common.txt -fc 404
```
- 認証回避のできるディレクトリ
```bash
grep "url.com/" /usr/share/seclists/Fuzzing/403/403.md | sed 's|url.com/||g'> ./403.txt
```
# ファイル
- 拡張子を指定してファイルを調査
```bash
ffuf -u http://domain.local/admin/FUZZ -w /usr/share/wordlists/dirb/common.txt -e .pdf,.txt,.php
```
# メソッド
```bash
ffuf -u "https://domain.com/admin/" -X "FUZZ" -b PHPSESSID=abcdef0123456789 -w /usr/share/seclists/Fuzzing/http-request-methods.txt -t 60 -fs 1293
```
# ヘッダ
- スタンダード
```bash
ffuf -u "https://domain.com/admin/" -H "FUZZ: " -b PHPSESSID=abcdef0123456789 -w /usr/share/seclists/Miscellaneous/Web/http-request-headers/http-request-headers-common-standard-fields.txt -t 60 -fs 1712 -x http://localhost:8080
```
- 非スタンダード
```bash
ffuf -u "https://domain.com/admin/" -H "FUZZ: " -b 'PHPSESSID==abcdefghjiklmn' -w /usr/share/seclists/Miscellaneous/Web/http-request-headers/http-request-headers-common-non-standard-fields.txt -t 60 -fs 1712 -x http://localhost:8080
```
# パラメータ
```bash
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u 'https://domain.com/admin/?FUZZ=' -b PHPSESSID=abcdef0123456789 -fs 1678
```
# 認証試行
- 直打ち
```bash
ffuf -w users.txt:FUZZ1 -w passwords.txt:FUZZ2 -u https://domain.com -X POST -b PHPSESSID=abcdef0123456789
```
- リクエストファイル burpから保存 login.req burp経由で接続
```bash
ffuf -w users.txt:FUZZ1 -w passwords.txt:FUZZ2 -request login.req -u https://domain.com/login.php -x http://localhost:8080 -t 60
```
# 脆弱性
- 特殊文字
```bash
ffuf -u "https://domain.local/admin/?debug=FUZZ" -b 'PHPSESSID==abcdefghjiklmn' -w /usr/share/seclists/Fuzzing/special-chars\ +\ urlencoded.txt -t 60 -fs 1712
```
- インジェクション
```bash
ffuf -u "https://domain.local/admin/?debug=FUZZ " -b PHPSESSID=abcdef0123456789 -w /usr/share/seclists/Fuzzing/big-list-of-naughty-strings.txt -t 60 -fs 1712
```
- インジェクション
```bash
ffuf -u "https://domain.local/admin/?debug=FUZZ" -b PHPSESSID=abcdef0123456789 -w /usr/share/seclists/Fuzzing/fuzz-Bo0oM-friendly.txt -t 60 -fs 1712
```
- SQLi
```bash
ffuf -w /usr/share/seclists/Fuzzing/Databases/SQLi/Generic-SQLi
-u 'https://domain.local/admin/?vuln=FUZZ' -b PHPSESSID=abcdef0123456789 --fs 1678
```
- LFi
```bash
ffuf -u "https://domain.local/admin/?debug=FUZZ" -b PHPSESSID=abcdef0123456789 -w /usr/share/seclists/Fuzzing/LFI/LFI-Windows-adeadfed.txt -fs 1712
```
# ヘルプメッセージ
- フィルター
```bash
MATCHER OPTIONS:
-mc Match HTTP status codes, or "all" for everything. (default: 200-299,301,302,307,401,403,405,500)
-ml Match amount of lines in response
-mmode Matcher set operator. Either of: and, or (default: or)
-mr Match regexp
-ms Match HTTP response size
-mt Match how many milliseconds to the first response byte, either greater or less than. EG: >100 or <100
-mw Match amount of words in response
FILTER OPTIONS:
-fc Filter HTTP status codes from response. Comma separated list of codes and ranges
-fl Filter by amount of lines in response. Comma separated list of line counts and ranges
-fmode Filter set operator. Either of: and, or (default: or)
-fr Filter regexp
-fs Filter HTTP response size. Comma separated list of sizes and ranges
-ft Filter by number of milliseconds to the first response byte, either greater or less than. EG: >100 or <100
-fw Filter by amount of words in response. Comma separated list of word counts and ranges
```
- クッキー
```bash
-b PHPSESSID=abcdef0123456789
```
# 辞書
| **Command** | **Description** |
| ---------------------------------------------------------------------- | --------------- |
| /usr/share/secLists/Discovery/Web-Content/directory-list-2.3-small.txt | ディレクトリ |
| /usr/share/secLists/Discovery/Web-Content/web-extensions.txt | 拡張し |
| /usr/share/secLists/Discovery/DNS/subdomains-top1million-5000.txt | ドメイン |
| /usr/share/secLists/Discovery/Web-Content/burp-parameter-names.txt | パラメータ |
| /usr/share/seclists/Fuzzing/* | ファジング |
本番前
予定を入れる
- たぶん書くことない、ログインしたらわかる
試験の要件を読んでおく(レポートの書き方はメモの癖付けとして事前に見ておいたほうがいいかも)
PCの音声設定とか、ネットワーク回線とか、カメラとか確認しておく
結論
- 完璧主義、Try Harder精神は時間のわりに学びがないかもしれない
- 深く掘り下げるのは必要だが、そもそも何をしたらいいかわからない段階でひたすらやっていくのは体力はつくが遠回りすぎる気がする
- 手順あってるけどバグとかもある、なおかつInputがOSCPプラットフォーム上だけだとたらない気がする
- わからない場合積極的に答えを見るべきだし、エラーが発生したときにラボの再起動やDiscordをに積極的にみるべき
- WriteUpを見ながら手を動かせるプラットフォームを利用するのが一番手法を覚えた気がする&Flagが取れるようになった
FYI: OSCP受験中に書いたGPUでのハッシュクラック
