[+] Security [+]
-
[Lord of SQLInjection] #18 nightmare[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 05:11
18번째 문제 악몽! 코드를 살펴보자면 비밀번호를 입력해서 레코드를 조회해야하는데 id != 'admin'이라고 admin으로 조회하는 걸 막아놨다. 여느때와 같이 prob과 _ . ( ) 는 필터링 되어있고 # 과 - 도 막혀있어서 id!='admin' 부분을 날려버릴수도 없고? 뭔가 한가지 빠져있는거같은데? ; + (null)로 쿼리를 끊어 버릴 수 있지 않은가? 이번엔 쿼리가 pw가 id보다 앞서 있는 형태다. 쿼리를 끊어버리세요~ 가 출제자의 의도인 듯 하다. 좋아! 쿼리를 끊어버리는 것까지는 알겠으나 if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 에서 글자수를 6글자까지로 제한을 걸어 놨다. 쿼리를 ')하고 닫고 ;%00 까지 만 4글자를 쓰는데 어떻게 하란 말..
-
[Lord of SQLInjection] #17 zombie_assassin[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 04:49
17번째 괴물 좀비어쌔신? 좀비어쌔신이라니? 세상에 이런 몬스터도 있나..? 음...? 여튼! 코드를 살펴보자 이번엔 파라미터로 입력받은 값에 역슬래쉬를 추가하고 문자열을 뒤집는다. 이런 이유에서 역슬래쉬 또한 뒤에 역슬래쉬가 붙어서 이스케이프 처리된다. 으으... 세상에나... 그럼 어떻게 풀어야하는가? 우리는 따옴표 앞에 역슬래쉬가 붙기를 원한다. 그렇다면 addslash코드를 역이용 하면 되지 않나?? 역슬래쉬를 붙인후 문자열을 뒤집어서 준다. 그렇다면? ?id="&pw=%231%20ro 를 쿼리로 삽입하여 풀 수 있다. 좀비어쌔신 컷!
-
[Lord of SQLInjection] #16 succubus[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 04:18
16번째 서큐버스! 코드를 살펴보자! 흐음. 이번 문제는 특별히 id값을 입력해야한다. 이유가 있지 않을까?? 물론! 이 문제를 풀려면 알아야하는 개념이 있다. 이스케이프 문자! 대부분은 문자열을 타이핑하려고 할때 따옴표를 사용해야함을 알고있지않은가? 하지만 문자열 안에 따옴표를 넣고싶다면? 'i'm good!' 이런식이라면 문자열이 끊어지게 된다. 그래서 'i\'m good' 이렇게 역슬래쉬를 앞에 붙여서 따옴표를 문자열 안에 포함시킬 수 있다. 위의 문제도 마찬가지다! id='' and pw='' 여기 id값에 역슬래쉬를 입력하게 되면 id='\' and pw='' 즉 id = '\'and pw='' id 값으로 'and pw= 를 입력한 셈이 된다! 그럼 pw 값에 쿼리를 마음껏 생성해서 %23으로..
-
[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..