Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
攻撃と防御で実践するプロダクトセキュリティ演習_2024(導入編)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Recruit
PRO
August 09, 2024
Technology
1.9k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
攻撃と防御で実践するプロダクトセキュリティ演習_2024(導入編)
2024年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 09, 2024
More Decks by Recruit
See All by Recruit
局所最適は悪ではない。壊れているのは指標です。量と質を同時に見る先行指標の設計
recruitengineers
PRO
3
1.4k
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
9
2.6k
大規模フロントエンド開発におけるmonorepoという選択肢
recruitengineers
PRO
2
120
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
330
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
340
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
6
3.1k
ブラウザ研修 2026
recruitengineers
PRO
8
2.2k
事業価値と Engineering 2026年度版
recruitengineers
PRO
60
31k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.5k
Other Decks in Technology
See All in Technology
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
250
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
550
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
340
AIエージェント時代、Kaggleにどう取り組むか
takanao
2
470
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
210
Adversary Infrastructure Hunting101
disconinja
0
190
キヨさん、67歳。AIコーディングエージェントに挑む
happysamurai294
0
140
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
2.7k
Vibe-to-Spec開発_実践ガイド
happysamurai294
0
140
Snowflake でできることが増えたら、 ABAC が必要になった
kaeton
0
130
AIに任せられるFlutterコードベースを作る 〜仕様をコードで表し、ハーネスで守る〜
myohei
1
610
"AWSはちょっと苦手"でも大丈夫。AWS Blocks で手軽に作る Flutter のバックエンド #FlutterKaigi
tacck
PRO
0
120
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
2
990
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
640
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
730
Optimizing for Happiness
mojombo
378
71k
Fireside Chat
paigeccino
43
4.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
620
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
560
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
Game over? The fight for quality and originality in the time of robots
wayneb77
1
320
Transcript
߈ܸͱޚͰ࣮ફ͢ΔϓϩμΫτηΩϡϦςΟԋश ʙಋೖύʔτʙ ग़Ո ༞و ๎
ΠϯτϩμΫγϣϯ 2
3 ग़Ո༞و / Yuki Ideya • ݄ʙ 3&%5&".ॴଐ • ͦΕҎલۚ༥ܥͷ4*FSɺηΩϡϦςΟϕϯμʔͰެிͷڭҭࣄ
ۀͳͲ͍ͬͯ·ͨ͠ ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾࠓޙΓ͍ͨ͜ͱʳ • ੜ"*ͷηΩϡϦςΟपΓษڧͨ͠Γͱ͔ ηΩϡϦςΟҎ֎ͷࣝ ՝ײʜʂ • ͷௐࢠ͕ຫੑతʹѱ͍ͷͰɺͣ˓ͩΜͱ͔ͱੜ"*ͰΓΛΘ Γʹͬͯ͘ΕΔΈΛࡧத • ւಓ͔ΒϦϞʔτͰಇ͍ͯͯग़ࣾ΄΅ͳ͍ͷͰ߈ΊͨαϒΧϧͬΆ ͍ΛങͬͨΓ͢ΔͷͰ͕͢ɺணΔ໘͕ͳ͍ͯͭ͘ޙչ͠·͢ ظͷ࣋පͰͷௐࢠ͕ѱΊͳͷͰ֏͍ͳͲͰ͓ฉ͖͍ۤ͠໘͕͋Δ͔͠Ε·ͤΜɻ ͪΌΜͱ࠷ޙ·ͰίϯςϯπΛ͓ಧ͚Ͱ͖ΔΑ͏४උສͳͷͰ҆͝৺͍ͩ͘͞ʜʂ
4 ๎ / Tomoya Nakanishi • य़ʙ 3&%5&".ॴଐ •
ϦΫϧʔτ৽ଔೖࣾ ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾࠓޙΓ͍ͨ͜ͱʳ • ϖωτϨʔγϣϯςετͷࢿ֨ษڧɺҰ൪࠷ۙऔͬͨͷ04&1 • μΠϏϯάʹߦ͘ճ͕૿͍͑ͯΔ
5 ඇެ։
ಋೖฤ(1)ͷΞδΣϯμ 6 ΠϯτϩμΫγϣϯ ԋशڥΛ৮ͬͯΈΑ͏ 3. ϓϩμΫτηΩϡϦςΟͱ੬ऑੑ 4. WebΞϓϦέʔγϣϯʹ͓͚Δ੬ऑੑͱ߈ܸख๏
5. ੬ऑੑͷରࡦ 6. WebΞϓϦέʔγϣϯʹର͢Δ߈ܸख๏ΛΑΓৄ͘͠ ษڧ͍ͨ͠ํ
ࠓճͷߨٛ ߈ܸ ͱ ޚ Ͱ࣮ફ͢ΔϓϩμΫτηΩϡϦςΟԋशͰɺ 7 ߈ܸऀ͕ͲͷΑ͏ʹ੬ऑੑΛѱ༻͢Δͷ͔ΛΔ͜ͱͰɺ ਖ਼͘͠੬ऑੑΛमਖ਼͢ΔͨΊͷࣝͱํ๏ Λʹ͚ͭΔ͜ͱΛతͱ͠·͢
• ڐՄ͞ΕͨγεςϜҎ֎ʹࢼ͞ͳ͍͜ͱ ʢෆਖ਼ΞΫηεېࢭ๏ʣ • ਖ਼ͳཧ༝ͳ͘ϚϧΣΞΛऔಘɾอ༗͠ͳ͍͜ͱ ʢෆਖ਼ࢦྩి࣓తهʹؔ͢Δࡑʣ • Πϯλʔωοτ্Ͱ͞ΕΔιϑτΣΞͷར༻࣌ʹɺͦΕΒͷ৴པੑΛ ࣄલʹ֬ೝ͢Δ͜ͱ ʢใηΩϡϦςΟରࡦج४ʣ
ҙࣄ߲ 8 ͜ͷߨٛͰ࣮ࡍʹѱ༻͕ՄೳͳίʔυΛऔΓѻ͍·͢ɻ औΓѻ͍ʹेʹҙ͍ͯͩ͘͠͞ɻ
ԋशڥΛ৮ͬͯΈΑ͏ 9
10 ඇެ։
11 ඇެ։
12 ඇެ։
1-1. ػೳΛࢼ͠ͳ͕ΒιʔείʔυΛݟͯΈ·͠ΐ͏ 1-2. ʲൃలʳ੬ऑੑΛ୳ͯ͠Έ·͠ΐ͏ 13 ԋश1ɿԋशڥΛ৮ͬͯΈ·͠ΐ͏(࣮ࢪ࣌ؒ: 15)
ϓϩμΫτηΩϡϦςΟͱ੬ऑੑ 14
15 ηΩϡϦςΟ্ͷऑ͕͋ΔϓϩμΫτΛ࡞ΔͱͲ͏ͳΔʁ
16 ඇެ։
17 ඇެ։
18 ඇެ։
੬ऑੑ ʢVulnerabilityʣ 19 ηΩϡϦςΟ্ͷऑ͕͋ΔϓϩμΫτΛ࡞ΔͱͲ͏ͳΔʁ ιϑτΣΞʹ͓͚Δ ͱ͍͏
ੈͷதͷγεςϜɾιϑτΣΞʹରͯ͠ ຖͲΕ͚ͩͷ੬ऑੑ͕ใࠂ͞Ε͍ͯΔʁ Q. 20
1ฏۉ80݅ۙ͘ใࠂ͞Ε͍ͯΔʢ2023ʣ※ WebαʔϏεͳͲͷར༻ऀͷରॲͷඞཁ͕ͳ͍ͷΛ߹ΘͤΔͱɺ ΑΓଟ͘ͷͷ͕ଘࡏ͢Δͱߟ͑ΒΕΔ A. 21 ※CVEʢڞ௨੬ऑੑࣝผࢠʣͷ༩ϕʔε
ͲΜͳʹ੬ऑੑ͕ใࠂ͞Ε͍ͯΔʁ • LinuxWindowsɺAndroidɺiOSͳͲͷOS • ϓϩάϥϛϯάݴޠͷඪ४ϥΠϒϥϦ • ήʔϜػͳͲͷΈࠐΈػث • ChromeFirefoxͳͲͷϒϥβ ྫ͑ɾɾɾ
ͷճΓͰ͘ར༻͞ΕΔ༗໊ͳιϑτΣΞʹ੬ऑੑ͕ൃݟ͞Ε͍ͯΔ զʑ੬ऑੑΛ࡞ΓࠐΜͰ͠·͏Մೳੑेʹ͋Δ 22
WebΞϓϦέʔγϣϯʹ͓͚Δ੬ऑੑͱ߈ܸख๏ 23
ຊηΫγϣϯͷΞδΣϯμ 24 1. ຊηΫγϣϯͰऔΓѻ͏੬ऑੑͷհ 2. XSS (Cross-Site Scripting) 3. IDORʢInsecure
Direct Object Reference) 4. CSRF (Cross-Site Request Forgery) 5. SQL Injection 6. Path Traversal 7. DoS (Denial-of-Service) 8. OS Command Injection
25 ඇެ։
26 XSSʢCross-Site Scriptingʣ
27 ඇެ։
28 ඇެ։
XSSʹΑΔ߈ܸྫ 29 ใऔ ѱҙͷ͋Δίϯςϯπͷվม • $PPLJFͷऔʹΑΔϩάΠϯηογϣϯͷͷͬͱΓ • $PPLJFΛ༩ͨ͠ϦΫΤετ࣮ߦͱ༰ͷಡΈऔΓ • ը໘ʹදࣔ͞Εͨใͷࡡऔ
• ٗϖʔδͷදࣔͳͲ
XSSͷݪཧ 30 ѱҙͷ͋Δ+BWB4DSJQͷίʔυ͕ ຒΊࠐΊͯ͠·͏ϖʔδ
XSSͷݪཧ 31 $PPLJFΛࣗͷαʔόʔʹૹ৴ ͤ͞ΔίʔυΛຒΊࠐΜͰΖ ͏ʂ 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU
XSSͷݪཧ 32 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU 被害者 ͜ͷਓͷϓϩϑΟʔϧؾʹͳ Δʂ ΞΫηε࣌ʹ࣮ߦ
XSSͷݪཧ 33 ϖϯΪϯ͘Μͷ ηογϣϯήοτʂ 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU 被害者 ඃऀϖʔδΛ
Ӿཡ͚ͨͩ͠Ͱ $PPLJF͕ൈ͔Εͯ͠·͏ ͜ͷਓͷϓϩϑΟʔϧؾʹͳΔʂ ΞΫηε࣌ʹ࣮ߦ
ૉͳٙ 34 攻撃者 被害者 アクセスすると Cookieが抜かれる JavaScript ߈ܸऀ͕༻ҙͨ͠ ϖʔδʹΞΫηε ߈ܸऀ͕༻ҙͨ͠ϖʔδͷ+BWB4DSJQUͰ
ԋशڥͷαΠτͷใΛऔΕͳ͍ͷʁ ٙ
ૉͳٙ 35 攻撃者 被害者 アクセスすると Cookieが抜かれる JavaScript ߈ܸऀ͕༻ҙͨ͠ ϖʔδʹΞΫηε ߈ܸऀ͕༻ҙͨ͠ϖʔδͷ+BWB4DSJQUͰ
ԋशڥͷαΠτͷใΛऔΕͳ͍ͷʁ ٙ 401 4BNF0SJHJO1PMJDZ ͰͰ͖ͳ͍
XSSʹΑΔ߈ܸྫ 36 https:// ...のページ window.document.body window.localStorage Cookie(※) https://evil.example.com/...のページ ※originより制限が緩いsite単位での管理 ѱҙͷ͋Δ+BWB4DSJQU
ブラウザ Origin ͕ҟͳΔϖʔδ ͜͜ͷ෦Λ 0SJHJOͱ͍͏ ຊདྷϒϥβ্Ͱɺ͋Δ63-ʹΑͬͯϩʔυ͞ΕΔϦιʔεʢ+BWB4DSJQUͷίʔυͳͲʣ͔Β ผαΠτͷϦιʔεΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍ ˠಉҰΦϦδϯϙϦγʔʢ4BNF0SJHJO 1PMJDZ 401ʣʹΑΔอޢ
XSSʹΑΔ߈ܸྫ ຊདྷϒϥβ্Ͱɺ͋Δ63-ʹΑͬͯϩʔυ͞ΕΔϦιʔεʢ+BWB4DSJQUͷίʔυͳͲʣ͔Β ผαΠτͷϦιʔεΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍ ˠ ಉҰΦϦδϯϙϦγʔʢ4BNF0SJHJO 1PMJDZ 401ʣʹΑΔอޢ 37 https:// ...のページ
window.document.body window.localStorage Cookie(※) https://evil.example.com/...のページ ※originより制限が緩いsite単位での管理 ѱҙͷ͋Δ+BWB4DSJQU ブラウザ Origin ͕ҟͳΔϖʔδ GFUDI ʹΑΔϨεϙϯεಡΈऔΓ
38 XSSʹͭͳ͕Δةݥͳ࣮ྫ +BWB4DSJQUͷίϯςΩετͰղऍ͞ΕΔ෦ <img onload=“ユーザーの入力”> document.body.innerHTML = “ユーザーの入力” document.write(“ユーザーの入力”) ʹ
Ϣʔβʔͷೖྗ͕͋Δ ˠ ةݥͳίʔυʹͳΔ K2VFSZͷK2VFSZBQQFOE 3FBDUKTͷEBOHFSPVTMZ4FU*OOFS)5.- ͳͲ ϥΠϒϥϦΛ͍ͬͯͯҙ͕ඞཁͳ෦͋Δɻ ࣮ྫ ࣮ྫ ࣮ྫ note
39 IDOR ʢInsecure Direct Object Referenceʣ
40 ඇެ։
41 ඇެ։
42 ඇެ։
43 IDORͷݪཧ POST /posts/ comment=今⽇はいい天気☀ ID: 1ͷߘΛߋ৽͢ΔϦΫΤετ POST /posts/ comment=こんにちは︕
ID: 2ͷߘΛߋ৽͢ΔϦΫΤετ ߘ͝ͱʹ*%ΛׂΓͯͯαʔόʔଆͰࣝผ ฤूରͷߘΛϦΫΤετ࣌ʹ*%Ͱࢦఆ A͞Μ͕ࣗͷ ߘʢID: 1ʣΛߋ৽ ߈ܸऀ͕ࣗͷ ߘʢID: 2ʣΛߋ৽ "͞Μ ʮࠓ͍͍ఱؾ‗ʯ ߈ܸऀ ʮ͜Μʹͪʯ ߘ ߘ
44 IDORͷݪཧ POST /posts/ comment=私はお⾦持ちです︕ ID: 2ͷߘΛߋ৽͢ΔϦΫΤετ ߈ܸऀ͕ࣗͷ ߘʢID: 2ʣΛߋ৽
他⼈の投稿IDに 変更して更新 "͞Μ ʮࢲ͓ۚ࣋ͪͰ͢ʂʯ ߈ܸऀ ʮ͜Μʹͪʯ ߘ ߘ
45 CSRF (Cross-Site Request Forgery)
46 ඇެ։
47 ඇެ։
αʔόʔɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯཧΛϦΫΤετ࣌ʹ Ճ͞ΕΔ$PPLJFϔομͷͰߦ͏ ϒϥβଆͰɺϦΫΤετൃੜ࣌ʹαΠτผʹอଘ͞Ε͍ͯͨ$PPLJFΛࣗಈతʹ༩͢Δ 48 CSRFͷݪཧ ϩάΠϯ Ϣʔβʔhoge https://example.com Set-Cookie: sessionid=sdfhaiew
ϒϥβʹ CookieΛอଘ
αʔόʔɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯཧΛϦΫΤετ࣌ʹ Ճ͞ΕΔ$PPLJFϔομͷͰߦ͏ ϒϥβଆͰɺϦΫΤετൃੜ࣌ʹαΠτผʹอଘ͞Ε͍ͯͨ$PPLJFΛࣗಈతʹ༩͢Δ 49 CSRFͷݪཧ ϩάΠϯ Set-Cookie: sessionid=sdfhaiew ߘͷ͍͍Ͷ ߘͷฤू
Cookie: sessionid=sdfhaiew Cookieͷ͔Β Ϣʔβʔhoge͔ΒͷϦΫΤετ ͱͯ͠ॲཧ ϒϥβ͔Β https://example.com ͷϦΫΤετૹ৴ Ϣʔβʔhoge https://example.com ϒϥβʹ CookieΛอଘ Cookie: sessionid=sdfhaiew ϦΫΤετʹ ࣗಈతʹ$PPLJF༩
ࣗಈͰ$PPLJFૹ৴͞ΕΔੑ࣭Λར༻ͯ͠ ଞͷϢʔβʔ͕ҙਤ͠ͳ͍ϦΫΤετૹ৴͢Δ63-ΞΫηεͤͨ͞ΒͲ͏ͳΔʁ 50 CSRFͷݪཧ Ϣʔβʔͷআ ʮϢʔβʔͷআʯͷϦΫΤετ ͱಉ͡63-Λૹ৴ ϩάΠϯࡁΈͷϒϥβͰ ϦϯΫΛ։͘ Ϣʔβʔhoge
Cookieͷ͔Β Ϣʔβʔhoge͔ΒͷϦΫΤετ ͱͯ͠ॲཧ ˠ Ϣʔβʔͷҙਤʹͯ͠উखʹΞΧϯτ͕আ͞Εͯ͠·͏ Cookie: sessionid=sdfhaiew ϦΫΤετʹ ࣗಈతʹ$PPLJF༩ ϒϥβ͔Β IUUQTFYBNQMFDPN ͷϦΫΤετૹ৴
51 SQL Injection
52 ඇެ։
53 ඇެ։
8FCΞϓϦέʔγϣϯͰσʔλͷอଘʹσʔλϕʔεʢ%#ʣ͕ར༻͞ΕΔ͜ͱ͕ଟ͍ 54 DBαʔόʔ Webαʔόʔ SQL Injectionͷݪཧ ίϝϯτʹ”hoge”͕ ؚ·ΕΔߘΛݕࡧ ”hoge”ΛؚΉίϝϯτΛ DBݕࡧ͢Δॲཧ
ݕࡧ݁ՌͷϨίʔυ %#ͷૢ࡞ʹԠͯ͡ ൃߦ͢Δ42-ΫΤϦΛΈཱͯ SELECT * FROM users WHERE comment LIKE ‘%hoge%’
55 42-*OKFDUJPOͷݪཧ 4&-&$5 '30.VTFST8)&3&DPNNFOU-*,&bϢʔβʔͷೖྗ` ʮ`ʯͰғΘΕͨ෦จࣈྻͱͯ͠ղऍ ϢʔβʔͷೖྗΛར༻͢Δ42-ΫΤϦ
56 42-*OKFDUJPOͷݪཧ 4&-&$5 '30.VTFST8)&3&DPNNFOU-*,&bϢʔβʔͷೖྗ` ʮ`ʯͰғΘΕͨ෦จࣈྻͱͯ͠ղऍ 4&-&$5 '30.VTFST8)&3&DPNNFOU-*,&b`6/*0/4&-&$5 '30.VTFST b` Ϣʔβʔͷೖྗͷ్தʹʮ`ʯؚ͕·Ε͍ͯͨΒɾɾɾʁ
͜͜Ͱจࣈྻͱͯ͠ऴΘΓ จࣈྻͰͳ͍෦ͱͯ͠ղऍ͞ΕΔ ͖ͳΫΤϦจΛهͰ͖Δ ϢʔβʔͷೖྗΛར༻͢Δ42-ΫΤϦ
ใ࿙͍͑ 6/*0/۟Λར༻ͯ͠Ϩεϙϯε͔Βใऔಘ #MJOE42-*OKFDUJPO ݅ࣜΛར༻ͨ͠ΤϥʔԠ͔Βใऔಘ͢Δ &SSPSCBTFE42-*OKFDUJPO ݅ࣜΛར༻ͨ͠4-&&1͔Βใऔಘ͢Δ 5JNFCBTFE42-*OKFDUJPO %P4 4-&&1۟ͷར༻ʹΑΔॲཧͷԆ 57
42-*OKFDUJPOʹΑΔ߈ܸྫ ར༻͍ͯ͠Δ%#αʔόʔͷछྨݖݶʹΑͬͯɺҙίʔυ࣮ߦϑΝΠϧಡΈऔΓՄೳʹ
58 Path Traversal
59 ඇެ։
60 ඇެ։
ϑΝΠϧΞοϓϩʔυɾμϯϩʔυػೳͷ࣮ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 61 Path Traversalͷݪཧ อଘઌಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETz GJMFOBNF GJMFOBNFதʹlzΛؚΊͨύεΛࢦఆ͢Δͱɾɾɾ
ϑΝΠϧΞοϓϩʔυɾμϯϩʔυػೳͷ࣮ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 62 Path Traversalͷݪཧ ಡΈग़͢ϑΝΠϧ͕FUDQBTTXEʹͳͬͯ͠·͏ lBQQVQMPBETFUDQBTTXEz อଘઌಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETz GJMFOBNF
GJMFOBNFதʹlzΛؚΊͨύεΛࢦఆ͢Δͱɾɾɾ
ҙͷίʔυ࣮ߦ QIQKTQͷஔʹΑΔαʔόʔ্Ͱͷίʔυͷ࣮ߦ αʔόʔ্ͷҙͷϑΝΠϧɾใͷಡΈऔΓ ϩάϑΝΠϧͷऔಘ αʔόʔͷߏใऔಘ ڥมͷऔಘ 63 Path TraversalʹΑΔ߈ܸྫ
64 DoS (Denial-of-Service)
65 DoSͷ࣮ྫ ϓϩϑΟʔϧը૾ઃఆ࣌ʹΓൈ͖ॲཧͷίϚϯυ͕࣮ߦ͞Ε͍ͯΔ ϐΫηϧ͕ଟ͍ը૾Λੜͯ͠Ξοϓϩʔυ $ vips black black.png 1000000 1000000
--bands 3 ྫʣԯϐΫηϧͷQOHը૾Λੜ ˠ Γൈ͖ॲཧͰେͳ$16ϦιʔεΛফඅ
66 ඇެ։
67 DoSͷݪҼྫ ܁Γฦ͠ॲཧͷ࣮ϛε ϑΝΠϧͷऔΓѻ͍ ճ෮ෆೳͳྫ֎ ճͷ্ݶ੍͕ݶ͕ແ͍ αΠζ੍ݶ͕ແ͍ɺϦιʔεͷ։์Ε ϝϞϦͷྖҬ֎ΞΫηε͕ൃੜ͢ΔόάʹΑΔϓϩηεͷΫϥογϡ
68 OS Command Injection
69 ඇެ։
70 ඇެ։
ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷʹϢʔβʔͷೖྗΛར༻͢Δ࣮ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 71 OS Command Injectionͷݪཧ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗʯΛࢦఆ͢Δͱɾɾɾ
ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷʹϢʔβʔͷೖྗΛར༻͢Δ࣮ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 72 OS Command Injectionͷݪཧ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗʯΛࢦఆ͢Δͱɾɾɾ
DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ͭͷίϚϯυ ͭͷίϚϯυ ͭͷίϚϯυ Ϣʔβʔͷࢦఆͨ͠ίϚϯυ͕࣮ߦ͞Εͯ͠·͏
73 OS Command Injectionͷ࣮ྫ ίϚϯυΛ࣮ߦ͢ΔؔʹϢʔβʔೖྗΛར༻͢Δέʔε ʢจࣈྻ݁߹ͳͲʣ system(“ユーザーの入力”) exec(“ユーザーの入力”) passthru(“ユーザーの入力”) Runtime.getRuntime().exec(“ユーザーの入力”)
child_process.spawn(“ユーザーの入力”) child_process.exec(“ユーザーの入力”) 1)1 +BWB /PEFKT exec(“ユーザーの入力”) system(“ユーザーの入力”) 3VCZ
੬ऑੑͷରࡦ 74
ຊηΫγϣϯͷΞδΣϯμ 75 1. Path Traversalରࡦ 2. OS Command Injectionରࡦ 3.
੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋशࠓޙͷۀͰ࣮ ફͯ͠΄͍͜͠ͱ
ϑΝΠϧΞοϓϩʔυɾμϯϩʔυػೳͷ࣮ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 76 Path Traversalͷݪཧʢ࠶ܝʣ อଘઌಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETz GJMFOBNF ˠ ಡΈग़͢ϑΝΠϧ͕ҙਤ͠ͳ͍FUDQBTTXEʹͳͬͯ͠·͏
lzΛར༻͢Δͱɾɾɾ lBQQVQMPBETFUDQBTTXEz
../../../etc/passwd 77 Path Traversalରࡦ filenameʹ1্ͭͷ֊Λࣔ͢ “../” ͕ར༻Ͱ͖Δ͜ͱ͕͔ͩΒɾɾɾ filename͔Β “../” ΛऔΓআ͘ॲཧΛͯ͠ରࡦ
etc/passwd /app/uploads/etc/passwd “/app/uploads/” + filename ࡉΛͯ͠ BQQVQMPBETԼ͕ಡΈग़͠ରͷύεʹͳΔ ˠ ҙͷύεͷϑΝΠϧΛಡΈग़͢͜ͱ͕Ͱ͖ͳ͘ͳͬͨ ˞͜ͷमਖ਼ํ๏ਖ਼͋͘͠Γ·ͤΜʂ
78 Path Traversalରࡦ Node.jsͰͷ࣮ ΛऔΓআ͘ॲཧ
ઌఔͷ1BUI5SBWFSTBMͷରࡦΛӌճͯ͠ FUDQBTTXEΛಡΈग़ ͯ͠Έ·͠ΐ͏ ͲͷΑ͏ʹରࡦΛ͢Δͱᘳʹमਖ਼Ͱ͖Δ͔Λߟ͑ͯΈ·͠ΐ͏ 79 ԋश8ɿରࡦͷӌճ (࣮ࢪ࣌ؒ: 10)
filenameʹ….//….//….//….//etc/passwd Λࢦఆ͢Δ͜ͱͰରࡦΛӌճͰ͖Δ 80 Path Traversalରࡦ ….//….//….//etc/passwd ../../../etc/passwd /app/uploads/../../../etc/passwd “/app/uploads/” +
filename → /etc/passwd ͔ΒϑΝΠϧΛಡΈग़ͯ͠͠·͏
81 Path Traversalରࡦ ରࡦྫ ύεͷਖ਼نԽͷྫɿ /app/uploads/./././etc/passwd → /app/uploads/etc/passwd /app/uploads/././../uploads/../etc/././passwd →
/etc/passwd ύεΛਖ਼نԽͯ͠ɺҙਤͨ͠σΟϨΫτϦԼ͕ࢦఆ͞Ε͍ͯΔ͔Λ ݕূ /app/uploads/ Ͱ࢝·Δʁ
ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷʹϢʔβʔͷೖྗΛར༻͢Δ࣮ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 82 OS Command Injectionͷݪཧʢ࠶ܝʣ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗʯΛࢦఆ͢Δͱɾɾɾ
DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ͭͷίϚϯυ ͭͷίϚϯυ ͭͷίϚϯυ Ϣʔβʔͷࢦఆͨ͠ίϚϯυ͕࣮ߦ͞Εͯ͠·͏
83 OS Command Injectionରࡦ ίϚϯυͷҾͱͯ͠ѻ͏෦ΛγΣϧߏจͷҰ෦ͱͯ͠ར༻Ͱ͖ͯ͠·͏ͷ͕͔ͩΒɾɾɾɾ Ϣʔβʔೖྗͷ෦Λ""ͰғΉ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ?DSPQ PVUQVUQOH DPOWFSUJOQVUQOH
HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ""ͰͭͷҾͱͯ͠ೝࣝ͞ΕΔͷͰɺ MT࣮ߦ͞Εͳ͍ ˞͜ͷमਖ਼ํ๏ਖ਼͋͘͠Γ·ͤΜʂ
84 OS Command Injectionରࡦ /PEFKTͰͷ࣮
9-1. ઌఔͷOS Command InjectionͷରࡦΛӌճͯ͠ ls Λ࣮ߦͯ͠Έ· ͠ΐ͏ 9-2. ͲͷΑ͏ʹରࡦΛ͢Δͱྑ͍͔Λߟ͑ͯΈ·͠ΐ͏ 85
ԋश9ɿରࡦͷӌճ (࣮ࢪ࣌ؒ: 10)
86 OS Command Injectionରࡦ AͰίϚϯυΛғΜͰରࡦΛӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlYAMTA?zDSPQlPVUQVUQOHz
87 OS Command Injectionରࡦ ରࡦɿ ಛఆͷจࣈΛېࢭͯ͠ίϚϯυ͕࣮ߦ͞Εͳ͍Α͏ʹ͠Α͏ɾɾɾ ˞͜ͷमਖ਼ํ๏ਖ਼͋͘͠Γ·ͤΜʂ Λېࢭ A
88 OS Command Injectionରࡦ ͰίϚϯυΛғΜͰରࡦΛӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlY MT ?zDSPQlPVUQVUQOHz
89 OS Command Injectionରࡦ ରࡦɿ ˞͜ͷमਖ਼ํ๏ਖ਼͋͘͠Γ·ͤΜʂ Λېࢭ A
90 OS Command Injectionରࡦ lcMTczͰจࣈྻ෦Λൈ͚ͯӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlYzcMTcz?zDSPQlPVUQVUQOHz
91 OS Command Injectionରࡦ ରࡦɿ ˞͜ͷमਖ਼ํ๏ਖ਼͋͘͠Γ·ͤΜʂ Al Λېࢭ ېࢭจࣈΛ૿͢ରࡦͰຊʹେৎɾɾɾʁ
92 OS Command Injectionରࡦ ϑΝΠϧ໊ͷࡉͱΈ߹Θͤͯӌճ DPOWFSUlUNQJOQVUQOHʘzHSBWJUZDFOUFSSFTJ[FlcMTcY?zDSPQ lPVUQVUQOHz όοΫεϥογϡͰlΛΤεέʔϓॲཧ
/PEFKTͷ߹ IUUQTHJUIVCDPNNNPNUDIFWNBHJDLXBOEKT Ͱಉ༷ͷॲཧΛهड़Ͱ͖Δ 93 OS Command Injectionରࡦ ରࡦྫ ίϚϯυ࣮ߦΛͤͣʹಉͷॲཧΛ࣮ݱ͢Δ ېࢭจࣈΛ૿͢
ํΛݟͦ͏
ੈͷதҰൠʹެ։͞Ε͍ͯΔ߈ܸख๏ରࡦͷϕετϓϥΫςΟε͕͋Ε ͦΕʹج͍࣮ͮͯΛ͢Δ • ͯ͢ͷ߈ܸखஈΛࣗͰߟ͑ɺᘳʹରࡦΛ࣮͢Δ͜ͱ͍͠ • 94442-*OKFDUJPOͳͲͷҰൠతͳ੬ऑੑɺϑϨʔϜϫʔΫͷυΩϡϝϯτதͳͲɺ ϕετϓϥΫςΟεͷهࡌ͕͋Δ߹͕ଟ͍ͷͰͦΕʹै͏ 94 ੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋशࠓޙͷۀͰ࣮ફͯ͠΄͍͜͠ͱʣ
95 ੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋशࠓޙͷۀͰ࣮ફͯ͠΄͍͜͠ͱʣ ѱ༻͞Ε͍͢ػೳ࣮ΛΖ͏ • ઃܭɾ࣮͍ͯ͠Δ࣌ʹηΩϡϦςΟΛҙࣝͰ͖Δঢ়ଶʹͳΖ͏ ʢϢʔβʔೖྗ͕ଟ͍ՕॴɺϑΝΠϧμϯϩʔυɾΞοϓϩʔυͳͲʣ • ٯʹѱ༻͞ΕΔ͜ͱ͕ͳ͍҆શͳػೳɾ࣮͔ΔΑ͏ʹ
96 ੬ऑੑରࡦͷϙΠϯτʢࠓޙۀͷதͰߟ͑ͯ΄͍͜͠ͱʣ ΑΓ؆୯ʹ͔࣮ͭ֬ʹ҆શʹ࣮Ͱ͖Δํ๏ସࡦΛଟ֯తʹߟ͑Α͏ 04$PNNBOE*OKFDUJPOͷྫ ˠ ίϚϯυ࣮ߦΛ͢ΔؔΛ͏ͷΛΊΔ
• PortSwigger WebSecurity Academy ʢ https://portswigger.net/web-security ʣ • ମܥతʹֶͿ ҆શͳWebΞϓϦέʔγϣϯͷ࡞Γํ
ʢ https://www.sbcr.jp/product/4797393163/ ʣ 97 WebΞϓϦέʔγϣϯʹର͢Δ߈ܸख๏ΛΑΓৄ͘͠ษڧ͍ͨ͠ํ
ԋश 98
99 ࠓճʮCTFʯͱݺΕΔܗࣜͰνʔϜ͝ͱͷԋश CTFͱʁ Capture The Flag ઐٕࣝज़Λۦͯ͠Ӆ͞Ε͍ͯΔFlagʢൿີͷจࣈྻʣΛݟ͚ͭग़͠ɺ ࣌ؒʹ֫ಘͨ͠߹ܭಘΛڝ͏ϋοΩϯάίϯςετ νʔϜ͝ͱʹ֫ಘͨ͠ϙΠϯτΛڝ͏ ԋश֓ཁ
100 ඇެ։
101 2छྨ ੬ऑੑΛѱ༻ͯ͠ൿີͷ'MBHΛ औಘɾૹ৴͢Δ͜ͱͰ ϙΠϯτΛ֫ಘͰ͖Δ ߈ܸʢAttackʣ ѱ༻Մೳͳ੬ऑੑΛमਖ਼͠ɺ ϦϙδτϦʹίϛοτ ߨࢣʹ֬ೝΛͯ͠Β͏͜ͱͰ ϙΠϯτΛ֫ಘͰ͖Δ
ޚʢDefenseʣ ʹ͍ͭͯ
102 üνʔϜͰ͔Βͳ͍ਓ͕͍Εڭ͑߹͏ͳͲɺޓ͍ʹॿ͚߹͍ͳ͕ΒਐΊ ͍ͯͩ͘͞ üΦϯϥΠϯͷਓ͕͍Δ߹ʹɺߨࢣࢀՃͰ͖ΔΑ͏ɺߨࢣ͕ೖ͍ͬͯΔ νϟϯωϧͷϋυϧΛ׆༻͍ͯͩ͘͠͞ üαʔόʔʹଓͰ͖ͳ͍ͳͲͷτϥϒϧ࣌SlackͰϝϯγϣϯ ʢ @pdo-fye0325-prd-security-tutors ʣ Λ͚ͯߨࢣʹΒ͍ͤͯͩ͘͞
αʔόʔϦηοτͳͲͷରԠΛߦ͍·͢ üձࣾͷϧʔϧ๏Λक্ͬͨͰ͋Εɺར༻͢ΔπʔϧαΠτʹ੍ݶ ͋Γ·ͤΜ ԋशͷਐΊํ
103 είΞαʔόʔʹ͍ͭͯ ࠓճͷԋशͰඞཁͳ֤छૢ࡞͕Ͱ͖ΔαʔόʔͰ͢ ͷճఏग़ ֫ಘͨ͠ϙΠϯτͷ֬ೝ ॱҐͷ֬ೝ
104 είΞαʔόʔͷΞΫηεͱϩάΠϯ ͞ΕͨείΞαʔόʔͷURLΛ։͘ ※͜ͷαʔόʔ߈ܸରͰͳ͍͜ͱʹҙ ӈ্ͷLoginΛΫϦοΫ note
105 Check1: είΞαʔόʔͷΞΫηεͱϩάΠϯ νʔϜ͝ͱʹ͞Ε͍ͯΔϩάΠϯใͰϩάΠϯ
106 Check1: Ұཡϖʔδͷ֬ೝ ࠓճͷԋशதͰจνʔϜ͝ͱʹ͞ΕͨυΩϡϝϯτΛࢀর͍ͯͩ͘͠͞
107 ʹ͍ͭͯ ü༩ϙΠϯτԼهͷ௨ΓͰ͢ attack: 100 pts defense: मਖ਼͕ᘳͳ߹: 100 pts
मਖ਼͕ෆશͳ߹: 50 pts üChallenge͝ͱʹ൪߸͕ৼΒΕ͍ͯ·͕͢Ͳͷॱ൪Ͱղ͍ͯߏ͍·ͤΜ üChallengeͷattackdefenseʹղ͖͘ॱ൪ʹࢦఆ͋Γ·ͤΜ ü֤Ͱͦͷ͕ղ͚ͨνʔϜΛ֬ೝͰ͖·͢ ଟ͘ͷνʔϜ͕ղ͚ͨͷํ͕қ͕͍͔͠Ε·ͤΜ
ͷ֬ೝ 108
109 Check 2: νϡʔτϦΞϧʢ߈ܸฤʣɿ֬ೝ ֤νʔϜʹ͞ΕͨυΩϡϝϯτ͔ΒจΛ֬ೝͰ͖·͢
110 Check 3: νϡʔτϦΞϧʢ߈ܸฤʣɿ֬ೝ தͷϦϯΫΛΫϦοΫͯ͠߈ܸରͷΞϓϦέʔγϣϯʹΞΫηε ϢʔβʔΛొͯ͠ϩάΠϯ͢ΔͱɺϓϩϑΟʔϧ͕දࣔ͞ΕΔγϯϓϧͳWebαΠτ
111 Check 4: νϡʔτϦΞϧʢ߈ܸฤʣͷιʔείʔυͷऔಘ ֤νʔϜʹ͞ΕͨϦϙδτϦΛΫϩʔϯͯ͠ιʔείʔυΛ֬ೝ $ git clone /bootcamp-2024-teamx.git $
cd bootcamp-2024-teamx/ $ ls … fortune … ໊ͱಉҰͷσΟϨΫτϦ໊ʹͦͷʹؔ࿈ͨ͠ϑΝΠϧ͕֨ೲ͞Ε͍ͯΔ ࠓճͷͷ߹ʮfortuneʯ
112 ΞϓϦέʔγϣϯͱιʔεɾίʔυ͔Β ੬ऑੑΛ୳ͯ͠'MBHΛ֫ಘ͠Α͏ʢ߈ܸฤʣ
113 Flagʹ͍ͭͯ üFlagͷܗࣜ͝ͱʹࢦఆ͕ͳ͍ݶΓɺ ctfRED{[¥x20-¥x7E]+} ʢ{}ද ࣔՄೳͳ1จࣈҎ্ͷASCIIจࣈʣͰ͢ üdummy{…} ͱ͍ͬͨμϛʔͷFlag͕දࣔ͞ΕΔ͜ͱ͕͋Γ·͕͢ɺຊͰ ͳ͍͜ͱʹҙ͍ͯͩ͘͠͞ ü͞ΕͨιʔείʔυதͰɺຊͷFlag͕ϚεΫ͞Ε͍ͯ·͢
üFlagૹ৴ϑΥʔϜ͔ΒԿճૹ৴ͯ͠ϙΠϯτ͕ݮΔ͜ͱ͋Γ·ͤΜ͕ɺ ਪଌ͕ࠔͳจࣈྻʹͳ͍ͬͯ·͢ üօ͞Μͷਐ۩߹Λ֬ೝ͍ͨ͠ͷͰɺFlagͳΔ͘ཷΊࠐ·ͣʹఏग़Λ͓ ئ͍͠·͢
114 ੬ऑੑʹ͍ͭͯ ü࣍ͷ੬ऑੑࠓճͷ߈ܸରͰ͋Γ·ͤΜ • HTTPΛར༻ͯ͠௨৴͍ͯ͠Δ • CookieʹSecureଐੑ͕༩͞Ε͍ͯͳ͍ • DoS߈ܸ͕Մೳ •
ϩάΠϯࢼߦճʹ੍ݶ͕ͳ͍
115 νϡʔτϦΞϧʢ߈ܸฤʣɿFlagͷॴͷ֬ೝ ·ͣιʔείʔυத͔Βz'MBHzͷॴΛ୳͢ 'MBH࠷ॳʹొ͞ΕΔϢʔβʔͷ lGMBHzΧϥϜʹ֨ೲ͞Ε͍ͯΔ fortune/src/database/seeders/UserSeeder.php ϩάΠϯதͷϢʔβʔ໊͕zBENJOzͷ ͱ͖ʹzGMBHzΛදࣔ fortune/src/resources/views/user.blade.php
116 νϡʔτϦΞϧʢ߈ܸฤʣɿ੬ऑੑ ϩάΠϯ͍ͯ͠ΔϢʔβʔΛࣝผ͢ΔϩδοΫΛݟͯΈΔ VTFS@JE͕Ωʔͷ$PPLJFͷΛϩάΠϯதͷϢʔβʔͷJEͱͯ͠ར༻͍ͯ͠Δ
117 νϡʔτϦΞϧʢ߈ܸฤʣɿ੬ऑੑ ཧऀϢʔβʔΞϓϦέʔγϣϯ࠷ॳʹొ͞Ε͍ͯΔϢʔβʔͳͷͰɺ ཧऀϢʔβʔͷ VTFS@JE Ͱ͋Δ͜ͱ͕༧Ͱ͖Δ ։ൃऀπʔϧ͔Β$PPLJFΛฤूͯ͠Λ̍ʹมߋ
118 νϡʔτϦΞϧʢ߈ܸฤʣɿ੬ऑੑ ͏ҰϦΫΤετΛૹ৴͢Δͱɾɾɾ'MBH͕දࣔ͞Εͨ
119 νϡʔτϦΞϧʢ߈ܸฤʣɿϑϥάఏग़ ֫ಘͨ͠'MBHΛϑΥʔϜ͔Βఏग़ ͕৭ʹมԽͯ͠QUT֫ಘ
120 ߈ܸʹར༻Ͱ͖ͨ੬ऑੑΛमਖ਼ͯ͠ΈΑ͏ʢޚฤʣ
121 मਖ਼ʹ͍ͭͯ ü੬ऑੑҎ֎ͷ෦ͷಈ࡞Ͱ͖Δ͚ͩอͬͨ··Ͱमਖ਼Λߦ͍ͬͯͩ͘͞ üҰؾʹଟ͘ͷఏग़͕͋Δͱ֬ೝ͕େมʹͳΔͷͰɺमਖ਼ਵ࣌ఏग़ͯ͠Β ͑Δͱॿ͔Γ·͢ αϒϚϦϯઓ๏
122 Check 6: νϡʔτϦΞϧʢޚฤʣ: मਖ਼ͷಈ࡞֬ೝ $ cd fortune $ docker
compose up --build ͞ΕͨϦϙδτϦதͷίʔυΛमਖ਼ޙͷಈ࡞֬ೝ ࣍ͷίϚϯυͰ%PDLFSίϯςφͷىಈͱಉ࣌ʹϏϧυΛ࣮ߦ αʔόʔ͕ىಈͯ͠ IUUQMPDBMIPTU ͔ΒΞΫηεͰ͖Δ
123 Docker Composeͷجຊૢ࡞ʢࢀߟʣ $ docker compose exec php /bin/bash PHPαʔϏεͷίϯςφͰγΣϧΛىಈ
$ docker compose down ίϯςφΛআ
αʔόʔɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯཧΛϦΫΤετ࣌ʹ Ճ͞ΕΔCookieϔομͷͰߦ͏ ϒϥβଆͰɺϦΫΤετൃੜ࣌ʹαΠτผʹอଘ͞Ε͍ͯͨCookieΛࣗಈతʹ༩͢Δ 124 ηογϣϯཧʢ࠶ܝʣ ϩάΠϯ Set-Cookie: sessionid=sdfhaiew ߘͷ͍͍Ͷ ߘͷฤू
Cookie: sessionid=sdfhaiew Cookieͷใ͔Β Ϣʔβʔhoge͔ΒͷϦΫΤετ ͱͯ͠ॲཧ https://example.comϦΫΤετ → อଘͨ͠CookieΛϦΫΤετ ϔομʹࣗಈతʹ༩ Ϣʔβʔhoge https://example.com ϒϥβʹ CookieΛอଘ Cookie: sessionid=sdfhaiew
125 Check 7: νϡʔτϦΞϧʢޚฤʣ: ίʔυͷमਖ਼ ϑϨʔϜϫʔΫʹ༻ҙ͞ΕͨηογϣϯཧͷAPIΛར༻ͯ͠ɺ user_idͷอࢀরΛ͢ΔΑ͏ʹमਖ਼ fortune/src/app/Http/Controllers/UserController.php
126 Check 8: νϡʔτϦΞϧʢޚฤʣ: मਖ਼ͷఏग़ masterϒϥϯνʹमਖ਼ίϛοτΛؚΊͨޙɺSlackͷ֤νʔϜͷνϟϯωϧʹͯ ԼهͷΑ͏ͳϝοηʔδͰߨࢣʹ௨͍ͯͩ͘͠͞ ߨࢣ͕֬ೝޙɺείΞαʔόʔ্ͰϙΠϯτΛ༩ͯ͠ɺ݁ՌΛฦ৴͠·͢ masterϒϥϯνͷΈ͕࠾ରͰ͋Δ͜ͱʹҙ͍ͯͩ͘͠͞
127 Check 9: είΞαʔόʔ্Ͱͷ֫ಘϙΠϯτͷ֬ೝ Scoreboardλϒ͔Βɺ֤νʔϜ͕֫ಘͨ͠ϙΠϯτΛ֬ೝՄೳ
Ҏ্Ͱ͜ͷޙͷԋशͷઆ໌ऴྃͰ͢ ࠷ޙʹɾɾɾ
129 ࠓճͷԋशͷউऀɺ ϙΠϯτΛ࠷ଟ֫͘ಘͨ͠νʔϜ
130 ࠓճͷԋशͷউऀɺ ϙΠϯτΛ࠷ଟ֫͘ಘͨ͠νʔϜ Ͱͳ͘ɾɾɾ
131 ࠓճͷԋशͷউऀɺ ϙΠϯτΛ࠷ଟ֫͘ಘͨ͠νʔϜ Ͱͳ͘ɾɾɾ Ͱ͖Δ͚ͩଟ͘ͷ͜ͱΛֶͿ͜ͱ͕Ͱ͖ͨνʔϜ Ͱ͢ʂ νʔϜͷதͰڠྗ͋ͬͯ͠ԋशΛਐΊ͍ͯͩ͘͞ ߨࢣਞ͔Βͷώϯτੵۃతʹ׆༻͍ͯͩ͘͠͞
Appendix. 132
133 Appendix 1. webhook.siteͷ͍ํ ᶃ https://webhook.site/ ʹΞΫηε͢ΔͱɺࣗಈతʹURL͕ൃߦ͞ΕΔ
134 Appendix 1. webhook.siteͷ͍ํ ᶄ ൃߦ͞ΕͨURLʹରͯ͠ϦΫΤετૹ৴ ϒϥβͰΞΫηε curlͰૹ৴͢Δ scriptλάͰϦΫΤετૹ৴
135 Appendix 1. webhook.siteͷ͍ํ ᶅ ൃߦ͞ΕͨURLѼͷHTTPϦΫΤετͷதΛ֬ೝՄೳ methodͱURL ΫΤϦύϥϝʔλ ΫΤϦύϥϝʔλ ϦΫΤετϘσΟ
136 Appendix 2. curlίϚϯυͷ͍ํ λʔϛφϧ͔ΒHTTPϦΫΤετΛૹ৴Ͱ͖Δπʔϧ # Cookieヘッダを設定してリクエスト $ curl -H
‘Cookie: user_id=1’ http://localhost:8000/ # フォームの送信 $ curl -X POST -d ‘param=1¶m2=hoge’ http://example.com/ # ファイルをアップロード $ curl -X POST -F upfile=@/path/to/sample.txt http://example.com/upload
137 Appendix 2. curlίϚϯυͷ͍ํ $ python3 -m pip install requests
PythonͷHTTPΫϥΠΞϯτϥΠϒϥϦ import requests r = requests.get(‘http://example.com') print(r.text) r = requests.post(‘http://example.com', data={‘param1’: ‘value1’}, headers={‘Cookie’: ‘hoge=fuga’}) print(r.text)
138 Appendix 3. Chrome։ൃऀπʔϧͷ͍ํ Option + Command + I Ͱىಈ
ʮιʔεʯλϒ ݱࡏͷϖʔδͷදࣔʹඞཁͳ HTMLɺJSɺCSSΛӾཡͰ͖Δ JSͷ߹ʹߦ൪߸ΛΫϦοΫ͢ Δ͜ͱͰϒϨʔΫϙΠϯτΛઃஔ ֤ͯ͠มͷͳͲΛ֬ೝՄೳ
139 Appendix 3. Chrome։ൃऀπʔϧͷ͍ํ ʮωοτϫʔΫʯλϒ ʮϩάΛอ࣋ʯʹνΣοΫΛ͚Δ͜ͱͰϖʔδભҠ ͕ൃੜͯ͠ɺϦΫΤετཤྺ͕আ͞Εͳ͍ ʮΞϓϦέʔγϣϯʯλϒ ද͍ࣔͯ͠ΔWebαΠτͷ CookielocalStorageͷӾཡฤू͕Մೳ
ϒϥβͰൃੜͨ͠ϦΫΤετ ΛӾཡͰ͖Δ
140 Appendix 4. Burp Suiteͷ͍ํ ʮProxyʯ→ ʮInterceptʯ ʮOpen browserʯΛΫϦοΫ͢Δ ͜ͱͰΈࠐΈϒϥβ͕ىಈ
141 Appendix 4. Burp Suiteͷ͍ํ ʮIntercept is onʯͷঢ়ଶʹ͢Δ ͱɺىಈͨ͠ϒϥβͰൃੜ͠ ͨϦΫΤετΛதஅͯ͠ฤूͰ
͖Δ
142