ํฐ์คํ ๋ฆฌ ๋ทฐ
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
goblin ๊ฐ์ ๊ฒฝ์ฐ ์ ๊ณผ๋ ๋ค๋ฅธ ๊ฒ no={$_GET [no]} ์์ญ์ ์ฟผ๋ฆฌ๋ฌธ์ ์ฝ์ ํ์ฌ admin ๊ณ์ ์ผ๋ก ์ ๊ทผํด์ผ ๋ฉ๋๋ค.
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
๋ํ preg_match์ ์์ญ์ด ํ๋ ๋ ์ถ๊ฐ๋๋ฉด์ ์ฑ๊ธ ์ฟผํฐ(')์ ๋๋ธ์ฟผํฐ(") ๊ณผ ์กด์ฌํ ๊ฒฝ์ฐ " No Quotes " ํ์ด์ง๋ก ๋๊น์ผ๋ก์จ ํํฐ๋ง ์์ญ์ด ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฑ๊ธ ์ฟผํฐ๋ฅผ " hex๋ก ๋๋ ค์ url encoding " ์๋๋ฅผ ํด๋ดค์ง๋ง ๋์ผํ๊ฒ ๊ฑธ๋ฆฌ๋ค์. ์ด๋ด ๊ฒฝ์ฐ ์ฟผํฐ ์ข ๋ฅ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ ์ ํ ์ฟผ๋ฆฌ๋ฌธ์ ์ง์ผ๋ฉ๋๋ค.
no= ๊ฐ์ 1์ ๋ฃ์ด๋ณด๋ฉด " Hello Guest " ๊ฐ ๋์ค๋ ๊ฒ์ ๋ณด๋ guest ๊ณ์ ์ no=1์ ๋ถ์ฌ๋ฐ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ผ no=1 ์ ์ ์ธํ 2 ๋ 3 ๋ฑ ๊ฑฐ์ง ๊ฐ์ผ๋ก ๋ง๋ค์ด ์ค์ผ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
if($result['id'] == 'admin') solve("goblin");
๋ํ ํด๋น ์์ค๋ฅผ ๋ณด๋ฉด id= ๋งค๊ฐ๋ณ์์ "admin" ๊ฐ์ด ๋ค์ด๊ฐ์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํํธ๊ฐ ๋ณด์ ๋๋ค.
admin์ hex ์ฝ๋๋ก ๋๋ ค url์์ ์ดํดํ ์ ์๊ฒ๋ no=2 or id=%61%64% 6d%69%6e ์ด๋ฐ ํํ๋ก ์ ๋ ฅํด๋ดค์ง๋ง ํด๋ ๋ง ํด์ค ๋ฟ ๋ฐ์์ด ์์ต๋๋ค.
๊ณ ๋ฏผ์ ํด๋ณด๋ค๊ฐ admin์ ์์ 16์ง์ ํ์์ hex ๊ฐ์ผ๋ก๋ง ๋ณํํด์ ์ฝ์ ์ ํด๋ณธ ๊ฒฐ๊ณผ ์ฑ๊ณต์ ์ผ๋ก Clear๋ฅผ ํ์ธํ ์ ์์์ต๋๋ค.
admin์ hex๋ก ๋ณํํ๋ฉด -> 61646d696e ๊ฐ์ด ๋์ค๊ณ ํด๋น ํ์ด์ง๋ " php? " ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๊ธฐ์ hex ์ฝ๋๋ฅผ ์ดํดํ ์ ์๊ฒ๋ ๋งจ ์์ " 0x "๋ฅผ ์ ์ธํด์ฃผ๋ฉด ์นํ์ด์ง์์ ์ด๊ฒ hex ์ฝ๋๋ผ๋ ๊ฑธ ์ดํดํ ์ ์๊ฒ ๋ฉ๋๋ค.
hex ์ฝ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ฉด ASCII ์ฝ๋๋ ์ฌ์ฉํด๋ณผ ๋งํฉ๋๋ค.(์ง๋จํด๋ณด๋ฉด ๋ณดํต hex ์ฝ๋๋ ascii ์ฝ๋๋ ํจ๊ป ๋์ถ๋๋๊ตฐ์.)
Exploit Code
no=2 or id(097,100,109,105,110)
no=2 or id=0x61646d696e
"char" ํ์์ ๋ณ์๋ฅผ ์ ์ธํด์ฃผ๊ณ ๊ทธ ์์ a(097), d(100), m(109), i(105), n(110) ํํ๋ก ๋ณํํด์ค์ ์ต์ข ์ ์ผ๋ก if($result ['id']์ ๋ถ๋ถ์ " admin " ์ด ์ ์ธ๋๋๋ก ๋ณํํ์ฌ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
'CHALLENGE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LOS] wolfman ํ์ด(5) (0) | 2020.12.05 |
---|---|
[LOS] ORC ํ์ด(4) (0) | 2020.12.05 |
[LOS] cobolt ํ์ด(2) (0) | 2020.12.05 |
[LOS] gremlin ํ์ด(1) (0) | 2020.12.05 |
XSS Challenges 2 (0) | 2020.12.04 |