목록web/LOS (10)
Tyojong
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("skeleton"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("skeleton");id가 admin이면 해결된다.$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";조회 되는 쿼리 뒷 부분을 보면 and 1=0 이 추가로 붙어있다. 하지만 별다른 필터링이 없기 때문에 그냥 뒷부분을 주석처리하면 된다. 문제 해결?p..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("vampire"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("vampire");id가 admin이면 해결된다.$_GET[id] = strtolower($_GET[id]);$_GET[id] = str_replace("admin","",$_GET[id]);입력받은 id를 모두 소문자로 바꾸고 admin이라는 문자열은 공백으로 바꿔 필터링한다. 문제 해결admin문자열을 공백으로 치환 시 한번의 과정만 진행한다.?id=..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("troll"); highlight_file(__FILE__);?> 문제 목표if($result['id'] == 'admin') solve("troll");id가 admin이면 해결된다.if(preg_match("/admin/", $_GET[id])) exit("HeHe");admin문자열을 필터링하고 있다. 문제 해결sql에서는 대•소문자를 구분하지 않는다.admin문자열을 필터링하고 있는 정규표현식을 보면 admin이라는 소문자로만 이루어진 문자열만 검증하고 있다.이런식으로 id에 대문자를 섞어 작성..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); highlight_file(__FILE__..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("darkelf"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("darkelf"); id가 admin이면 해결되지만if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");or과 and 문자열이 필터링된다. 문제 해결or 대신 || 를 사용하면 필터링을 우회할 수 있다. (sql injection ..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("wolfman"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("wolfman");id가 admin이면 문제가 해결된다.if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");공백이 필터링된다. 공백 필터링을 우회할 수 있는 방법은 많다. (우회 방법은 다른 블로그들이 더 잘 정리되..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello admin"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); highlight_file(__FILE__); ?> 문제 목..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("goblin"); highlight_file(__FILE__); ?> 문제 목표if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");따옴표는 작성이 불가능하고if($result['id'] == 'admin') solve("goblin");id가 admin이 출력되면 해결된다. 문제 해결따옴표를 사용할 수 없기 때문에 일반적인 문자열은 바로 사용할 수 없다...
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("cobolt"); elseif($result['id']) echo "Hello {$result['id']}You are not admin :("; highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("cobolt");출력된 id가 admin이면 문제가 해결된다. 문제 해결id가 admin인 유저의 id를 출력하기 위해?id=admin' --+ 를 입력하면 해결된다.select id from prob_cobolt where i..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("gremlin"); highlight_file(__FILE__);?>입문자를 위해 Lord of SQL Injection에서 앞으로 기본적으로 사용되는 코드만 살펴보자. (php 코드는 알면 좋다.) if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");preg_match 함수를 이용해 정규표현식에 해당하는 문자열을 필터링한다. (해당 문제에서는 다른 문제에 영향을 줄 문자열들만 필터링 하고 있다.)$query = "select id from prob_gr..