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
攻撃と防御で実践するプロダクトセキュリティ演習_2024(導入編)
Search
Recruit
PRO
August 09, 2024
Technology
2
860
攻撃と防御で実践するプロダクトセキュリティ演習_2024(導入編)
2024年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 09, 2024
Tweet
Share
More Decks by Recruit
See All by Recruit
大規模プロダクトにおける組織作りと技術ポートフォリオマネジメント
recruitengineers
PRO
3
160
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
4
330
リクルート新人研修2024 テキスト生成AI活用
recruitengineers
PRO
11
490
リクルートのデータマネジメント組織に 求められてきたコト
recruitengineers
PRO
4
370
最短最速に魂を売る! 新しいアーキテクチャとプロセスの提案!
recruitengineers
PRO
5
110
プロデザ! BY リクルートvol.22_様々なプロダクト経験の中で活きたPdMのスキル
recruitengineers
PRO
3
180
JavaScript研修 (2024)
recruitengineers
PRO
7
3.6k
TypeScript入門 2024
recruitengineers
PRO
25
14k
React 研修 (2024)
recruitengineers
PRO
38
14k
Other Decks in Technology
See All in Technology
MySQLのあらたしいリリースモデル LTSとIR
sakaik
1
150
難しいから面白い!医薬品×在庫管理ドメインの複雑性と向き合い、プロダクトの成長を支えるための取り組み / Initiatives to Support Product Growth
kakehashi
2
160
#Zenoh 完全に理解した 〜組込み純情篇〜
takasehideki
1
470
四国クラウドお遍路 2024 in 高知 オープニング
yukataoka
0
170
バックログを導入し やっぱやめた話
ota42y
0
190
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
600
脆弱星に導かれて
nishimunea
1
1.6k
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
0
140
自社サービスのための独自リリース版Redmine「RedMica」の取り組み
vividtone
0
900
Envoy External AuthZとgRPC Extensionを利用した「頑張らない」Microservices認証認可基盤
andoshin11
0
210
FastConnect の冗長性
ocise
0
7.2k
React Aria で実現する次世代のアクセシビリティ
ryo_manba
4
990
Featured
See All Featured
Writing Fast Ruby
sferik
623
60k
Into the Great Unknown - MozCon
thekraken
28
1.4k
Web Components: a chance to create the future
zenorocha
308
41k
How to Think Like a Performance Engineer
csswizardry
16
930
The Brand Is Dead. Long Live the Brand.
mthomps
53
37k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
25
1.3k
Debugging Ruby Performance
tmm1
72
12k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
123
18k
Building Better People: How to give real-time feedback that sticks.
wjessup
359
18k
How to name files
jennybc
75
98k
GraphQLとの向き合い方2022年版
quramy
43
13k
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