[+] Security [+]
-
[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의 연동사이에서의 취약점에 대해 알아야한다! 해당코드는
-
[Lord of SQLInjection] #7 orge[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 05:03
짜란! 이번엔 7번 오우거 문제! 이전까지 배웠던 내용을 결합하여 문제를 낸 듯 하다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 를 보아 OR 와 AND를 필터링 해놓은 6번 다크엘프문제의 일부와 $_GET[pw] = addslashes($_GET[pw]); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 를 보아 Blind SQlInjection을 했던 4번 오크 문제의 결합이다. 4번, 6번 문제를 무사히 풀었다면 저언혀 어려울 것이 없다. 4번문제를 풀었을때 코드를 재사용 하도록하자! 4번문제와 달라진 점은 url 변수의 값이 orge 문제로타겟팅 되었다는 점과 입력하는 ..
-
[Lord of SQLInjection] #6 darkelf[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 04:45
이제 6번 문제! 다크엘프! if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 를 살펴보니 or and 명령어를 필터링 해놓았다. 공백우회에 이어서 이번엔 and or 우회! 이 역시도 풀이가 너무나도 간단하다 and는 &&로 대체할 수 있고, or는 || 로 대체할 수 있다! (|는 Shift + \(역슬레시)로 타이핑할 수 있다) 필자의 경우 ?pw=%27||id='admin'%23을 삽입하여 문제를 해결했다. 풀이에서 보여드리지 못했지만, &를 삽입할때 주의해야할 점이 있다. 쿼리에서 '&'는 파라미터값을 구분하는 용도로 쓰이기도 한다. (ex ?id='123'&pw='123) 이떄 사용되는 &와 입력값으로 사용하려는 &가 쓰임이 다르기 때문에 URL에서..
-
[Lord of SQLInjection] #5 wolfman[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 04:36
드디어 5번 문제! if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 절을 보아 공백을 필터링해놓은 듯하다! 즉! 공백우회 문제! 해답은 간단하다 %0a : Line Feed (\n) %0b, %0c %0d : carracarriage return (\r) %09 : Tap 등을 이용하여 공백을 대채할 수 있다! 짜란! 필자는 ?pw='%09or%09id='admin'%23 을 쿼리로 삽입하여 문제를 풀었다. 울프맨 컷!
-
[Lord of SQLInjection] #4 orc[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 02:16
이제 4번 문제!! 이전까지와 다른 점이 있다면 $_GET[pw] = addslashes($_GET[pw]); pw쿼리에 /를 붙여서 다시 pw 에 저장하는 코드가 보이고 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) URL파라미터로 입력한 pw가 데이터베이스에서 조회된 pw와 정확히 일치해야 문제를 패스할 수 있다. 즉 Blind SQL Injection 문제다! 으... 4단계부터 Blind SQL Injection이라니... Blind SQL Injection이란 임의의 코드로 원하는 값을 바로 얻어내는 것이 아닌. 특정한 쿼리를 입력해가며 서버의 참 거짓 반응을 통해 공격을 수행해야한다. 장님 처럼 더듬더듬 거리며 패스워드의 길이를 알아내고 문자열..
-
[Lord of SQLInjection] #3 goblin[+] Security [+]/Lord of SQLInjection 2020. 5. 2. 20:53
짜란! 3번문제!! 2번문제와 같이 데이터베이스에서 id가 admin인 계정을 조회해야하는데 문제가 있다. if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 에서 '(작은따옴표), "(큰따옴표), `(억음부호) 를 막아놓은 것이다. 흠! 미련한 짓을 하는군! SQL에서는 hex값을 문자열 대신 입력할 수 있다. 문자열 'a'를 의미하는 아스키 코드값의 16진수 값을 입력하면 SQL에서는 a라고 인식한다. 즉 id='a' 대신 id=0x61 로 입력할 수 있다! 3번 문제 컷!