분류 전체보기
-
[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번 문제 컷!
-
[Lord of SQLInjection] #2 cobolt[+] Security [+]/Lord of SQLInjection 2020. 5. 2. 20:34
2번문제! pw를 md5('') 해시 함수로 암호화 하여 데이터 베이스와 조회하는 듯 하다. 또한 if($result['id'] == 'admin') solve("cobolt"); 구문을 보아하니 id 값이 admin이어야 하는 듯하다. 1번문제에서 풀었던 방법과 마찬가지로 주석을 삽입하여 pw 절 이하를 날려버리면 pw값과 무관하게 id값을 불러올수 있다. 2번 문제도 컷!!
-
[Lord of SQLInjection] #1 gremlin[+] Security [+]/Lord of SQLInjection 2020. 5. 2. 20:29
두근두근 Lord of SQLInjection의 첫번째 문제다. $db로 데이터베이스와 연동하고 정규식으로 prop _ . ( ) 같은 문자들은 사용을 제한한 듯하다. 그 아래 $query 절이 핵심인데 select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]} get방식으로 url에 쿼리를 삽입하면 간단하게 id pw값을 전달할 수 있다. 특정한 id로 접속해야하는 것은 아니고 그저 id 값이 있다면 1번 문제를 패스할 수 있는 것같다! %23을 삽입하여 pw 이하 절을 주석처리 하였다. 좋아! 1번문제 박살!
-
SQLInjection이란?[+] Security [+]/Lord of SQLInjection 2020. 5. 2. 20:12
알고리즘 문제는 풀고난 후 코드가 남아서, 깃허브에 올리는 방식으로 기록을 남겼지만, 워게임 문제풀이나, 공부한 지식들은 가시적이지 않아서 족적을 남기기가 어렵다... 하여! 블로그에 공부한 내용이나 풀이과정을 기록하며 족적을 남기기로 하자! 열심히해보자! 어예! 앞으로 풀 문제는 'Lord of SQLInejction'이라는 사이트의 문제들이다. SQLInjection문제들로 구성된 곳인데, 들어가기에 앞서 SQLInjection에 대해 간단히 알아보고 가자. SQLInjection이란 'SQL의 허점을 이용해 의도되지 않은 SQL문을 실행하게 하는 해킹기법'이다. (SQL은 데이터베이스를 다루는 언어다.) 예를들어 ID Password를 입력하는 창에 각각 abc, 1234를 입력한다면 시스템 내부적..