분류 전체보기
-
[Lord of SQLInjection] #15 assassin[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 03:54
15번째 몬스터 어쌔신! pw는 '가 필터링 되어있어 추가적으로 쿼리를 끊거나 생성하는 것이 안되고, like연산자를 이용해 레코드를 조회하고 조회된 레코드의 id값을 출력 받아서 해당 레코드가 admin인지 아닌지 알 수 있다. 간단한 부르트포싱 문제다! (브루트 포싱: 무차별 대입 공격) 여기서 like 연산자를 잠깐 살펴보고 가자. like 는 기본적으로 = 과 똑같이 동작한다. 하지만! like 연산자는 특별히 % 나 _ 같은 기호를 사용할 수 있다. %: 0개 이상의 모든 글자를 대체 가능 _: 1개의 모든 글자를 대체 가능 예를 들어 보자 'admin' like '%' => True 'admin' like 'admi%' => True 'admin' like 'a%n' => True 'admin..
-
[Lord of SQLInjection] #14 giant[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 03:22
14번째 문제! fromprob_giant 라고 띄어쓰기 없이 붙어 있어서 sql문이 제대로 동작하지 않는다. 그저 띄어쓰기를 넣으면 되는데 공백을 필터링 해놓아 막아놨다. 그렇다면 이 는 5번째 울프맨 문자와 똑같다. 공백우회 문제! %0a : Line Feed (\n) %0b, %0c : nonprintablenon printable characters %0d : carracarriage return (\r) %09 : Tap \n \r \t은 막혀있으니 %0b, %0c로 쉽게 해결할 수 있다. 🔪🔪자이언트 컷!🔪🔪
-
[Lord of SQLInjection] #13 bugbear[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 02:45
13번째 몬스터 버그베어! 코드를 살펴보니 substr ascii = or and 공백 0x 아주 이전까지 쓰였던 모든 함수들을 필터링해 막아 놓았다. 하지만 substr => mid 로 대체 or => || and => && 공백 => %0a like => in ' => " 다 빠져나갈 구멍이 있다! 구글링해서 우회기법들을 조금만 찾아봐도 어렵지 않게 풀 수 있을 것 같다! 좋아 이제 코드를 작성해보자. ?no=1%0a||%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)>{} 이 쿼리를 사용하여 비밀번호를 알아내고 ?no=1||id%0ain%0a("admin")%26%26mid(pw,{},1)%0ain%0a("'.format(j)+arr[i]+'")') 위와 같이 쿼리를 ..
-
[Lord of SQLInjection] #12 darkknight[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 21:09
12번째 괴물 다크나이트! 한번 살펴보자. 쿼리는 두부분으로 나뉘어 실행된다. 첫번재 쿼리는 입력값으로 pw와 no를 받고 두번째는 pw값만 받아 실행된다. 즉 두번째 쿼리에서는 no값은 유효하지 않은데 그럼 no는 어떤 의미로 사용될까?? no에는 따옴표가 포함되어 있지 않다. pw와 no는 각각 '(따옴표)가 필터링 되어 있어 따옴표를 사용할 수 없는데 pw = '' 의 경우 따옴표로 끊어서 쿼리를 추가적으로 만들어 낼 수 없다. 하지만 no = no는 따옴표가 없어서 쿼리를 추가적으로 찍어낼 수 있다. "no에 쿼리를 추가적으로 만들어서 Blind SQL Injection 하세요~" 라고 문제가 말하는 듯 하다. 좋아! 한번 파이썬 코드를 작성해보자 다크나이트 컷!
-
[Lord of SQLInjection] #11 golem[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 20:43
이제 11번째 몬스터! 골렘이다. 이제 뭔가 중간급 몬스터가 나온듯하다. 골렘! 좋아! 코드를 살펴보면 or and sutstr( = 등이 모두 필터링 되어있고, 최종적으로 요구하는 것은 admin의 비밀번호를 정확히 알아내어 입력하는 것이다. sql쿼리는 두 부분으로 나뉘어 동작하는데 첫번째는 id=guest로 설정되어있어서, 쿼리를 추가적으로 만들어서 admin의 비밀번호를 알아내야하고, 두번째 쿼리는 addslashes가 추가되어있지만 괜찮다! 첫번째 쿼리에서 admin의 비밀번호를 찾아내면 그만이다! Blind SQL Injction 문제다. 모두 이전까지 풀었던 문제들의 개념이 반복된다. 하지만 몇가지 추가된 개념이 있다면! substr우회! mid 함수를 사용하면 된다! mid함수는 subst..
-
[Lord of SQLInjection] #10 skeleton[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 19:56
10번째 SQLInjection 문제 스켈레톤! 쿼리 자체에 and 1=0 이 있어서 어떤 똥꼬쇼를 해도 쿼리는 False가 된다. 즉 동작하지 않는다. 그렇다면 and 1=0 부분을 날려버리면 그만 아닌가? 어렵지 않은 문제다. 주석을 삽입하여 and 1=0 절을 날려버렸다. ;(세미콜론) + (null)을 삽입하여 쿼리를 끊어 버리는 방법도 있다! sql에선 이후 남겨진 and 1=0은 완성되지 않은 쿼리로 인식해 동작하지않는다, 물론 신텍스 에러도 발생하지 않는다. 여튼! 스켈레톤 컷!
-
[Lord of SQLInjection] #9 vampire[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 19:45
이제 9번! 뱀파이어 문제 $_GET[id] = strtolower($_GET[id]); $_GET[id] = str_replace("admin","",$_GET[id]); 8번 트롤문제에서는 sql에서 대소문자를 구분하지 않는다는 취약점을 이용하여 해결했다. 9번 문제에는 이어서 소문자로 바꿔버리는 코드가 추가됬고, admin문자열을 공백으로 바꿔버리는 코드가 추가 됬다. 후후훗 귀엽군... 역시 따옴표가 필터링되어있어 쿼리를 추가로 생성해낼 수는 없다. 하지만 admin를 필터링 한 것이 아닌 admin을 공백으로 replace 해버린 다는 점에서 취약점이있다. id 값으로 adadminmin을 입력했다. 감이 오는가? adadminmin 중 adadminmin 가운데 admin은 공백이 되어버려 자..
-
[Lord of SQLInjection] #8 troll[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 19:26
8번째 몬스터 트롤! 한번 살펴보자 if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match("/admin/", $_GET[id])) exit("HeHe"); 두 코드를 보아 따옴표와 'admin'를 필터링 해놓았음을 알 수 있고, if($result['id'] == 'admin') solve("troll"); 코드를 보아 id값이 admin인 레코드를 조회해야한다. 따옴표가 필터링 되었으니 쿼리를 끊어서 추가로 삽입할 수도 없고, admin이 필터링 되었는데 어떻게 admin을 조회하라는거냐?!... 이 문제는 php코드와 mysql의 연동사이에서의 취약점에 대해 알아야한다! 해당코드는