Slide 1

Slide 1 text

߈ܸͱ๷ޚͰ࣮ફ͢ΔϓϩμΫτηΩϡϦςΟԋश ʙಋೖύʔτʙ ग़Ո ༞و ஥੢ ๎໵

Slide 2

Slide 2 text

ΠϯτϩμΫγϣϯ 2

Slide 3

Slide 3 text

3 ग़Ո༞و / Yuki Ideya • ೥݄ʙ 3&%5&".ॴଐ • ͦΕҎલ͸ۚ༥ܥͷ4*FS΍ɺηΩϡϦςΟϕϯμʔͰ׭ެி΁ͷڭҭࣄ ۀͳͲ΍͍ͬͯ·ͨ͠ ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾࠓޙ΍Γ͍ͨ͜ͱʳ • ੜ੒"*ͷηΩϡϦςΟपΓษڧͨ͠Γͱ͔ ηΩϡϦςΟҎ֎ͷ஌ࣝ ͸՝୊ײʜʂ • ޴ͷௐࢠ͕ຫੑతʹѱ͍ͷͰɺͣ˓ͩ΋Μͱ͔ͱੜ੒"*Ͱ஻ΓΛ୅Θ Γʹ΍ͬͯ͘ΕΔ࢓૊ΈΛ໛ࡧத • ๺ւಓ͔ΒϦϞʔτͰಇ͍ͯͯग़ࣾ΄΅ͳ͍ͷͰ߈ΊͨαϒΧϧͬΆ ͍෰ΛങͬͨΓ͢ΔͷͰ͕͢ɺணΔ৔໘͕ͳ͍ͯͭ͘΋ޙչ͠·͢ ௕ظͷ࣋පͰ޴ͷௐࢠ͕ѱΊͳͷͰ֏෷͍ͳͲͰ͓ฉ͖͍ۤ͠৔໘͕͋Δ͔΋͠Ε·ͤΜɻ ͪΌΜͱ࠷ޙ·ͰίϯςϯπΛ͓ಧ͚Ͱ͖ΔΑ͏४උສ୺ͳͷͰ҆͝৺͍ͩ͘͞ʜʂ

Slide 4

Slide 4 text

4 ஥੢ ๎໵ / Tomoya Nakanishi • ೥य़ʙ 3&%5&".ॴଐ • ϦΫϧʔτ৽ଔೖࣾ ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾࠓޙ΍Γ͍ͨ͜ͱʳ • ϖωτϨʔγϣϯςετͷࢿ֨ษڧɺҰ൪࠷ۙऔͬͨͷ͸04&1 • μΠϏϯάʹߦ͘ճ਺͕૿͍͑ͯΔ

Slide 5

Slide 5 text

5 ඇެ։

Slide 6

Slide 6 text

ಋೖฤ(1೔໨)ͷΞδΣϯμ 6 ΠϯτϩμΫγϣϯ ԋश؀ڥΛ৮ͬͯΈΑ͏ 3. ϓϩμΫτηΩϡϦςΟͱ੬ऑੑ 4. WebΞϓϦέʔγϣϯʹ͓͚Δ੬ऑੑͱ߈ܸख๏ 5. ੬ऑੑͷରࡦ 6. WebΞϓϦέʔγϣϯʹର͢Δ߈ܸख๏ΛΑΓৄ͘͠ ษڧ͍ͨ͠ํ͸

Slide 7

Slide 7 text

ࠓճͷߨٛ ߈ܸ ͱ ๷ޚ Ͱ࣮ફ͢ΔϓϩμΫτηΩϡϦςΟԋशͰ͸ɺ 7 ߈ܸऀ͕ͲͷΑ͏ʹ੬ऑੑΛѱ༻͢Δͷ͔Λ஌Δ͜ͱͰɺ ਖ਼͘͠੬ऑੑΛमਖ਼͢ΔͨΊͷ஌ࣝͱํ๏ Λ਎ʹ͚ͭΔ͜ͱΛ໨తͱ͠·͢

Slide 8

Slide 8 text

• ڐՄ͞ΕͨγεςϜҎ֎ʹࢼ͞ͳ͍͜ͱ ʢෆਖ਼ΞΫηεېࢭ๏ʣ • ਖ਼౰ͳཧ༝ͳ͘Ϛϧ΢ΣΞΛऔಘɾอ༗͠ͳ͍͜ͱ ʢෆਖ਼ࢦྩి࣓తه࿥ʹؔ͢Δࡑʣ • Πϯλʔωοτ্Ͱ഑෍͞ΕΔιϑτ΢ΣΞͷར༻࣌ʹ͸ɺͦΕΒͷ৴པੑΛ ࣄલʹ֬ೝ͢Δ͜ͱ ʢ৘ใηΩϡϦςΟରࡦج४ʣ ஫ҙࣄ߲ 8 ͜ͷߨٛͰ͸࣮ࡍʹѱ༻͕ՄೳͳίʔυΛऔΓѻ͍·͢ɻ औΓѻ͍ʹ͸े෼ʹ஫ҙ͍ͯͩ͘͠͞ɻ

Slide 9

Slide 9 text

ԋश؀ڥΛ৮ͬͯΈΑ͏ 9

Slide 10

Slide 10 text

10 ඇެ։

Slide 11

Slide 11 text

11 ඇެ։

Slide 12

Slide 12 text

12 ඇެ։

Slide 13

Slide 13 text

1-1. ػೳΛࢼ͠ͳ͕ΒιʔείʔυΛݟͯΈ·͠ΐ͏ 1-2. ʲൃలʳ੬ऑੑΛ୳ͯ͠Έ·͠ΐ͏ 13 ԋश1ɿԋश؀ڥΛ৮ͬͯΈ·͠ΐ͏(࣮ࢪ࣌ؒ: 15෼)

Slide 14

Slide 14 text

ϓϩμΫτηΩϡϦςΟͱ੬ऑੑ 14

Slide 15

Slide 15 text

15 ηΩϡϦςΟ্ͷऑ఺͕͋ΔϓϩμΫτΛ࡞ΔͱͲ͏ͳΔʁ

Slide 16

Slide 16 text

16 ඇެ։

Slide 17

Slide 17 text

17 ඇެ։

Slide 18

Slide 18 text

18 ඇެ։

Slide 19

Slide 19 text

੬ऑੑ ʢVulnerabilityʣ 19 ηΩϡϦςΟ্ͷऑ఺͕͋ΔϓϩμΫτΛ࡞ΔͱͲ͏ͳΔʁ ιϑτ΢ΣΞ౳ʹ͓͚Δ ͱ͍͏

Slide 20

Slide 20 text

ੈͷதͷγεςϜɾιϑτ΢ΣΞʹରͯ͠ ຖ೔ͲΕ͚ͩͷ੬ऑੑ͕ใࠂ͞Ε͍ͯΔʁ Q. 20

Slide 21

Slide 21 text

1೔ฏۉ໿80݅ۙ͘ใࠂ͞Ε͍ͯΔʢ2023೥ʣ※ WebαʔϏεͳͲͷར༻ऀͷରॲͷඞཁ͕ͳ͍΋ͷΛ߹ΘͤΔͱɺ ΑΓଟ͘ͷ΋ͷ͕ଘࡏ͢Δͱߟ͑ΒΕΔ A. 21 ※CVEʢڞ௨੬ऑੑࣝผࢠʣͷ෇༩਺ϕʔε

Slide 22

Slide 22 text

ͲΜͳ੡඼ʹ੬ऑੑ͕ใࠂ͞Ε͍ͯΔʁ • Linux΍WindowsɺAndroidɺiOSͳͲͷOS • ϓϩάϥϛϯάݴޠͷඪ४ϥΠϒϥϦ • ήʔϜػͳͲͷ૊ΈࠐΈػث • Chrome΍FirefoxͳͲͷϒϥ΢β ྫ͑͹ɾɾɾ ਎ͷճΓͰ޿͘ར༻͞ΕΔ༗໊ͳιϑτ΢ΣΞʹ΋੬ऑੑ͕ൃݟ͞Ε͍ͯΔ զʑ΋੬ऑੑΛ࡞ΓࠐΜͰ͠·͏Մೳੑ͸े෼ʹ͋Δ 22

Slide 23

Slide 23 text

WebΞϓϦέʔγϣϯʹ͓͚Δ੬ऑੑͱ߈ܸख๏ 23

Slide 24

Slide 24 text

ຊηΫγϣϯͷΞδΣϯμ 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

Slide 25

Slide 25 text

25 ඇެ։

Slide 26

Slide 26 text

26 XSSʢCross-Site Scriptingʣ

Slide 27

Slide 27 text

27 ඇެ։

Slide 28

Slide 28 text

28 ඇެ։

Slide 29

Slide 29 text

XSSʹΑΔ߈ܸྫ 29 ৘ใ઄औ ѱҙͷ͋Δίϯςϯπ΁ͷվม • $PPLJFͷ઄औʹΑΔϩάΠϯηογϣϯͷͷͬͱΓ • $PPLJFΛ෇༩ͨ͠ϦΫΤετ࣮ߦͱ಺༰ͷಡΈऔΓ • ը໘ʹදࣔ͞Εͨ৘ใͷࡡऔ • ࠮ٗϖʔδͷදࣔͳͲ

Slide 30

Slide 30 text

XSSͷݪཧ 30 ѱҙͷ͋Δ+BWB4DSJQͷίʔυ͕ ຒΊࠐΊͯ͠·͏ϖʔδ

Slide 31

Slide 31 text

XSSͷݪཧ 31 $PPLJFΛࣗ෼ͷαʔόʔʹૹ৴ ͤ͞ΔίʔυΛຒΊࠐΜͰ΍Ζ ͏ʂ 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU

Slide 32

Slide 32 text

XSSͷݪཧ 32 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU 被害者 ͜ͷਓͷϓϩϑΟʔϧؾʹͳ Δʂ ΞΫηε࣌ʹ࣮ߦ

Slide 33

Slide 33 text

XSSͷݪཧ 33 ϖϯΪϯ͘Μͷ ηογϣϯήοτʂ 攻撃者 ΞΫηε͢Δͱ $PPLJF͕ൈ͔ΕΔ +BWBTDSJQU 被害者 ඃ֐ऀ͸ϖʔδΛ Ӿཡ͚ͨͩ͠Ͱ $PPLJF͕ൈ͔Εͯ͠·͏ ͜ͷਓͷϓϩϑΟʔϧؾʹͳΔʂ ΞΫηε࣌ʹ࣮ߦ

Slide 34

Slide 34 text

ૉ๿ͳٙ໰ 34 攻撃者 被害者 アクセスすると Cookieが抜かれる JavaScript ߈ܸऀ͕༻ҙͨ͠ ϖʔδʹΞΫηε ߈ܸऀ͕༻ҙͨ͠ϖʔδͷ+BWB4DSJQUͰ ԋश؀ڥͷαΠτͷ৘ใΛऔΕͳ͍ͷʁ ٙ໰

Slide 35

Slide 35 text

ૉ๿ͳٙ໰ 35 攻撃者 被害者 アクセスすると Cookieが抜かれる JavaScript ߈ܸऀ͕༻ҙͨ͠ ϖʔδʹΞΫηε ߈ܸऀ͕༻ҙͨ͠ϖʔδͷ+BWB4DSJQUͰ ԋश؀ڥͷαΠτͷ৘ใΛऔΕͳ͍ͷʁ ٙ໰ 401 4BNF0SJHJO1PMJDZ ͰͰ͖ͳ͍

Slide 36

Slide 36 text

XSSʹΑΔ߈ܸྫ 36 https:// ...のページ window.document.body window.localStorage Cookie(※) https://evil.example.com/...のページ ※originより制限が緩いsite単位での管理 ѱҙͷ͋Δ+BWB4DSJQU ブラウザ Origin ͕ҟͳΔϖʔδ ͜͜ͷ෦෼Λ 0SJHJOͱ͍͏ ຊདྷϒϥ΢β্Ͱ͸ɺ͋Δ63-ʹΑͬͯϩʔυ͞ΕΔϦιʔεʢ+BWB4DSJQUͷίʔυͳͲʣ͔Β͸ ผαΠτͷϦιʔε΁ΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍ ˠಉҰΦϦδϯϙϦγʔʢ4BNF0SJHJO 1PMJDZ 401ʣʹΑΔอޢ

Slide 37

Slide 37 text

XSSʹΑΔ߈ܸྫ ຊདྷϒϥ΢β্Ͱ͸ɺ͋Δ63-ʹΑͬͯϩʔυ͞ΕΔϦιʔεʢ+BWB4DSJQUͷίʔυͳͲʣ͔Β͸ ผαΠτͷϦιʔε΁ΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍ ˠ ಉҰΦϦδϯϙϦγʔʢ4BNF0SJHJO 1PMJDZ 401ʣʹΑΔอޢ 37 https:// ...のページ window.document.body window.localStorage Cookie(※) https://evil.example.com/...のページ ※originより制限が緩いsite単位での管理 ѱҙͷ͋Δ+BWB4DSJQU ブラウザ Origin ͕ҟͳΔϖʔδ GFUDI ʹΑΔϨεϙϯεಡΈऔΓ

Slide 38

Slide 38 text

38 XSSʹͭͳ͕Δةݥͳ࣮૷ྫ +BWB4DSJQUͷίϯςΩετͰղऍ͞ΕΔ෦෼ document.body.innerHTML = “ユーザーの入力” document.write(“ユーザーの入力”) ʹ Ϣʔβʔͷೖྗ͕͋Δ ˠ ةݥͳίʔυʹͳΔ K2VFSZͷK2VFSZBQQFOE ΍ 3FBDUKTͷEBOHFSPVTMZ4FU*OOFS)5.- ͳͲ ϥΠϒϥϦΛ࢖͍ͬͯͯ΋஫ҙ͕ඞཁͳ෦෼΋͋Δɻ ࣮૷ྫ ࣮૷ྫ ࣮૷ྫ note

Slide 39

Slide 39 text

39 IDOR ʢInsecure Direct Object Referenceʣ

Slide 40

Slide 40 text

40 ඇެ։

Slide 41

Slide 41 text

41 ඇެ։

Slide 42

Slide 42 text

42 ඇެ։

Slide 43

Slide 43 text

43 IDORͷݪཧ POST /posts/ comment=今⽇はいい天気☀ ID: 1ͷ౤ߘΛߋ৽͢ΔϦΫΤετ POST /posts/ comment=こんにちは︕ ID: 2ͷ౤ߘΛߋ৽͢ΔϦΫΤετ ౤ߘ͝ͱʹ*%ΛׂΓ౰ͯͯαʔόʔଆͰࣝผ ฤूର৅ͷ౤ߘΛϦΫΤετ࣌ʹ*%Ͱࢦఆ A͞Μ͕ࣗ਎ͷ ౤ߘʢID: 1ʣΛߋ৽ ߈ܸऀ͕ࣗ਎ͷ ౤ߘʢID: 2ʣΛߋ৽ "͞Μ ʮࠓ೔͸͍͍ఱؾ‗ʯ ߈ܸऀ ʮ͜Μʹͪ͸ʯ ౤ߘ ౤ߘ

Slide 44

Slide 44 text

44 IDORͷݪཧ POST /posts/ comment=私はお⾦持ちです︕ ID: 2ͷ౤ߘΛߋ৽͢ΔϦΫΤετ ߈ܸऀ͕ࣗ਎ͷ ౤ߘʢID: 2ʣΛߋ৽ 他⼈の投稿IDに 変更して更新 "͞Μ ʮࢲ͸͓ۚ࣋ͪͰ͢ʂʯ ߈ܸऀ ʮ͜Μʹͪ͸ʯ ౤ߘ ౤ߘ

Slide 45

Slide 45 text

45 CSRF (Cross-Site Request Forgery)

Slide 46

Slide 46 text

46 ඇެ։

Slide 47

Slide 47 text

47 ඇެ։

Slide 48

Slide 48 text

αʔόʔ͸ɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯ؅ཧΛϦΫΤετ࣌ʹ෇ Ճ͞ΕΔ$PPLJFϔομͷ஋Ͱߦ͏ ϒϥ΢βଆͰ͸ɺϦΫΤετൃੜ࣌ʹαΠτผʹอଘ͞Ε͍ͯͨ$PPLJFΛࣗಈతʹ෇༩͢Δ 48 CSRFͷݪཧ ϩάΠϯ Ϣʔβʔhoge https://example.com Set-Cookie: sessionid=sdfhaiew ϒϥ΢βʹ CookieΛอଘ

Slide 49

Slide 49 text

αʔόʔ͸ɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯ؅ཧΛϦΫΤετ࣌ʹ෇ Ճ͞ΕΔ$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෇༩

Slide 50

Slide 50 text

ࣗಈͰ$PPLJFૹ৴͞ΕΔੑ࣭Λར༻ͯ͠ ଞͷϢʔβʔ͕ҙਤ͠ͳ͍ϦΫΤετૹ৴͢Δ63-ΞΫηεͤͨ͞ΒͲ͏ͳΔʁ 50 CSRFͷݪཧ Ϣʔβʔͷ࡟আ ʮϢʔβʔͷ࡟আʯͷϦΫΤετ ͱಉ͡63-Λૹ৴ ϩάΠϯࡁΈͷϒϥ΢βͰ ϦϯΫΛ։͘ Ϣʔβʔhoge Cookieͷ஋͔Β Ϣʔβʔhoge͔ΒͷϦΫΤετ ͱͯ͠ॲཧ ˠ Ϣʔβʔͷҙਤʹ൓ͯ͠উखʹΞΧ΢ϯτ͕࡟আ͞Εͯ͠·͏ Cookie: sessionid=sdfhaiew ϦΫΤετʹ ࣗಈతʹ$PPLJF෇༩ ϒϥ΢β͔Β IUUQTFYBNQMFDPN ΁ͷϦΫΤετૹ৴

Slide 51

Slide 51 text

51 SQL Injection

Slide 52

Slide 52 text

52 ඇެ։

Slide 53

Slide 53 text

53 ඇެ։

Slide 54

Slide 54 text

8FCΞϓϦέʔγϣϯͰ͸σʔλͷอଘʹσʔλϕʔεʢ%#ʣ͕ར༻͞ΕΔ͜ͱ͕ଟ͍ 54 DBαʔόʔ Webαʔόʔ SQL Injectionͷݪཧ ίϝϯτʹ”hoge”͕ ؚ·ΕΔ౤ߘΛݕࡧ ”hoge”ΛؚΉίϝϯτΛ DBݕࡧ͢Δॲཧ ݕࡧ݁ՌͷϨίʔυ %#ͷૢ࡞ʹԠͯ͡ ൃߦ͢Δ42-ΫΤϦΛ૊Έཱͯ SELECT * FROM users WHERE comment LIKE ‘%hoge%’

Slide 55

Slide 55 text

55 42-*OKFDUJPOͷݪཧ 4&-&$5'30.VTFST8)&3&DPNNFOU-*,&bϢʔβʔͷೖྗ` ʮ`ʯͰғΘΕͨ෦෼͸จࣈྻͱͯ͠ղऍ ϢʔβʔͷೖྗΛར༻͢Δ42-ΫΤϦ

Slide 56

Slide 56 text

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-ΫΤϦ

Slide 57

Slide 57 text

৘ใ࿙͍͑ 6/*0/۟Λར༻ͯ͠Ϩεϙϯε͔Β৘ใऔಘ #MJOE42-*OKFDUJPO ৚݅ࣜΛར༻ͨ͠ΤϥʔԠ౴͔Β৘ใऔಘ͢Δ &SSPSCBTFE42-*OKFDUJPO ৚݅ࣜΛར༻ͨ͠4-&&1͔Β৘ใऔಘ͢Δ 5JNFCBTFE42-*OKFDUJPO %P4 4-&&1۟ͷར༻ʹΑΔॲཧͷ஗Ԇ 57 42-*OKFDUJPOʹΑΔ߈ܸྫ ར༻͍ͯ͠Δ%#αʔόʔͷछྨ΍ݖݶʹΑͬͯ͸ɺ೚ҙίʔυ࣮ߦ΍ϑΝΠϧಡΈऔΓ΋Մೳʹ

Slide 58

Slide 58 text

58 Path Traversal

Slide 59

Slide 59 text

59 ඇެ։

Slide 60

Slide 60 text

60 ඇެ։

Slide 61

Slide 61 text

ϑΝΠϧΞοϓϩʔυɾμ΢ϯϩʔυػೳͷ࣮૷ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 61 Path Traversalͷݪཧ อଘઌ΍ಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETzGJMFOBNF GJMFOBNFதʹlzΛؚΊͨύεΛࢦఆ͢Δͱɾɾɾ

Slide 62

Slide 62 text

ϑΝΠϧΞοϓϩʔυɾμ΢ϯϩʔυػೳͷ࣮૷ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 62 Path Traversalͷݪཧ ಡΈग़͢ϑΝΠϧ͕FUDQBTTXEʹͳͬͯ͠·͏ lBQQVQMPBETFUDQBTTXEz อଘઌ΍ಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETzGJMFOBNF GJMFOBNFதʹlzΛؚΊͨύεΛࢦఆ͢Δͱɾɾɾ

Slide 63

Slide 63 text

೚ҙͷίʔυ࣮ߦ QIQ΍KTQͷ഑ஔʹΑΔαʔόʔ্Ͱͷίʔυͷ࣮ߦ αʔόʔ্ͷ೚ҙͷϑΝΠϧɾ৘ใͷಡΈऔΓ ϩάϑΝΠϧͷऔಘ αʔόʔͷߏ੒৘ใऔಘ ؀ڥม਺ͷऔಘ 63 Path TraversalʹΑΔ߈ܸྫ

Slide 64

Slide 64 text

64 DoS (Denial-of-Service)

Slide 65

Slide 65 text

65 DoSͷ࣮ྫ ϓϩϑΟʔϧը૾ઃఆ࣌ʹ੾Γൈ͖ॲཧͷίϚϯυ͕࣮ߦ͞Ε͍ͯΔ ϐΫηϧ਺͕ଟ͍ը૾Λੜ੒ͯ͠Ξοϓϩʔυ $ vips black black.png 1000000 1000000 --bands 3 ྫʣԯϐΫηϧͷQOHը૾Λੜ੒ ˠ ੾Γൈ͖ॲཧͰ๲େͳ$16ϦιʔεΛফඅ

Slide 66

Slide 66 text

66 ඇެ։

Slide 67

Slide 67 text

67 DoSͷݪҼྫ ܁Γฦ͠ॲཧͷ࣮૷ϛε ϑΝΠϧͷऔΓѻ͍ ճ෮ෆೳͳྫ֎ ճ਺ͷ্ݶ੍͕ݶ͕ແ͍ αΠζ੍ݶ͕ແ͍ɺϦιʔεͷ։์๨Ε ϝϞϦͷྖҬ֎ΞΫηε͕ൃੜ͢ΔόάʹΑΔϓϩηεͷΫϥογϡ

Slide 68

Slide 68 text

68 OS Command Injection

Slide 69

Slide 69 text

69 ඇެ։

Slide 70

Slide 70 text

70 ඇެ։

Slide 71

Slide 71 text

ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷ஋ʹϢʔβʔͷೖྗΛར༻͢Δ࣮૷ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ৔߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 71 OS Command Injectionͷݪཧ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ஋?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗ஋ʯΛࢦఆ͢Δͱɾɾɾ

Slide 72

Slide 72 text

ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷ஋ʹϢʔβʔͷೖྗΛར༻͢Δ࣮૷ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ৔߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 72 OS Command Injectionͷݪཧ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ஋?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗ஋ʯΛࢦఆ͢Δͱɾɾɾ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ͭ໨ͷίϚϯυ ͭ໨ͷίϚϯυ ͭ໨ͷίϚϯυ Ϣʔβʔͷࢦఆͨ͠ίϚϯυ͕࣮ߦ͞Εͯ͠·͏

Slide 73

Slide 73 text

73 OS Command Injectionͷ࣮૷ྫ ίϚϯυΛ࣮ߦ͢Δؔ਺ʹϢʔβʔೖྗΛར༻͢Δέʔε ʢจࣈྻ݁߹ͳͲʣ system(“ユーザーの入力”) exec(“ユーザーの入力”) passthru(“ユーザーの入力”) Runtime.getRuntime().exec(“ユーザーの入力”) child_process.spawn(“ユーザーの入力”) child_process.exec(“ユーザーの入力”) 1)1 +BWB /PEFKT exec(“ユーザーの入力”) system(“ユーザーの入力”) 3VCZ

Slide 74

Slide 74 text

੬ऑੑͷରࡦ 74

Slide 75

Slide 75 text

ຊηΫγϣϯͷΞδΣϯμ 75 1. Path Traversalରࡦ 2. OS Command Injectionରࡦ 3. ੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋश΍ࠓޙͷۀ຿Ͱ࣮ ફͯ͠΄͍͜͠ͱ

Slide 76

Slide 76 text

ϑΝΠϧΞοϓϩʔυɾμ΢ϯϩʔυػೳͷ࣮૷ ʢྫɿϓϩϑΟʔϧը૾ͷऔಘɺ$47σʔλͷೖߘͳͲʣ 76 Path Traversalͷݪཧʢ࠶ܝʣ อଘઌ΍ಡΈग़͠ݩͷσΟϨΫτϦΛܾఆ͢ΔࡍʹϢʔβʔͷೖྗΛར༻ lBQQVQMPBETzGJMFOBNF ˠ ಡΈग़͢ϑΝΠϧ͕ҙਤ͠ͳ͍FUDQBTTXEʹͳͬͯ͠·͏ lzΛར༻͢Δͱɾɾɾ lBQQVQMPBETFUDQBTTXEz

Slide 77

Slide 77 text

../../../etc/passwd 77 Path Traversalରࡦ filenameʹ1্ͭͷ֊૚Λࣔ͢ “../” ͕ར༻Ͱ͖Δ͜ͱ͕໰୊͔ͩΒɾɾɾ filename͔Β “../” ΛऔΓআ͘ॲཧΛͯ͠ରࡦ etc/passwd /app/uploads/etc/passwd “/app/uploads/” + filename ࡉ޻Λͯ͠΋ BQQVQMPBET഑Լ͕ಡΈग़͠ର৅ͷύεʹͳΔ ˠ ೚ҙͷύεͷϑΝΠϧΛಡΈग़͢͜ͱ͕Ͱ͖ͳ͘ͳͬͨ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ

Slide 78

Slide 78 text

78 Path Traversalରࡦ Node.jsͰͷ࣮૷ ΛऔΓআ͘ॲཧ

Slide 79

Slide 79 text

ઌఔͷ1BUI5SBWFSTBMͷରࡦΛӌճͯ͠ FUDQBTTXEΛಡΈग़ ͯ͠Έ·͠ΐ͏ ͲͷΑ͏ʹରࡦΛ͢Δͱ׬ᘳʹमਖ਼Ͱ͖Δ͔Λߟ͑ͯΈ·͠ΐ͏ 79 ԋश8ɿରࡦͷӌճ (࣮ࢪ࣌ؒ: 10෼)

Slide 80

Slide 80 text

filenameʹ….//….//….//….//etc/passwd Λࢦఆ͢Δ͜ͱͰରࡦΛӌճͰ͖Δ 80 Path Traversalରࡦ ….//….//….//etc/passwd ../../../etc/passwd /app/uploads/../../../etc/passwd “/app/uploads/” + filename → /etc/passwd ͔ΒϑΝΠϧΛಡΈग़ͯ͠͠·͏

Slide 81

Slide 81 text

81 Path Traversalରࡦ ରࡦྫ ύεͷਖ਼نԽͷྫɿ /app/uploads/./././etc/passwd → /app/uploads/etc/passwd /app/uploads/././../uploads/../etc/././passwd → /etc/passwd ύεΛਖ਼نԽͯ͠ɺҙਤͨ͠σΟϨΫτϦ഑Լ͕ࢦఆ͞Ε͍ͯΔ͔Λ ݕূ /app/uploads/ Ͱ࢝·Δʁ

Slide 82

Slide 82 text

ίϚϯυΛ࣮ߦ͢ΔࡍͷҰ෦ͷ஋ʹϢʔβʔͷೖྗΛར༻͢Δ࣮૷ -JOVYͰγΣϧػೳΛ༗ޮʹͨ͠ίϚϯυ࣮ߦͷ৔߹ʢྫɿDIJME@QSPDFTTFYFDʣ γΣϧεΫϦϓτͷߏจ͕ར༻Ͱ͖Δ 82 OS Command Injectionͷݪཧʢ࠶ܝʣ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ஋?DSPQPVUQVUQOH cΛؚΊͨʮϢʔβʔͷೖྗ஋ʯΛࢦఆ͢Δͱɾɾɾ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ͭ໨ͷίϚϯυ ͭ໨ͷίϚϯυ ͭ໨ͷίϚϯυ Ϣʔβʔͷࢦఆͨ͠ίϚϯυ͕࣮ߦ͞Εͯ͠·͏

Slide 83

Slide 83 text

83 OS Command Injectionରࡦ ίϚϯυͷҾ਺ͱͯ͠ѻ͏෦෼ΛγΣϧߏจͷҰ෦ͱͯ͠ར༻Ͱ͖ͯ͠·͏ͷ͕໰୊͔ͩΒɾɾɾɾ Ϣʔβʔೖྗͷ෦෼Λ""ͰғΉ DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYϢʔβʔͷೖྗ஋?DSPQ PVUQVUQOH DPOWFSUJOQVUQOH HSBWJUZDFOUFSSFTJ[FYcMTc?DSPQPVUQVUQOH ""಺ͰͭͷҾ਺ͱͯ͠ೝࣝ͞ΕΔͷͰɺ MT͸࣮ߦ͞Εͳ͍ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ

Slide 84

Slide 84 text

84 OS Command Injectionରࡦ /PEFKTͰͷ࣮૷

Slide 85

Slide 85 text

9-1. ઌఔͷOS Command InjectionͷରࡦΛӌճͯ͠ ls Λ࣮ߦͯ͠Έ· ͠ΐ͏ 9-2. ͲͷΑ͏ʹରࡦΛ͢Δͱྑ͍͔Λߟ͑ͯΈ·͠ΐ͏ 85 ԋश9ɿରࡦͷӌճ (࣮ࢪ࣌ؒ: 10෼)

Slide 86

Slide 86 text

86 OS Command Injectionରࡦ AͰίϚϯυΛғΜͰରࡦΛӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlYAMTA?zDSPQlPVUQVUQOHz

Slide 87

Slide 87 text

87 OS Command Injectionରࡦ ରࡦɿ ಛఆͷจࣈΛېࢭͯ͠ίϚϯυ͕࣮ߦ͞Εͳ͍Α͏ʹ͠Α͏ɾɾɾ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ Λېࢭ A

Slide 88

Slide 88 text

88 OS Command Injectionରࡦ ͰίϚϯυΛғΜͰରࡦΛӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlY MT ?zDSPQlPVUQVUQOHz

Slide 89

Slide 89 text

89 OS Command Injectionରࡦ ରࡦɿ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ Λېࢭ A

Slide 90

Slide 90 text

90 OS Command Injectionରࡦ lcMTczͰจࣈྻ෦෼Λൈ͚ͯӌճͰ͖Δ DPOWFSUlJOQVUQOHzHSBWJUZDFOUFSSFTJ[FlYzcMTcz?zDSPQlPVUQVUQOHz

Slide 91

Slide 91 text

91 OS Command Injectionରࡦ ରࡦɿ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ Al Λېࢭ ېࢭจࣈΛ૿΍͢ରࡦͰຊ౰ʹେৎ෉ɾɾɾʁ

Slide 92

Slide 92 text

92 OS Command Injectionରࡦ ϑΝΠϧ໊΁ͷࡉ޻ͱ૊Έ߹Θͤͯӌճ DPOWFSUlUNQJOQVUQOHʘzHSBWJUZDFOUFSSFTJ[FlcMTcY?zDSPQ lPVUQVUQOHz όοΫεϥογϡͰlΛΤεέʔϓॲཧ

Slide 93

Slide 93 text

/PEFKTͷ৔߹ IUUQTHJUIVCDPNNNPNUDIFWNBHJDLXBOEKT Ͱಉ༷ͷॲཧΛهड़Ͱ͖Δ 93 OS Command Injectionରࡦ ରࡦྫ ίϚϯυ࣮ߦΛͤͣʹಉ౳ͷॲཧΛ࣮ݱ͢Δ ېࢭจࣈΛ૿΍͢ ํ਑Λݟ௚ͦ͏

Slide 94

Slide 94 text

ੈͷதҰൠʹެ։͞Ε͍ͯΔ߈ܸख๏΍ରࡦͷϕετϓϥΫςΟε͕͋Ε ͹ͦΕʹج͍࣮ͮͯ૷Λ͢Δ • ͢΂ͯͷ߈ܸखஈΛࣗ෼Ͱߟ͑ɺ׬ᘳʹରࡦΛ࣮૷͢Δ͜ͱ͸೉͍͠ • 944΍42-*OKFDUJPOͳͲͷҰൠతͳ੬ऑੑ͸ɺϑϨʔϜϫʔΫͷυΩϡϝϯτதͳͲɺ ϕετϓϥΫςΟεͷهࡌ͕͋Δ৔߹͕ଟ͍ͷͰͦΕʹै͏ 94 ੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋश΍ࠓޙͷۀ຿Ͱ࣮ફͯ͠΄͍͜͠ͱʣ

Slide 95

Slide 95 text

95 ੬ऑੑରࡦͷϙΠϯτʢࠓճͷԋश΍ࠓޙͷۀ຿Ͱ࣮ફͯ͠΄͍͜͠ͱʣ ѱ༻͞Ε΍͍͢ػೳ΍࣮૷Λ஌Ζ͏ • ઃܭɾ࣮૷͍ͯ͠Δ࣌ʹηΩϡϦςΟΛҙࣝͰ͖Δঢ়ଶʹͳΖ͏ ʢϢʔβʔೖྗ͕ଟ͍ՕॴɺϑΝΠϧμ΢ϯϩʔυɾΞοϓϩʔυͳͲʣ • ٯʹѱ༻͞ΕΔ͜ͱ͕ͳ͍҆શͳػೳɾ࣮૷΋෼͔ΔΑ͏ʹ

Slide 96

Slide 96 text

96 ੬ऑੑରࡦͷϙΠϯτʢࠓޙۀ຿ͷதͰߟ͑ͯ΄͍͜͠ͱʣ ΑΓ؆୯ʹ͔࣮ͭ֬ʹ҆શʹ࣮૷Ͱ͖Δํ๏΍୅ସࡦΛଟ֯తʹߟ͑Α͏ 04$PNNBOE*OKFDUJPOͷྫ ˠ ίϚϯυ࣮ߦΛ͢Δؔ਺Λ࢖͏ͷΛ΍ΊΔ

Slide 97

Slide 97 text

• PortSwigger WebSecurity Academy ʢ https://portswigger.net/web-security ʣ • ମܥతʹֶͿ ҆શͳWebΞϓϦέʔγϣϯͷ࡞Γํ ʢ https://www.sbcr.jp/product/4797393163/ ʣ 97 WebΞϓϦέʔγϣϯʹର͢Δ߈ܸख๏ΛΑΓৄ͘͠ษڧ͍ͨ͠ํ͸

Slide 98

Slide 98 text

ԋश 98

Slide 99

Slide 99 text

99 ࠓճ͸ʮCTFʯͱݺ͹ΕΔܗࣜͰνʔϜ͝ͱͷԋश CTFͱ͸ʁ Capture The Flag ઐ໳஌ࣝ΍ٕज़Λۦ࢖ͯ͠Ӆ͞Ε͍ͯΔFlagʢൿີͷจࣈྻʣΛݟ͚ͭग़͠ɺ ࣌ؒ಺ʹ֫ಘͨ͠߹ܭಘ఺Λڝ͏ϋοΩϯάίϯςετ νʔϜ͝ͱʹ֫ಘͨ͠ϙΠϯτΛڝ͏ ԋश֓ཁ

Slide 100

Slide 100 text

100 ඇެ։

Slide 101

Slide 101 text

101 ໰୊͸2छྨ ੬ऑੑΛѱ༻ͯ͠ൿີͷ'MBHΛ औಘɾૹ৴͢Δ͜ͱͰ ϙΠϯτΛ֫ಘͰ͖Δ໰୊ ߈ܸʢAttackʣ ѱ༻Մೳͳ੬ऑੑΛमਖ਼͠ɺ ϦϙδτϦʹίϛοτ ߨࢣʹ֬ೝΛͯ͠΋Β͏͜ͱͰ ϙΠϯτΛ֫ಘͰ͖Δ໰୊ ๷ޚʢDefenseʣ ໰୊ʹ͍ͭͯ

Slide 102

Slide 102 text

102 üνʔϜ಺Ͱ෼͔Βͳ͍ਓ͕͍Ε͹ڭ͑߹͏ͳͲɺޓ͍ʹॿ͚߹͍ͳ͕ΒਐΊ ͍ͯͩ͘͞ üΦϯϥΠϯͷਓ͕͍Δ৔߹ʹ͸ɺߨࢣ΋ࢀՃͰ͖ΔΑ͏ɺߨࢣ͕ೖ͍ͬͯΔ νϟϯωϧͷϋυϧΛ׆༻͍ͯͩ͘͠͞ üαʔόʔʹ઀ଓͰ͖ͳ͍ͳͲͷτϥϒϧ࣌͸SlackͰϝϯγϣϯ ʢ @pdo-fye0325-prd-security-tutors ʣ Λ෇͚ͯߨࢣʹ஌Β͍ͤͯͩ͘͞ αʔόʔϦηοτͳͲͷରԠΛߦ͍·͢ üձࣾͷϧʔϧ΍๏཯Λक্ͬͨͰ͋Ε͹ɺར༻͢Δπʔϧ΍αΠτʹ੍ݶ͸ ͋Γ·ͤΜ ԋशͷਐΊํ

Slide 103

Slide 103 text

103 είΞαʔόʔʹ͍ͭͯ ࠓճͷԋशͰඞཁͳ֤छૢ࡞͕Ͱ͖ΔαʔόʔͰ͢ ໰୊ͷճ౴ఏग़ ֫ಘͨ͠ϙΠϯτͷ֬ೝ ॱҐͷ֬ೝ

Slide 104

Slide 104 text

104 είΞαʔόʔ΁ͷΞΫηεͱϩάΠϯ ഑෍͞ΕͨείΞαʔόʔͷURLΛ։͘ ※͜ͷαʔόʔ͸߈ܸର৅Ͱ͸ͳ͍͜ͱʹ஫ҙ ӈ্ͷLoginΛΫϦοΫ note

Slide 105

Slide 105 text

105 Check1: είΞαʔόʔ΁ͷΞΫηεͱϩάΠϯ νʔϜ͝ͱʹ഑෍͞Ε͍ͯΔϩάΠϯ৘ใͰϩάΠϯ

Slide 106

Slide 106 text

106 Check1: ໰୊Ұཡϖʔδͷ֬ೝ ࠓճͷԋशதͰ͸໰୊จ͸νʔϜ͝ͱʹ഑෍͞ΕͨυΩϡϝϯτΛࢀর͍ͯͩ͘͠͞

Slide 107

Slide 107 text

107 ໰୊ʹ͍ͭͯ ü෇༩ϙΠϯτ͸Լهͷ௨ΓͰ͢ attack: 100 pts defense: मਖ਼͕׬ᘳͳ৔߹: 100 pts मਖ਼͕ෆ׬શͳ৔߹: 50 pts üChallenge͝ͱʹ൪߸͕ৼΒΕ͍ͯ·͕͢Ͳͷॱ൪Ͱղ͍ͯ΋ߏ͍·ͤΜ üChallenge಺ͷattack΍defenseʹ΋ղ͘΂͖ॱ൪ʹࢦఆ͸͋Γ·ͤΜ ü֤໰୊Ͱͦͷ໰୊͕ղ͚ͨνʔϜ਺Λ֬ೝͰ͖·͢ ଟ͘ͷνʔϜ͕ղ͚ͨ໰୊ͷํ͕೉қ౓͕௿͍͔΋͠Ε·ͤΜ

Slide 108

Slide 108 text

໰୊ͷ֬ೝ 108

Slide 109

Slide 109 text

109 Check 2: νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ໰୊֬ೝ ֤νʔϜʹ഑෍͞ΕͨυΩϡϝϯτ͔Β໰୊จΛ֬ೝͰ͖·͢

Slide 110

Slide 110 text

110 Check 3: νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ໰୊֬ೝ ໰୊෼தͷϦϯΫΛΫϦοΫͯ͠߈ܸର৅ͷΞϓϦέʔγϣϯʹΞΫηε ϢʔβʔΛొ࿥ͯ͠ϩάΠϯ͢ΔͱɺϓϩϑΟʔϧ͕දࣔ͞ΕΔγϯϓϧͳWebαΠτ

Slide 111

Slide 111 text

111 Check 4: νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣͷιʔείʔυͷऔಘ ֤νʔϜʹ഑෍͞ΕͨϦϙδτϦΛΫϩʔϯͯ͠ιʔείʔυΛ֬ೝ $ git clone /bootcamp-2024-teamx.git $ cd bootcamp-2024-teamx/ $ ls … fortune … ໰୊໊ͱಉҰͷσΟϨΫτϦ໊ʹͦͷ໰୊ʹؔ࿈ͨ͠ϑΝΠϧ͕֨ೲ͞Ε͍ͯΔ ࠓճͷ໰୊ͷ৔߹͸ʮfortuneʯ

Slide 112

Slide 112 text

112 ΞϓϦέʔγϣϯͱιʔεɾίʔυ͔Β ੬ऑੑΛ୳ͯ͠'MBHΛ֫ಘ͠Α͏ʢ߈ܸฤʣ

Slide 113

Slide 113 text

113 Flagʹ͍ͭͯ üFlagͷܗࣜ͸໰୊͝ͱʹࢦఆ͕ͳ͍ݶΓɺ ctfRED{[¥x20-¥x7E]+} ʢ{}಺͸ද ࣔՄೳͳ1จࣈҎ্ͷASCIIจࣈʣͰ͢ üdummy{…} ͱ͍ͬͨμϛʔͷFlag͕දࣔ͞ΕΔ͜ͱ͕͋Γ·͕͢ɺຊ෺Ͱ͸ ͳ͍͜ͱʹ஫ҙ͍ͯͩ͘͠͞ ü഑෍͞ΕͨιʔείʔυதͰ͸ɺຊ෺ͷFlag͕ϚεΫ͞Ε͍ͯ·͢ üFlag͸ૹ৴ϑΥʔϜ͔ΒԿճૹ৴ͯ͠΋ϙΠϯτ͕ݮΔ͜ͱ͸͋Γ·ͤΜ͕ɺ ਪଌ͕ࠔ೉ͳจࣈྻʹͳ͍ͬͯ·͢ üօ͞Μͷਐ௙۩߹Λ֬ೝ͍ͨ͠ͷͰɺFlag͸ͳΔ΂͘ཷΊࠐ·ͣʹఏग़Λ͓ ئ͍͠·͢

Slide 114

Slide 114 text

114 ੬ऑੑʹ͍ͭͯ ü࣍ͷ੬ऑੑ͸ࠓճͷ߈ܸର৅Ͱ͸͋Γ·ͤΜ • HTTPΛར༻ͯ͠௨৴͍ͯ͠Δ • CookieʹSecureଐੑ͕෇༩͞Ε͍ͯͳ͍ • DoS߈ܸ͕Մೳ • ϩάΠϯࢼߦճ਺ʹ੍ݶ͕ͳ͍

Slide 115

Slide 115 text

115 νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿFlagͷ৔ॴͷ֬ೝ ·ͣ͸ιʔείʔυத͔Βz'MBHzͷ৔ॴΛ୳͢ 'MBH͸࠷ॳʹొ࿥͞ΕΔϢʔβʔͷ lGMBHzΧϥϜʹ֨ೲ͞Ε͍ͯΔ fortune/src/database/seeders/UserSeeder.php ϩάΠϯதͷϢʔβʔ໊͕zBENJOzͷ ͱ͖ʹzGMBHzΛදࣔ fortune/src/resources/views/user.blade.php

Slide 116

Slide 116 text

116 νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ੬ऑੑ ϩάΠϯ͍ͯ͠ΔϢʔβʔΛࣝผ͢ΔϩδοΫΛݟͯΈΔ VTFS@JE͕Ωʔͷ$PPLJFͷ஋ΛϩάΠϯதͷϢʔβʔͷJEͱͯ͠ར༻͍ͯ͠Δ

Slide 117

Slide 117 text

117 νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ੬ऑੑ ؅ཧऀϢʔβʔ͸ΞϓϦέʔγϣϯ͸࠷ॳʹొ࿥͞Ε͍ͯΔϢʔβʔͳͷͰɺ ؅ཧऀϢʔβʔͷ VTFS@JE ͸ Ͱ͋Δ͜ͱ͕༧૝Ͱ͖Δ ։ൃऀπʔϧ͔Β$PPLJFΛฤूͯ͠஋Λ̍ʹมߋ

Slide 118

Slide 118 text

118 νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ੬ऑੑ ΋͏Ұ౓ϦΫΤετΛૹ৴͢Δͱɾɾɾ'MBH͕දࣔ͞Εͨ

Slide 119

Slide 119 text

119 νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿϑϥάఏग़ ֫ಘͨ͠'MBHΛ໰୊ϑΥʔϜ͔Βఏग़ ໰୊͕྘৭ʹมԽͯ͠QUT֫ಘ

Slide 120

Slide 120 text

120 ߈ܸʹར༻Ͱ͖ͨ੬ऑੑΛमਖ਼ͯ͠ΈΑ͏ʢ๷ޚฤʣ

Slide 121

Slide 121 text

121 मਖ਼ʹ͍ͭͯ ü੬ऑੑҎ֎ͷ෦෼ͷಈ࡞͸Ͱ͖Δ͚ͩอͬͨ··Ͱमਖ਼Λߦ͍ͬͯͩ͘͞ üҰؾʹଟ͘ͷఏग़͕͋Δͱ֬ೝ͕େมʹͳΔͷͰɺमਖ਼͸ਵ࣌ఏग़ͯ͠΋Β ͑Δͱॿ͔Γ·͢ αϒϚϦϯઓ๏

Slide 122

Slide 122 text

122 Check 6: νϡʔτϦΞϧ໰୊ʢ๷ޚฤʣ: मਖ਼ͷಈ࡞֬ೝ $ cd fortune $ docker compose up --build ഑෍͞ΕͨϦϙδτϦதͷίʔυΛमਖ਼ޙͷಈ࡞֬ೝ ࣍ͷίϚϯυͰ%PDLFSίϯςφͷىಈͱಉ࣌ʹϏϧυΛ࣮ߦ αʔόʔ͕ىಈͯ͠ IUUQMPDBMIPTU ͔ΒΞΫηεͰ͖Δ

Slide 123

Slide 123 text

123 Docker Composeͷجຊૢ࡞ʢࢀߟʣ $ docker compose exec php /bin/bash PHPαʔϏεͷίϯςφͰγΣϧΛىಈ $ docker compose down ίϯςφΛ࡟আ

Slide 124

Slide 124 text

αʔόʔ͸ɺʮͲͷϢʔβʔʹΑΔϦΫΤετ͔ʯͱ͍ͬͨηογϣϯ؅ཧΛϦΫΤετ࣌ʹ ෇Ճ͞ΕΔCookieϔομͷ஋Ͱߦ͏ ϒϥ΢βଆͰ͸ɺϦΫΤετൃੜ࣌ʹαΠτผʹอଘ͞Ε͍ͯͨCookieΛࣗಈతʹ෇༩͢Δ 124 ηογϣϯ؅ཧʢ࠶ܝʣ ϩάΠϯ Set-Cookie: sessionid=sdfhaiew ౤ߘ΁ͷ͍͍Ͷ ౤ߘͷฤू Cookie: sessionid=sdfhaiew Cookieͷ৘ใ͔Β Ϣʔβʔhoge͔ΒͷϦΫΤετ ͱͯ͠ॲཧ https://example.com΁ϦΫΤετ → อଘͨ͠CookieΛϦΫΤετ ϔομʹࣗಈతʹ෇༩ Ϣʔβʔhoge https://example.com ϒϥ΢βʹ CookieΛอଘ Cookie: sessionid=sdfhaiew

Slide 125

Slide 125 text

125 Check 7: νϡʔτϦΞϧ໰୊ʢ๷ޚฤʣ: ίʔυͷमਖ਼ ϑϨʔϜϫʔΫʹ༻ҙ͞Εͨηογϣϯ؅ཧͷAPIΛར༻ͯ͠ɺ user_idͷอ؅΍ࢀরΛ͢ΔΑ͏ʹमਖ਼ fortune/src/app/Http/Controllers/UserController.php

Slide 126

Slide 126 text

126 Check 8: νϡʔτϦΞϧ໰୊ʢ๷ޚฤʣ: मਖ਼ͷఏग़ masterϒϥϯνʹमਖ਼ίϛοτΛؚΊͨޙɺSlackͷ֤νʔϜͷνϟϯωϧʹͯ ԼهͷΑ͏ͳϝοηʔδͰߨࢣʹ௨஌͍ͯͩ͘͠͞ ߨࢣ͕֬ೝޙɺείΞαʔόʔ্ͰϙΠϯτΛ෇༩ͯ͠ɺ݁ՌΛฦ৴͠·͢ masterϒϥϯνͷΈ͕࠾఺ର৅Ͱ͋Δ͜ͱʹ஫ҙ͍ͯͩ͘͠͞

Slide 127

Slide 127 text

127 Check 9: είΞαʔόʔ্Ͱͷ֫ಘϙΠϯτͷ֬ೝ Scoreboardλϒ͔Βɺ֤νʔϜ͕֫ಘͨ͠ϙΠϯτΛ֬ೝՄೳ

Slide 128

Slide 128 text

Ҏ্Ͱ͜ͷޙͷԋशͷઆ໌͸ऴྃͰ͢ ࠷ޙʹɾɾɾ

Slide 129

Slide 129 text

129 ࠓճͷԋशͷউऀ͸ɺ ϙΠϯτΛ࠷΋ଟ֫͘ಘͨ͠νʔϜ

Slide 130

Slide 130 text

130 ࠓճͷԋशͷউऀ͸ɺ ϙΠϯτΛ࠷΋ଟ֫͘ಘͨ͠νʔϜ Ͱ͸ͳ͘ɾɾɾ

Slide 131

Slide 131 text

131 ࠓճͷԋशͷউऀ͸ɺ ϙΠϯτΛ࠷΋ଟ֫͘ಘͨ͠νʔϜ Ͱ͸ͳ͘ɾɾɾ Ͱ͖Δ͚ͩଟ͘ͷ͜ͱΛֶͿ͜ͱ͕Ͱ͖ͨνʔϜ Ͱ͢ʂ νʔϜͷதͰڠྗ͋ͬͯ͠ԋशΛਐΊ͍ͯͩ͘͞ ߨࢣਞ͔Βͷώϯτ΋ੵۃతʹ׆༻͍ͯͩ͘͠͞

Slide 132

Slide 132 text

Appendix. 132

Slide 133

Slide 133 text

133 Appendix 1. webhook.siteͷ࢖͍ํ ᶃ https://webhook.site/ ʹΞΫηε͢ΔͱɺࣗಈతʹURL͕ൃߦ͞ΕΔ

Slide 134

Slide 134 text

134 Appendix 1. webhook.siteͷ࢖͍ํ ᶄ ൃߦ͞ΕͨURLʹରͯ͠ϦΫΤετૹ৴ ϒϥ΢βͰΞΫηε curlͰૹ৴͢Δ scriptλάͰϦΫΤετૹ৴

Slide 135

Slide 135 text

135 Appendix 1. webhook.siteͷ࢖͍ํ ᶅ ൃߦ͞ΕͨURLѼͷHTTPϦΫΤετͷத਎Λ֬ೝՄೳ methodͱURL ΫΤϦύϥϝʔλ ΫΤϦύϥϝʔλ ϦΫΤετϘσΟ

Slide 136

Slide 136 text

136 Appendix 2. curlίϚϯυͷ࢖͍ํ λʔϛφϧ͔ΒHTTPϦΫΤετΛૹ৴Ͱ͖Δπʔϧ # Cookieヘッダを設定してリクエスト $ curl -H ‘Cookie: user_id=1’ http://localhost:8000/ # フォームの送信 $ curl -X POST -d ‘param=1&param2=hoge’ http://example.com/ # ファイルをアップロード $ curl -X POST -F upfile=@/path/to/sample.txt http://example.com/upload

Slide 137

Slide 137 text

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)

Slide 138

Slide 138 text

138 Appendix 3. Chrome։ൃऀπʔϧͷ࢖͍ํ Option + Command + I Ͱىಈ ʮιʔεʯλϒ ݱࡏͷϖʔδͷදࣔʹඞཁͳ HTMLɺJSɺCSSΛӾཡͰ͖Δ JSͷ৔߹ʹ͸ߦ൪߸ΛΫϦοΫ͢ Δ͜ͱͰϒϨʔΫϙΠϯτΛઃஔ ֤ͯ͠ม਺ͷ஋ͳͲΛ֬ೝՄೳ

Slide 139

Slide 139 text

139 Appendix 3. Chrome։ൃऀπʔϧͷ࢖͍ํ ʮωοτϫʔΫʯλϒ ʮϩάΛอ࣋ʯʹνΣοΫΛ෇͚Δ͜ͱͰϖʔδભҠ ͕ൃੜͯ͠΋ɺϦΫΤετཤྺ͕࡟আ͞Εͳ͍ ʮΞϓϦέʔγϣϯʯλϒ ද͍ࣔͯ͠ΔWebαΠτͷ Cookie΍localStorageͷӾཡ΍ฤू͕Մೳ ϒϥ΢βͰൃੜͨ͠ϦΫΤετ ΛӾཡͰ͖Δ

Slide 140

Slide 140 text

140 Appendix 4. Burp Suiteͷ࢖͍ํ ʮProxyʯ→ ʮInterceptʯ ʮOpen browserʯΛΫϦοΫ͢Δ ͜ͱͰ૊ΈࠐΈϒϥ΢β͕ىಈ

Slide 141

Slide 141 text

141 Appendix 4. Burp Suiteͷ࢖͍ํ ʮIntercept is onʯͷঢ়ଶʹ͢Δ ͱɺىಈͨ͠ϒϥ΢βͰൃੜ͠ ͨϦΫΤετΛதஅͯ͠ฤूͰ ͖Δ

Slide 142

Slide 142 text

142