[Lord of SQL injection] 3번 문제 goblin 풀이
위의 문제를 보면 id 값은 guest로 고정이고, no값에 입력할 내용을 조작할 수 있다.
문제 해결 방법은 id=admin 값을 도출해내면 된다.
일단, 위의 코드를 잘 보면 prob', '', '.', '(),` 을 사용할 수 없다.
이 말인 즉슨 컬럼 안의 값을 출력하고자 id='admin' 과 같은 형태로는 질의가 불가하다.
먼저 no에 순차적으로 숫자를 넣어보았더니 no=1 에서 다음과 같은 결과를 얻을 수 있었다.
no값을 여러가지 입력 하려면 연결 연산자를 사용하여 입력이 가능하다
문제를 풀기 앞서 구축 해놓은 DB로 테스트를 진행하여 and 와 or 연산자를 이용하여 답을 찾아낼 수 있었다.
내가 풀이한 답은 이것이다.
select id from prob_goblin where id='guest' and no=0 or no=2
위의 내용을 조금만 알아보기 편하게 작성하자면 다음과 같다.
select id from prob_goblin where (id='guest' and no=0) or no=2
or을 기준으로 앞뒤를 나누어 보면
앞 : id='guest' and no=0
뒤 : no=2
앞의 값이 존재 하면 앞뒤를 만족하는 못든 값이 출력이 될것이고
앞의 값이 존재하지 않으면 뒤의 값만 출력이 될것이다.
(만약 앞뒤 둘다 존재하지 않는다면 아무것도 출력이 안될것이다.)
따라서 앞의 값은 no=1일때 만 hello guest를 출력하므로
or 뒤의 값만 변경하여 admin 값을 찾을 수 있었다.
(no=2가 admin 이라서 다행이었다.)