문제 정보
문제 이름 : gremlin
Lord of SQLInjection
los.rubiya.kr
SQL Injection공부할때 매우 좋은 워게임 사이트라고 한다.
문제 설명
이번 문제에서는 코드가 주어진다.
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 값이 정상적으로 존재하면 문제를 해결할 수 있다.
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 참이되어 참이된다.따라서 문제를 해결할 수 있다.
'WEB hacking > LORD OF SQL INJECTION' 카테고리의 다른 글
[Lord of SQL Injection] darkelf 문제 풀이 (0) | 2023.04.08 |
---|---|
[Lord of SQL Injection] wolfman 문제 풀이 (0) | 2023.04.06 |
[Lord of SQL Injection] orc 문제 풀이 (0) | 2023.04.04 |
[Lord of SQL Injection] goblin 문제 풀이 (0) | 2023.04.02 |
[Lord of SQL Injection] cobolt 문제 풀이 (0) | 2023.03.31 |