WEB hacking/LORD OF SQL INJECTION

[Lord of SQL Injection] gremlin 문제 풀이

Roronoa 2022. 9. 27. 20:02
반응형

문제 정보

문제 이름 : gremlin

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

SQL Injection공부할때 매우 좋은 워게임 사이트라고 한다.

 

문제 설명

[그림 1] gremlin 문제 접속

이번 문제에서는 코드가 주어진다.

preg_match라는 필터링 함수가 있다. preg_match함수는 해당 문자열에서 전달받은 정규 표현식과 패턴이 일치하지 검사하는 함수이다.

preg_match의 첫 번째 인수는 필터링 할 문자를 넣고 두 번째 인수에는 우리가 입력한 문자를 넣고 세 번째 인자에는 필터링할 문자와 우리가 입력한 문자가 일치할 경우 그 문자를 $matches에 배열로 저장한다. 즉 필터링이 당한 문자가 matches에 저장된다는 소리이다. 매칭에 성공하면 1이 반환되고 실패하면 0이 반환된다.

preg_match('/대조 할 문자/','입력한 문자'$matches);

대조할 문자 뒤에 아래처럼 i가 붙는 경우가 있다. 이 경우는 대소문자를 구분하지 않는다는 뜻이다.

'/aaaa/'i

 

필터링 할 문자는 prob, . , ( , ) 를 필터링하고 대소문자를 구분하지 않는다.

 

$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";

위 코드는  GET으로 전달받은 id와 pw가 동시에 일치하는 레코드의 id 값을 갖고 오는것이다.

 

if($result['id']) solve("gremlin");

 fetch해준 $result에 id 값이 정상적으로 존재하면 문제를 해결할 수 있다.

 

[그림 2] 풀이

id=1' or '1&pw=1' or '1' = '1을 입력하여 문제를 해결하였다.

위에 문자열이 들어가면 $query "select id from prob_gremlin where id='1' or '1' = '1' and pw='1' or '1' ='1' ";

이런식으로 들어가게 되어 거짓 or 참 = 참 and 거짓 or 참 = 참이 된다.

거짓 or 참 and 거짓 or 참이 되며 => 참 and 참이되어 참이된다.따라서 문제를 해결할 수 있다.

 

반응형