[Lord of SQL Injection] gremlin 1번 풀이
[ 문제접근 ]
1. 쿼리 : id와 pw파라미터가 존재하고, 이를 통해 DB를 조회한다
2. $_GET[id], $_GET[pw] : GET방식을 통해서 id와 pw를 입력을 받는다
3. if($result['id']) solve("gremlin"); : DB에 id와 pw가 일치하고 그 결과가 참일경우, 즉 쿼리 질의결과 참인경우 solve(gremlin)를 시켜준다
=> 정리 : 우리는 쿼리문을 통한 질의에서 항상 참을 반환하도록 하면 된다
[ 문제풀이 ]
더보기
<정답> : ?id=0&pw='1'or'1
=> select id from prob_gremlin where id='0' and pw='1'or'1'
기존쿼리 뒤에 남아있는 '를 처리하기 위해 '1 을 적어서 pw='1'or'1' 의 형태가 완성되게 된다
<풀이>
select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'
{$_GET[id]}와 {$_GET[pw]} 자리에 우리가 입력한 값이 들어가게 되고, 만약 우리가 정답에 적힌 내용을 요청하게 되면 다음과 같은 쿼리문이 완성된다.=> select id from prob_gremlin where id='0' and pw='1'or'1'
여기서는 pw부분이 가장 중요하다.
pw에는 1이 들어가고 or 조건으로 1을 넣어주면, 1은 항상 참이므로 앞의 and 결과가 거짓이라도 or을 사용해 결과가 하나라도 참이면 참인 결과가 도출되게된다, 정답과 같은 방법으로 넣어주면 항상참인 쿼리문을 완성할 수 있다.
<주의> 쿼리문에서는 문자열 및 각종 형식을 잘 맞춰서 넣어줘야지 값이 나온다.
정답에 ' 를 사용한 이유도 문자열은 ' ' 이런식으로 감싸져 있어야 하므로 1 뒤에 '를 붙여서 닫아주면
기존 쿼리에 존재하는 ' 와 이어붙어 '1'이 되게 된다 또한 앞에서 기존쿼리 앞부분에 존재하는 '를 사용했으므로기존쿼리 뒤에 남아있는 '를 처리하기 위해 '1 을 적어서 pw='1'or'1' 의 형태가 완성되게 된다
"CREMLIN Clear!" 가 나타난다! 정답!
이제 다음 스테이지로 넘어가도록 하자
'WarGame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] darkelf 6번 풀이 (0) | 2021.10.12 |
---|---|
[Lord of SQL Injection] wolfman 5번 풀이 (0) | 2021.10.12 |
[Lord of SQL Injection] orc 4번 풀이 (0) | 2021.10.10 |
[Lord of SQL Injection] goblin 3번 풀이 (0) | 2021.10.10 |
[Lord of SQL Injection] cobolt 2번 풀이 (0) | 2021.10.10 |
댓글
이 글 공유하기
다른 글
-
[Lord of SQL Injection] wolfman 5번 풀이
[Lord of SQL Injection] wolfman 5번 풀이
2021.10.12 -
[Lord of SQL Injection] orc 4번 풀이
[Lord of SQL Injection] orc 4번 풀이
2021.10.10 -
[Lord of SQL Injection] goblin 3번 풀이
[Lord of SQL Injection] goblin 3번 풀이
2021.10.10 -
[Lord of SQL Injection] cobolt 2번 풀이
[Lord of SQL Injection] cobolt 2번 풀이
2021.10.10