Slide 1

Slide 1 text

੬ऑͳΞϓϦΛॻٕ͘ज़ BLJZN )PLLBJEPQN

Slide 2

Slide 2 text

ࣗݾ঺հ w BLJZN w ϚΠϒʔϜ w $5'ͱ͍͏ηΩϡϦςΟͷڝٕͷΑ͏ͳ΋ͷ w ೔ຊͰ͸4&$$0/$5'ͱ͔

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

$5' w SFWFSTJOH QXO w XFC w DSZQUP

Slide 6

Slide 6 text

w ʮ੬ऑͳΞϓϦΛॻ͘ʯ w $5'ͷ໰୊Λղ͘ɺ࡞Δ্Ͱศརͳٕज़ w ࣮ࡍʹ࡞੒ͨ͠໰୊Λྫʹղઆ w ͔ͤͬ͘ͳͷͰ1FSMʹߜͬͨ࿩

Slide 7

Slide 7 text

IUUQDUGLBUTVEPOPSH

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

PQFO') pMF

Slide 10

Slide 10 text

w ૝ఆͱͯ͠͸༻ҙ͞ΕͨςΩετϑΝΠϧΛಡΉɺ ϑΝΠϧ໊Λࢦఆ͢Δ͜ͱͰ੾Γସ͑Δ w ·ͣઈରύεΛࢦఆ͞ΕΔͱˠFUDQBTTXE w ૬ରύεͰ΋ˠFUDQBTTXE w ࢦఆͰ͖ΔύεΛ੍ݶͰ͖ΔΑ͏ʹ͠ͳ͚Ε͹ ͍͚ͳ͍

Slide 11

Slide 11 text

w Ͱ΋·ͩ໰୊͕͋Δ w PQFO') pMF w pMFcDBUFUDQBTTXE w ೚ҙͷίϚϯυΛ࣮ߦՄೳ

Slide 12

Slide 12 text

PQFONZGI pMFPSEJF

Slide 13

Slide 13 text

42-JOKFDUJPO

Slide 14

Slide 14 text

"SELECT * FROM user WHERE name = '$name' AND pass = '$pass'"

Slide 15

Slide 15 text

"SELECT * FROM user WHERE name = '' AND pass = '' OR 1=1--'"

Slide 16

Slide 16 text

w ೝূͷಥഁ͚ͩͰ͸ͳ͘ʜ w ςʔϒϧɺΧϥϜ৘ใ͔Β%#ͷ಺༰ΛಘΔ w TRMJUF@NBTUFS JOGPSNBUJPO@TDIFNB w .Z42-Ͱ͋Ε͹ɺ-0"%@'*-&Ͱ೚ҙͷϑΝΠ ϧΛಡΈࠐΉ͜ͱ͕Ͱ͖ͨΓɺ*/50065'*-& ͰϑΝΠϧͷॻ͖ग़͕͠Ͱ͖Δ

Slide 17

Slide 17 text

w ͍·͞Β42-JOKFDUJPO w ϓϨʔεϗϧμʔΛѻ͏৔߹ͳΒ҆શʁ w ͜Μͳ࿩΋ʜ

Slide 18

Slide 18 text

+40/42-J

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

w ΫΤϦϏϧλʹΑΔ42-ੜ੒ w 42-JOKFDUJPO͸ൃੜ͠ͳ͍Α͏ʹݟ͑Δ͕ʜ w ΢ΣϒΞϓϦʹ͓͍ͯɺϢʔβʔ͔Βͷೖྗ͸
 จࣈྻͱͯ͠ѻΘΕΔ͕ɺ+40/Ͱσʔλͷड͚ ౉͠Λ͢Δ͜ͱͰIBTISFGΛ౉͢͜ͱ΋Ͱ͖Δ w IBTISFGΛ౉ͨ͠ࡍͷΫΤϦϏϧλଆͷڍಈΛ
 ར༻ͨ͠42-JOKFDUJPO

Slide 21

Slide 21 text

\OBNF\BBB^^ 4&-&$5'30.AVTFSA8)&3& AOBNFA 03%&3#:VTFS@JE%&4$

Slide 22

Slide 22 text

w ͜Ε͚ͩͰ΋ڴҖɺೝূͷಥഁ΍ςʔϒϧ಺ͷ
 ͢΂ͯͷϨίʔυΛऔಘ͞ΕΔڪΕ͕͋Δ w ࠷ѱͷέʔε͸ʁ

Slide 23

Slide 23 text

w ໰୊ w BLJDUGRTFBSDIFS w IUUQDUGLBUTVEPOPSHQSPCMFN w 42-JUF w 42-.BLFSΛར༻ͨ͠੬ऑੑ

Slide 24

Slide 24 text

ΰʔϧผςʔϒϧͷϢʔβʔ໊ͱύεϫʔυΛಘΔ
 ͜͜ʹ͸੬ऑੑ͸ͳ͍

Slide 25

Slide 25 text

;(

Slide 26

Slide 26 text

w XIFSF۟Λ͢΂ͯࢦఆ͢Δ͜ͱ͕Ͱ͖Δ w ͜ΕͰԿ͕Ͱ͖Δ͔ w %#ͷ಺༰ ͢΂ͯ ΛऔಘͰ͖Δ

Slide 27

Slide 27 text

{ "name": "a", "1\"=\"1\") union select sql,tbl_name,null from sqlite_master where (\"a": "a" } WHERE ("name" LIKE ?) AND ("1"="1") union select sql,tbl_name,null from sqlite_master where ("a" LIKE ?) ΧϥϜ໊͸Τεέʔϓ͞Εͳ͍

Slide 28

Slide 28 text

w IUUQEFWFMPQFSTNPCBHFKQCMPH KTPOTRMJOKFDUJPO w IUUQCMPHLB[VIPPLVDPNUIF KTPOTRMJOKFDUJPOWVMOFSBCJMJUZIUNM w IUUQXXXTMJEFTIBSFOFULB[VIPKTPOTRM JOKFDUJPOBOEUIFMFTTPOTMFBSOFE

Slide 29

Slide 29 text

ਖ਼نදݱ

Slide 30

Slide 30 text

w ϢʔβʔͷೖྗΛਖ਼نදݱͷύλʔϯͱͯ͠ѻ͏ w RVPUFNFUB ͰΤεέʔϓ͢Δ w Τεέʔϓ͍ͯ͠ͳ͍৔߹͸ʁ w ॏ͍ਖ਼نදݱΛॻ͔ΕΔ w FWBM

Slide 31

Slide 31 text

\DPEF^

Slide 32

Slide 32 text

w ҆͝৺Λ w FWJM \QSJOU ^ dFWJM w ಈ͔ͳ͍ w &WBMHSPVQOPUBMMPXFEBUSVOUJNF w VTFSFFWBMΛ͢Ε͹ಈ͘Α͏ʹͳΔ

Slide 33

Slide 33 text

w QFSMҎ߱Ͱ͸ΑΓݫ͘͠ w d \ʜͱॻ͍ͯ΋ಈ͔ͳ͘ͳͬͨ w །Ұ൵͍͠ͷ͸ʜ"DNF&ZF%SPQT w 1FSMͰه߸ͷΈϓϩάϥϛϯά͸ෆՄೳʹ

Slide 34

Slide 34 text

use re 'eval'; ''=~('('.'?' .'{'.( '`'|'%').("\["^ '-').('`'| '!').('`'|',').'"' .('['^'+') .('['^ ')').('`'|')').('`'| '.').('['^'/').('{'^ '[').'\\'.'"'.('`'^'(' ).('`'|'%').('`'|',') .('`'|',').('`'|('/')). ','.('{'^'[').('['^ ',').('`'|'/').('['^')').( '`'|',').('`'| '$').'!'.'\\'.'\\'.('`'|'.'). '\\'.'"'."\;". '"'.'}'.')');$:='.'^'~';$~="\@"| '(';$^=')'^'['; $/='`'|'.';$,='('^'}';$\='`'|'!';$: =')'^'}';$~='*' |'`';$^='+'^'_';$/='&'|'@';$,='['&'~'; $\=','^"\|";$:= '.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.' ;$,='('^'}';$\ ='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_' ;$/='&'|'@';$, ='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'('; $^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~= '*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^ '~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!' ;$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\= ','^'|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^ '}';$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@' ;$,='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'(';$^="\)"^ '[' ;$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*' |(( '`'));$^='+'^'_';$/='&'|'@';$,='['&'~';$\ =','^'|' ;$: ='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'| '.';$,= '(' ^'}'; $\='`'|'!';$:=')'^'}';$~="\*"| '`';$^= '+' ^'_';$/='&'|'@';$,='['&'~';$\ =(',')^ '|' ;$:='.'^ '~';$~='@' |"\("; $^=')' ^+ '[';$/= '`'|'.'; $,='(' ^"\}"; $\ =('`')| "\!";$:= "\)"^ "\}"; ( ($~))= '*'|'`'; ($^) ='+' ^"\_"; $/=('&')| '@'; ($,) ='['& "\~";$\= ','^ '|'; ($:)= '.'^'~' ;$~= '@'| '('; $^=')' ^'[' ;$/= '`'| '.' ;$,= '('^ '}'; $\= '`' |(( '!' )); $:= ')' ^(( '}' )); $~= '*' |(( '`' )) ;( ($^))= (( (( '+')) )) ^+ "\_";$/= (( '&' ))|+ "\@"; $, =(( '['))& '~'; $\= ','^ "\|";$:= '.' ^'~' ;($~)= ('@')| "\(";$^= ')'^'[' use re 'eval'; )FMMP XPSME Λग़ྗ͢ΔϓϩάϥϜ

Slide 35

Slide 35 text

ηογϣϯ

Slide 36

Slide 36 text

w ΫϥΠΞϯταΠυηογϣϯ w ΫϥΠΞϯτଆͰอଘ͢Δ w DPPLJFΛར༻͢Δ

Slide 37

Slide 37 text

ϝϦοτ w αʔόଆͰηογϣϯετΞͷ؅ཧΛ͢Δඞཁ ͕ͳ͍

Slide 38

Slide 38 text

σϝϦοτ w ஌ΒΕͨ͘ͳ͍৘ใΛTFTTJPOʹอଘͯ͠͸͍͚ ͳ͍ w ηογϣϯΛഁغ͢Δͱ͖͸ʁˠDMJFOUଆͷ৘ใ ͱͯ͠ظݶΛ࣋ͨͤΔɺTFDSFUΛมߋ͢Δͱ͔ w TFDSFU͕ྲྀग़͢ΔͱTFTTJPOΛվ᜵͢Δ͜ͱ͕
 Ͱ͖Δ

Slide 39

Slide 39 text

.PKPMJDJPVT

Slide 40

Slide 40 text

eyJzdXBlcl9zZWNyZXRfdG9rZW4iOiJwOUI0aWFLYWg4b09VelkxIiwiaWQ iOiIxIiwibmFtZSI6ImFraXltIiwiZXhwaXJlcyI6MTQxNDY4NDk4MH0--- a4fba79dbd246638df17e57e97ed4f1fded7a7e3 { "super_secret_token": "p9B4iaKah8oOUzY1", "id": "1", "name": "akiym", "expires": 1414684980 } data HMAC

Slide 41

Slide 41 text

eyJzdXBlcl9zZWNyZXRfdG9rZW4iOiJwOUI0aWFLYWg4b09VelkxIiwiaWQ iOiIxIiwibmFtZSI6ImFraXltIiwiZXhwaXJlcyI6MTQxNDY4NDk4MH0--- a4fba79dbd246638df17e57e97ed4f1fded7a7e3 my $data = encode_base64(encode_json({ ... expires => time() + 3600, })); $data =~ s/=/-/g; my $hmac = hmac_sha1_hex($data, $SECRET); data HMAC

Slide 42

Slide 42 text

w σʔλΛ+40/ʹͨ͠΋ͷΛCBTFͰFODPEF w TFDSFUΛLFZͱ͢Δվ᜵๷ࢭͷ)."$4)"Λ
 ͚ͭΔ

Slide 43

Slide 43 text

w ໰୊ w BLJDUGR0OMJOFCBOLJOH w IUUQDUGLBUTVEPOPSHQSPCMFN w 42-JOKFDUJPO TFTTJPOվ᜵ w TFDSFUΛࢦఆ͍ͯ͠ͳ͍

Slide 44

Slide 44 text

w .PKPMJDJPVTͰTFDSFUΛࢦఆ͍ͯ͠ͳ͍৔߹
 ܯࠂ͕ग़Δ͕ɺͱΓ͋͑ͣಈ͘ w ͦͷͱ͖ʹ͸TFDSFUʹQBDLBHF໊͕ࢦఆ͞ΕΔ w .PKPMJDJPVT-JUFͷ৔߹͸ϑΝΠϧ໊ w QBDLBHF໊͕஌ΒΕΔɺ΋͘͠͸༧ଌͰ͖Δ΋ ͷͰ͋Ε͹TFDSFU͕෼͔Δ

Slide 45

Slide 45 text

1MBDL.JEEMFXBSF 4FTTJPO$PPLJF

Slide 46

Slide 46 text

1414682274.88017:BQoDAAAAAQiAAAAABWFkbWlu:. Storable::thaw(decode_base64('BQoDAAAAAQiAAAAABWFkbWlu')) { 'admin' => 0 } data HMAC

Slide 47

Slide 47 text

1414683541.42553:BQoDAAAAAQiAAAAABWFkbWlu:
 bb33fc2e391e3d76edcbc8ffdcf66065d1d82862 my $data = encode_base64(Storable::freeze({ admin => 1, })); my $hash = hmac_sha1_hex($data, $SECRET); HMAC data

Slide 48

Slide 48 text

w σʔλΛ4UPSBCMFͰγϦΞϥΠζͨ͠΋ͷΛ CBTFͰFODPEF w TFDSFU͕ࢦఆ͞Ε͍ͯͨ৔߹ w TFDSFUΛLFZͱ͢Δվ᜵๷ࢭͷ)."$4)"Λ
 ͚ͭΔ

Slide 49

Slide 49 text

w ηογϣϯվ᜵ w σετϥΫλ࣮ߦ

Slide 50

Slide 50 text

w IUUQTTQFBLFSEFDLDPNNBMBIPXUP IBDLNFUBDQBOEPUPSH w IUUQTHJTUHJUIVCDPNNJZBHBXB CBGBEBDEE

Slide 51

Slide 51 text

ίϯςΩετ

Slide 52

Slide 52 text

w ίϯςΩετͱ͸ w 1FSM͸୯਺ͱෳ਺Λผͱͯ͠ѻ͏ w !GPP w !GPPˠ w TDBMBS!GPPˠ w ϦετΛ!BSSBZʹ୅ೖ͢Ε͹഑ྻʹɺIBTIʹ୅ ೖ͢Ε͹ϋογϡʹ

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

1FSMͷίϯςΩετ͸ ѱ

Slide 55

Slide 55 text

w 1FSMͷಛ௃Ͱ΋͋Γɺݸਓతʹ͸݁ߏ޷͖ w 5FOH͸ίϯςΩετʹԠͯ͡ಈ࡞Λม͑Δ
 ͜Ε͸࢖ͬͯͳ͍ w NZBSHT GPP !@ Έ͍ͨͳ͜ͱ͕ Ͱ͖Δ w ศརͳ͜ͱ΋͋Ε͹ɺѱ͍͜ͱ΋͋Δ

Slide 56

Slide 56 text

w ໰୊ w $5'֤ҐMPHJOQBHF w IUUQBLJZNIBUFCMPKQFOUSZ w ۠੾ΓจࣈɺDPOUFYUʹΑΔ੬ऑੑ

Slide 57

Slide 57 text

ϦετΛड͚औΔͱల։ OBNFBQBTTCQBTTD

Slide 58

Slide 58 text

{ ... pass => 'asdf', give_me_flag => 0, give_me_flag => 'give_me_flag', # true! 0 } VTFS\HJWF@NF@qBH^HJWF@NF@qBH

Slide 59

Slide 59 text

w 0EEOVNCFSPGFMFNFOUTJOBOPOZNPVTIBTI w VTFXBSOJOHT'"5"-BMM w ·͋΍ͬͯΒΕͳ͍

Slide 60

Slide 60 text

w IUUQXXXTPOHNVKQSJKJFOUSZ DHJQBSBNIUN w IUUQCMPHUPLVNBSVPSHOFX DMBTTPGWVMOFSBCJMJUZJOQFSMXFCIUNM

Slide 61

Slide 61 text

·ͱΊ w Ҿ਺ͷPQFO w +40/42-J w ਖ਼نදݱͰͷFWBM w ΫϥΠΞϯταΠυηογϣϯ w ϋογϡͷϦετͷల։