neville Bartholomew(admin)을 선택한 후 패스워드 부분에 'or''='
를 입력한 후 Login을 클릭하면 정상적으로 로그인이 된다.
WebGoat가 설치된 경로로 이동하여 LoginSqlInjection.java 파일을 실행한 후 패스워드 입력값을 처리하는 부분을 찾는다.
쿼리를 실행하는 소스코드는
SELECT * FROM employee WHERE userid = " + userid + " and password = '" + password + "'
이렇게 되어있다.
아이디와 패스워드에 각각 Neville Bartholomew(admin), 'or''='을 입력하면 쿼리문은
SELECT * FROM employee WHERE userid = '
Neville Bartholomew(admin)' and password = ''or''=''
여기서 주의깊게 봐야하는 것은 password 이다.
작은따옴표 두개가 연이어 나오는 것은 Null을 뜻하고, SQL 구문에서 or는 앞의 구문과 뒤의 구문 중 하나만 참이면 결과로 참을 반환한다.
따라서 password = ''or''=''
는 password가 Null 값이거나 Null과 Null이 같은 경우이다. 앞의 패스워드가 비어 있는 것은 틀린 값이지만, or 뒤에 나오는 문장이 참이 되기 때문에 결괏값은 참이 된다.