본문 바로가기

전체 글

(43)
Lord of SQLInjection - 19번 : xavis 상당히 아이언맨이 보고싶어지는 문제 이름이다. 문제를 보러 가자. 문제 살펴보기 흠...역시 코드 길이를 보아하니 blind sql injection 문제인 것 같다. 문제 풀이에 필요한 부분을 분석하도록 하자. if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe"); pw 파라미터로 값을 전달할 수 있는데 'regex', 'like'를 사용하면 안된다고 한다. $query = "select id from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; ... $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$..
Lord of SQLInjection - 18번 : nightmare sql의 implicit type conversion을 이용한 문제이다. 자세한 내용은 아래 두 링크를 참고하길 바란다. https://learn.microsoft.com/ko-kr/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-ver16 https://learn.microsoft.com/ko-kr/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-ver16 문제 살펴보기 문제의 전체 코드는 위와 같다. 필요한 부분만 추출하여 보도록 하자. if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("N..
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 파라미터의 필터링은 이전 문제들에서 이미 우회해봤으니 쉽게 풀릴 것 같다...