728x90
Lord of sql injection - Wolfman 풀이 |
los 5번 wolfman에 대한 풀이 포스팅입니다.
먼저 preg_match를 살펴보면, 공백에 대한 필터링이 추가된것을 볼 수 있습니다.
문제 접근
이 문제는 이전 문제와 유사해보이고, 단순해보이지만 공백에 대한 필터링이 존재합니다. 따라서 공백문자를 우회하는 방법을 찾는게 키포인트일 것으로 예상됩니다.
<?php include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; if($result['id'] == 'admin') solve("wolfman"); highlight_file(__FILE__); ?> |
다른 조건은 앞의 문제들과 유사합니다. id가 admin인 레코드를 반환받는다면 solve()가 동작하게 되어있습니다.
풀이
만약 공백에 대한 필터링이 없다면 우리는 이전 문제처럼 다음과 같이 작성할 수 있습니다.
$query = "select id from prob_wolfman |
이때 공백 문자를 사용할 수 없으므로, 괄호를 이용하여 구분짓는다면 문제를 해결할 수 있습니다.
$query = "select id from prob_wolfman |
따라서 ?pw='or(id='admin')%23을 입력하면 solve 성공. (쉽게 해결함)
결과
728x90
댓글