web/Lord of SQLInjection (25) 썸네일형 리스트형 Lord of SQLInjection - 17번 : zombie assassin 문제 살펴보기 이전 문제인 succubus 문제에서 코드 2줄이 추가되었다. 추가된 코드만 확인해보자. 나머지 코드도 확인하고 싶은 사람은 succubus 문제 풀이를 참고하길 바란다. https://security-babo.tistory.com/18 Lord of SQLInjection - 16번 : succubus 문제 살펴보기 상당히 간단해보이는 문제다. if(preg_match('/\'/',$_GET[id])) exit("HeHe"); if(preg_match('/\'/',$_GET[pw])) exit("HeHe"); id 파라미터와 pw 파라미터를 둘 다 사용하여 값을 전달할 수 있다. 그리고 둘 security-babo.tistory.com $_GET['id'] = strrev(addslash.. Lord of SQLInjection - 16번 : succubus 문제 살펴보기 상당히 간단해보이는 문제다. if(preg_match('/\'/',$_GET[id])) exit("HeHe"); if(preg_match('/\'/',$_GET[pw])) exit("HeHe"); id 파라미터와 pw 파라미터를 둘 다 사용하여 값을 전달할 수 있다. 그리고 둘 다 single quote를 필터링한다. $query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("succubus"); 위 where문을 참으로 만들기만 하면 문제가 풀린.. Lord of SQLInjection - 15번 : assassin like 연산자를 사용하는 문제로 살짝 귀찮았던 문제였다. like 연산자에 대한 설명은 아래 글을 참고 https://security-babo.tistory.com/13 Lord of SQLInjection - 11번 : golem 문제를 풀기 전에 간단하게 sql의 like 연산자에 대해서 살펴보도록 하자. sql에서 'A' like 'B'는 'A'와 'B'의 동일 여부를 판단하는 연산자이다. like의 연산자는 '%', '_'와 함께 사용할 수 있는데, '%'는 security-babo.tistory.com 문제를 보러 갑시다. 문제 살펴보기 if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); pw 파라미터의 값으로 single quote(')를 사용.. Lord of SQLInjection - 14번 : giant 문제 살펴보기 문제 자체가 되게 간단하니 바로 문제에 대해서 설명하겠다. 위를 보면 from과 prob_giant가 붙어있는데 이거를 1byte 만 사용하여 떨어트려야 한다. shit 파라미터로 값을 전달하면 되는데 스페이스, \n(줄바꿈), \r(줄바꿈 후 해당 줄의 맨 앞으로 이동), \t(tab)이 다 막혔다. 문제 풀이 과정 스페이스, \n, \r, \t 말고도 \v(수직 탭)을 통해서 간격을 띄워줄 수 있다. 수직 탭은 말 그대로 수평 방향이 아닌 수직 방향으로 탭을 한다. \v를 url 인코딩한 값은 %0b이다. 이를 shit 파라미터에 전달해주면 문제가 풀릴 것이다. 페이로드 : ?shit=%0b 수직 탭의 존재를 잊고 있었는데, 이번 문제를 풀면서 공백 우회를 찾아보다가 발견하게 되었다. .. Lord of SQLInjection - 13번 : bugbear 문제를 풀기 전에 간단하게 in 연산자에 대해서 알아보도록 하자. sql에서 in 연산자는 = 연산자처럼 값을 비교하는 연산자이다. in 연산자는 = 연산자와 다르게 비교할 값을 괄호로 묶어주어야 한다.로 한다. 예를 들어, select id from (table 이름) where id in ('admin')은 id='admin'은 행을 select 한다. 그런데 in 연산자는 = 연산자와 다르게, 여러 값을 한 번에 비교가 가능하다. select id from (table 이름) where id in ('admin', 'guest')는 where id='admin' or id='guest와 같은 의미를 가진다. 이제 문제를 보러 가보자. 문제 살펴보기 역시나 이번에도 blind sql injection.. Lord of SQLInjection - 12번 : darkknight 문제 살펴보기 지금까지 계속 문제를 풀었다면 이제 대충 코드 길이만 봐도 blind sql injection 문제인 것을 확인할 수 있다. if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); pw 파라미터로 값을 전달할 때 single quote(')를 사용할 수 없고, no 파라미터로 값을 전달할 때 single quote('), 'substr', 'ascii', '='를 사용할 수 없다. pw 파라미터의 필터링은 "and no=~" 부분을 주석처리 하는 것을 막은 것 같고, no 파라미터의 필터링은 이전 문제들에서 이미 우회해봤으니 쉽게 풀릴 것 같다... 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'# .. 이전 1 2 3 4 다음