전체 글 (43) 썸네일형 리스트형 Lord of SQLInjection - 11번 : golem 문제를 풀기 전에 간단하게 sql의 like 연산자에 대해서 살펴보도록 하자. sql에서 'A' like 'B'는 'A'와 'B'의 동일 여부를 판단하는 연산자이다. like의 연산자는 '%', '_'와 함께 사용할 수 있는데, '%'는 모든 문자열을 의미한다. 예를 들어서, 'A' like 'B%' 는 'A'가 'B'로 시작하는 문자열인지 판단한다. 'A' like '%B' 는 'A'가 'B'로 끝나는 문자열인지 판단한다. 'A' like '%B%' 는 'A'가 'B'를 포함하는지 판단한다. '_'는 '_'와 같은 길이의 모든 문자열을 의미한다. 예를 들어서, 'A' like '_B' 는 'A'가 '(길이가 1인 모든 문자열)'+'B'와 같은지 판단한다. 'A' like '__B' 는 'A'가 '(길이.. Lord of SQLInjection - 10번 : skeleton 문제 스포 : 주석을 활용하는 문제 문제 살펴보기 query를 보면 1=0으로 모든 where문을 거짓으로 만드는 것을 볼 수 있다. 이걸 없애는게 목적인 문제인 것 같다. $query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("skeleton"); 해당 select문이 id='admin'인 행을 반환하게 하면 풀리는 문제이다. 상당히 간단하네요. 바로 풀어보도록 합시다. 문제 풀이 과정 pw 파라미터에 ' or id='admin'# .. 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] .. 이전 1 2 3 4 5 6 다음