WebGoat(웹고트) Stage 1:String SQL Injection
(1) Window xp에서 http://victim:8080/WebGoat/attack 사이트로 이동하여 목록에서 Stage 1:String SQL Injection을 찾아 이동합니다.
(2) 사용자 입력값이 서버로 넘어가는 과정을 확인합니다.
식별정보는 사용자는 12명 중에 선택해야하고, 인증정보는 패스워드를 입력해야합니다.
(3) Neville Bartholomew로 로그인해보겠습니다.
=> 서버로 전달될 때 employee_id=112&password=pass&action=Login 로 전달되어야 합니다.
서버 내부에서는 아래와 같이 처리될 것이라 유추
=> select * from 테이블명 where userId = 112 and userPw = 'pass';
(3)-1 입력값 검증,제한 없이 그대로 사용되는지 확인해야합니다.
패스워드에 구문오류를 유발할 수 있는 홑따옴표(')를 포함하여 입력합니다.
=> select * from 테이블명 where userId= 112 and userPw = 'pass'';
=> 오류를 유발할 수 있는 입력값이 그대로 전달되어 사용되는 것을 확인할 수 있습니다.
(3)-2 로그인이 가능하도록 쿼리를 조작합니다.
항상 참이 되는 쿼리를 생성합니다.
=> select * from 테이블명 where userId= 112 and userPw = 'a' or 'a' = 'a';
=> PW input 값은 8글자 이상 입력할 수 없습니다. maxlenght=8 제약이 걸려있습니다.
(4) Proxy를 이용하여 서버로 전달되기 전에 데이터를 조작해야합니다.
(4)-1 비밀번호에 임의의 값을 넣고 로그인을 시도합니다. 로그인을 하기 전 burp sutie에서 Intercept is on으로 설정해준 후 로그인을 시도합니다.
(4)-2 password 부분을 다음과 같이 조작하고, Intercept is on을 off로 변경해줍니다.
(5) 결과 확인
=> 서버에서는 요청 파라미터 password의 길이가 8글자 이하인지 점검하지 않았습니다. 즉, 입력값의 검증을 수행하지 않았습니다. 클라이언트에 적용한 보안 규칙과 동일 또는 그 이상의 보안 규칙을 적용해야합니다.
=> 쿼리문 생성 및 실행에 그대로 사용하기 때문에 발생하는 문제입니다.(SQL Injection)