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
640
こわくない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
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Optimizing for Happiness
mojombo
376
69k
It's Worth the Effort
3n
183
27k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Designing the Hi-DPI Web
ddemaree
280
34k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
Code Reviewing Like a Champion
maltzj
519
39k
Building an army of robots
kneath
302
42k
What's new in Ruby 2.0
geeforr
342
31k
Measuring & Analyzing Core Web Vitals
bluesmoon
1
41
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