Webgoat Numeric SQL Injection
말그대로 숫자를 이용한 SQL Injection이다.
이번 예제를 풀면서 프록시 서버 툴인 burpsuite도 사용해본다.
문제: 아래 폼을 사용하면 사용자가 날씨 데이터를 볼 수 있다. 모든 날씨 데이터가 표시되도록 하는 SQL Injection을 하시오
개발자도구를 이용한 SQL Injection
기본값인 Columbia의 출력값
Columbia외 나머지 name 값들이 이렇게 주어진다.
그럼 이 페이지를 개발자도구로 분석해보자
<select name="station">
<option value="101">Columbia</option>
<option value="102">Seattle</option>
<option value="103">New York</option>
<option value="104">Houston</option>
</select>
... 생략 ...
<input name="SUBMIT" type="SUBMIT" value="Go!">
URL과 HTML 코드를 보면
attack?Screen=44&menu=1100&station=101&SUBMIT=Go!
같은 형태로 서버로 전달 되는걸 알 수 있다.
mysql 문을 보면
SELECT * FROM weather_data WHERE station = 101
인 형태인걸 알 수 있고
SELECT * FROM weather_data WHERE station = 101 or 1 = 1
로 개or 1 = 1 항상 참은 조건을 넣어 공격할 수 있다.
실제로
이렇게 발자도구에서 or 1=1를 넣고 Go! 버튼을 누르면
비공개 자료도 모두 조회되는걸 볼 수 있다.
프록시 서버 툴 "Burpsuite를"을 이용한 Intercept
우리는 프록시 서버를 이용할 것이기 때문에 Firefox(브라우저는 이걸로 쓰자) 설정에서 설정을 사진과 같이 HTTP Proxy: localhost, Port: 8080 으로 설정해준다.
Burpsuite도 마찬가지로 8080 포트가 맞는지 확인되면 사용할 수 있다.
proxy 탭에서 Intercept is on으로 설정을 바꿔주고 Go 버튼을 누르면
8080 포트로 전송되는 데이터들을 Intercept 할 수 있다. 우린 이제 이걸 임의로 조작 후 전달 한다.
위와 같이 항상 참이 되는 or 1 =1 을 삽임 후 Intercept is on 을 누르면 off로 벼환되고 조작된 데이터가 전송 된다.
마찬가지로 개발자가 원하지 않던 데이터까지 조회되는걸 볼 수 있다.