web/Lord of SQLInjection (25) 썸네일형 리스트형 Lord of SQLInjection - 9번 : vampire 역시나 별 어려움 없이 풀 수 없는 문제다. 바로 문제를 보러 가자. 문제 살펴보기 이전 문제들과 다르게 strtolower함수와 str_replace함수가 사용되었다. $_GET[id] = strtolower($_GET[id]); $_GET[id] = str_replace("admin","",$_GET[id]); strtolower 함수는 해당 함수의 인자로 받은 문자열의 알파벳을 소문자로 변환시키는 함수이다. 예를 들어서, strtolower("ADMIN");은 "admin"을 반환한다. str_replace 함수는 세 번째 인자로 받은 문자열에 첫 번째 인자로 받은 문자열이 포함되어 있을 경우, 해당 문자열을 두 번째 인자로 받은 문자열로 변환시키는 함수이다. 예를 들어서, str_replace(".. Lord of SQLInjection - 8번 : troll 상당히 간단한 문제이니 바로 문제를 보러 갑시다. 문제 살펴보기 문제 풀이에 필요한 부분을 확인해보자. if(preg_match("/admin/", $_GET[id])) exit("HeHe"); $query = "select id from prob_troll where id='{$_GET[id]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("troll"); 풀이 조건이 매우 간단하다. id 파라미터로 전달한 값에 admin을 포함시키지 않고 select문이 id='admin'인 행을 반환하게 하면 된다. 문제 풀이 과정 sql에서 select문은 대소문자를 구별하지 않는다.. Lord of SQLInjection - 7번 : orge 스포하자면 이번 문제도 blind sql injection 문제다. 문제를 보러 가봅시다. 문제 살펴보기 darkelf 문제에서 본 조건문이 보인다. 문제 풀이에 필요한 부분을 분석하면 아래와 같다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이번 문제도 or과 and 연산자를 우회하는 문제다. or는 ||로, and는 &&로 사용하면 될 것 같다. $query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$resu.. Lord of SQLInjection - 6번 : darkelf 문제 살펴보기 문제는 위와 같다. 5번 wolfman 문제와 상당히 유사하다. 문제 풀이에 필요한 코드를 살펴봅시다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); pw 파라미터를 통해 전달한 데이터에 or이나 and가 포함되어 있을 경우 exit 함수를 호출한다. $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); ... if($result['id'] == 'admin') solve("darkelf"); 나머지 부분은 wolfman 문제와 코드가 똑같다. sel.. Lord of SQLInjection - 5번 : wolfman 문제 살펴보기 문제 코드는 위와 같다. 문제 푸는데 필요한 부분을 분석해보도록 하자. if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 위 코드를 보면 pw 파라미터로 데이터를 전달할 때 공백을 사용하면 안된다고 한다. 공백을 우회하는 법은 다양하게 있으니 그 중 아무거나 사용하면 될 것 같다. $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); ... if($result['id'] == 'admin') solve("wolfman"); 해당 select.. Lord of SQLInjection - 4번 : orc Los 문제를 풀면서 처음으로 조금 오래 걸렸던 문제다. 문제가 어렵진 않았는데 본인의 실수로 인해 삽질을 좀 했다... 우선 문제를 보도록 하자. 문제 살펴보기 이전 문제들과 다르게 select문이 2개가 있다. 필요한 부분만 분석을 해보도록 하자. $query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello admin"; pw 파라미터를 통해 sql문을 조작할 수 있다. 그리고 해당 where 문을 참으로 만들 경우, Hello admin을 출력한다. $_GET[pw] .. Lord of SQLInjection - 3번 : goblin cobolt 문제와 마찬가지로 학교 끝나고 기숙사로 돌아가는 지하철에서 풀었던 문제다. 문제를 살펴보러 갑시다. 문제 살펴보기 코드를 분석하면 아래와 같다. if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); ', ", `가 다 막혔다. id='admin'과 같은 형태로 값을 전달할 수 없게 되었다. $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['.. Lord of SQLInjection - 2번 : cobolt 바로 문제를 보도록 합시다. 문제 살펴보기 문제 풀이에 필요한 코드만 살펴보자 if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 위 코드는 1번 문제인 'gremlin'의 코드에서 달라진게 없다. GET방식으로 전송한 id와 pw의 값에 'prob', '_', '.', '\' 가 존재하면 exit 함수를 호출한다. $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; ... $result = @mysqli_fet.. 이전 1 2 3 4 다음