Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
こわくないOSWE
Search
y0d3n
September 07, 2024
1
660
こわくないOSWE
2024/09/07 OffSecLab MeetUp in 渋谷オフ会
y0d3n
September 07, 2024
Tweet
Share
More Decks by y0d3n
See All by y0d3n
"違和感" から見つける脆弱性
y0d3n
3
1.7k
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
180
21k
Faster Mobile Websites
deanohume
305
30k
GitHub's CSS Performance
jonrohan
1030
460k
It's Worth the Effort
3n
183
27k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Speed Design
sergeychernyshev
25
620
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How GitHub (no longer) Works
holman
310
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Transcript
こわくないOSWE 2024/09/07 OffSecLab MeetUp in 渋⾕オフ会 @y0d3n
@y0d3n $ whoami 名前: 養⽥ 篤也 (よーでん) SNS : @y0d3n
/ @y0d3n.bsky.social 所属: GMOサイバーセキュリティ byイエラエ株式会社 興味: Web Security, Web Pentesting 2
@y0d3n まずは責務を果たします 3
@y0d3n 皆様にひとこと 本⽇はGMO Yours フクラスにお越し頂きありがとうございます。 本題に⼊る前に3点 ほどアナウンスさせてください。 4
@y0d3n ご案内 - お⼿洗いは16Fフロアのゲートを出て右側にあります。 - 16Fゲートはゲストカードをタッチすれば⾃由に通れます。 - 飲み物の⾃動販売機は⾃由にご利⽤ください。 - ⼀部無料のものもあります。
- 建物の外に出る際、ゲストカードは回収されます。 - 8Fのゲートはゲストカードをタッチしても空きません。 - ⼀番左のレーン、回収ボックスに⼊れることでゲートが開きます。 5
@y0d3n ついでに告知 6
7
@y0d3n IERAE DAYS 2024 やります GMOサイバーセキュリティbyイエラエが送るホワイトハッカーの祭典が再び開催! ⽇時: 2024/09/26(⽊) 09:30 ~ 会場: ここ
(GMO Yours フクラス) 2次抽選申し込み 9/11 まで!→ https://gmo-cybersecurity.com/event/ieraedays24/ 8
9
@y0d3n 学⽣‧エンジニアを対象としたネットワーキングパーティ主体イベント ⽇時: 2024/09/26(⽊) 17:30 ~ 会場: ここ (GMO Yours フクラス) 2次抽選申し込み
9/18 まで!→ IERAE NIGHT 2024 やります https://ierae.connpass.com/event/329950/ 10
11
@y0d3n CODE BLUE 2024 でOffSecトレーニングやります OSCP PEN-200トレーニングを⽇本語で! 講師は業界トップのルスラン⽒が担当 今だけ10%OFFになってるので是⾮! 詳細は→
https://codeblue.jp/2024/training/offsec2024.html 12
13
@y0d3n それでは、本題 「こわくないOSWE」 14
@y0d3n OSWEとは - OffSec Web Expert - WEB-300: Advanced Web
Attacks and Exploitation - Webペネトレーションテストやソースコード診断にフォーカスした資格 - Webアプリ内での権限昇格 35pt + RCE 15pt のマシンが2台 - 85pt 以上で合格 - 実技(48h) + レポート作成(24h) の最⻑72時間 15
@y0d3n 扱う脆弱性 - XSS - SQL Injection - SSTI -
LFI / RFI - Directory Traversal - Prototype Pollution - Insecure Deserialization - … 16
@y0d3n 300 Level Coursesで⽐較してみる 300系で⼀番合格率が⾼い つまり、300系で⼀番簡単(ホントか?) 敷居は低いはず。なのに‧‧‧ 17
@y0d3n Discord は #oswe-web300 だけ 荒野 18
@y0d3n OSWEチャンネルも盛り上がるといいな。。。 ということで 19
@y0d3n 知り合いのOSCE3に聞いてみた どれが一番簡単だった? 20
@y0d3n 知り合いのOSCE3に聞いてみた どれが一番簡単だった? OSWEだね 21
@y0d3n 知り合いのOSCE3に聞いてみた どれが一番簡単だった? OSWEだね ソースコードはいつも読んでるし 22
@y0d3n 知り合いのOSCE3に聞いてみた OSWEだね どれが一番簡単だった? ソースコードはいつも読んでるし 慣れてれば一目でわかるバグばかりだし 23
@y0d3n 知り合いのOSCE3に聞いてみた ソースコードはいつも読んでるし OSWEだね どれが一番簡単だった? 慣れてれば一目でわかるバグばかりだし エスパー要素が少ないのが嬉しいね 24
@y0d3n 知り合いのOSCE3に聞いてみた ソースコードはいつも読んでるし OSWEだね どれが一番簡単だった? 慣れてれば一目でわかるバグばかりだし エスパー要素が少ないのが嬉しいね 25
@y0d3n このコード、どこが問題? <body> <form method="GET"> <input type="text" name="input"> <input type="submit"
value="送信"> </form> <?php if (!empty($_GET["input"])) { print $_GET["input"]; } ?> </body> 26
@y0d3n このコード、どこが問題? <body> <form method="GET"> <input type="text" name="input"> <input type="submit"
value="送信"> </form> <?php if (!empty($_GET["input"])) { print $_GET["input"]; } ?> </body> XSS 27
@y0d3n このコード、どこが問題? <?php try { $db = new PDO('mysql:host=mysql;dbname=db', $user,
$pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $sql = 'SELECT age FROM users WHERE name=\'' . $_GET["input"] . '\';'; $stmt = $db->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); } 28
@y0d3n このコード、どこが問題? <?php try { $db = new PDO('mysql:host=mysql;dbname=db', $user,
$pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $sql = 'SELECT age FROM users WHERE name=\'' . $_GET["input"] . '\';'; $stmt = $db->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); } SQL Injection 29
@y0d3n このコード、どこが問題? <body> <form method="GET"> <input type="text" name="file"> <input type="submit"
value="送信"> </form> <?php if (isset($_GET['file'])) { $file = $_GET['file']; include($file); } ?> </body> 30
@y0d3n このコード、どこが問題? <body> <form method="GET"> <input type="text" name="file"> <input type="submit"
value="送信"> </form> <?php if (isset($_GET['file'])) { $file = $_GET['file']; include($file); } ?> </body> Directory Traversal 31
@y0d3n このコード、どこが問題? <body> <form method="GET"> <input type="text" name="file"> <input type="submit"
value="送信"> </form> <?php if (isset($_GET['file'])) { $file = $_GET['file']; include($file); } ?> </body> Directory Traversal Local File Inclusion Remote File Inclusion 32
@y0d3n 知り合いのOSCE3に聞いてみた ソースコードはいつも読んでるし OSWEだね どれが一番簡単だった? 慣れてれば一目でわかるバグばかりだし エスパー要素が少ないのが嬉しいね 33
@y0d3n デバッグ⽤のVMが提供されるため、 ソースコードを⾒ながら細かいデバッグが可能 → ⽅針が⽴てやすく、解きやすさに直結 エスパー要素が少ない Kali Target1 Target1 Debug
VM Target2 Debug VM Target2 34
@y0d3n まずはページとパラメータの把握 ⽅針の⽴て⽅ TOP Login Register Password reset Dashboard Profile
Update Other Profile Site config Not User User Admin … 35
@y0d3n SQL Injectionできないか? 認証ロジックに不備ないか? Admin Site config 認証に⽬を向ける TOP Login
Register Password reset Dashboard Profile Update Other Profile Not User User … 36
@y0d3n パスワードリセットトークンは推測‧総当たり可能か? Admin Site config 認証に⽬を向ける TOP Login Register Password
reset Dashboard Profile Update Other Profile Not User User … 37
@y0d3n Site config 他ユーザのプロフィールを更新できないか? role=admin みたいに権限昇格できないか? 認可に⽬を向ける TOP Login Register
Password reset Dashboard Profile Update Other Profile Not User User Admin … 38
@y0d3n Site config 他ユーザのIDは推測‧総当たり可能か? 閲覧時に発⽕するXSSがないか? (Admin bot が要る場合を想定) 認可に⽬を向ける TOP
Login Register Password reset Dashboard Profile Update Other Profile Not User User Admin … 39
@y0d3n 権限昇格に解放される機能でRCEするのは(おそらく)確実 Admin 取得後 TOP Dashboard Site config Not User
User Admin … … Update template Debug 40
@y0d3n SSTIできないか? RCEできそうな機能に⽬を向ける TOP Dashboard Site config Not User User
Admin … … Update template Debug 41
@y0d3n OS Command Injection とかできないか? Web Shell みたいな機能無いか? RCEできそうな機能に⽬を向ける TOP
Dashboard Site config Not User User Admin … … Update template Debug 42
@y0d3n 目標は? 認証回避 情報盗取 情報更新 RCE … DBMSは? MySQL MSSQL
PostgreSQL Oracle DB … 対策は? 無し クォート禁止 数字のみ 空白禁止 前提は? 非エスケープ クォートで 囲まれない エスケープ済 SQL Injectionの思考 … … SQL操作不可 43
@y0d3n 目標は? 認証回避 情報盗取 情報更新 RCE … DBMSは? MySQL MSSQL
PostgreSQL Oracle DB … 対策は? 無し クォート禁止 数字のみ 空白禁止 前提は? 非エスケープ クォートで 囲まれない エスケープ済 SQL Injectionできないパターン … … SQL操作不可 44
@y0d3n 目標は? 認証回避 情報盗取 情報更新 RCE … DBMSは? MySQL MSSQL
PostgreSQL Oracle DB … 対策は? 無し クォート禁止 数字のみ 空白禁止 前提は? 非エスケープ クォートで 囲まれない エスケープ済 SQL Injectionできそうなパターン … … SQL操作不可 45
@y0d3n レポート要件(⼀部) - local.txt を抜き出す - local.txt と proof.txt の両⽅を抜き出す
- リバースシェルを⽣成する どれかを 完全⾃動化したPoC の作成が必要 → マシンに触れる実技48時間のうちにPoCを完成させないと 実質詰み 46
@y0d3n 完全⾃動化ということ - ユーザ登録‧ログイン - ペイロード付きのリクエストを投げて攻撃 - CSRF token等を都度取得して利⽤ -
複数セッションの使い分け - Blindで1⽂字ずつ情報を抜くのを全⾃動化 - bot が XSS を踏むまで待機して、セッションハイジャック これらが安定して動作するexploit 47
@y0d3n 完全⾃動化ということ - ユーザ登録‧ログイン - ペイロード付きのリクエストを投げて攻撃 - CSRF token等を都度取得して利⽤ -
複数セッションの使い分け - Blindで1⽂字ずつ情報を抜くのを全⾃動化 - bot が XSS を踏むまで待機して、セッションハイジャック これらが安定して動作するexploit めんどい!! 48
@y0d3n スニペットの⽤意 できるだけ速やかに PoC を書くためのいろいろな準備 - 各攻撃の基本的な exploit の⽤意 -
レスポンスの任意の箇所を取得する正規表現 - Blind SQL Injection は⼆分探索やスレッド化 - Webサーバを建て、bot からのリクエストを起点に exploit 49
@y0d3n 準備が⼤事 50
@y0d3n 準備が⼤事 Lab Writeup VSCode Debug の tips 言語ごとの tips
Additional Lab Writeup PoC テンプレート 51
@y0d3n 総合して、⾃分の意⾒ guessや運に左右されにくく、思考⼒と事前準備がものを⾔う試験 ちゃんと対策すれば、OSWEはこわくない! 52