제품 | 기술 정보 | 사용 지침서 | FAQ | 다운로드 | 연락처 | KR

FAQ

+ 설치
+ 사용방법
+ 라이센스와 저작권
+ 버전
+ Plugin

설치

실행시 요구조건은 무엇인가요?

이 프로그램은 .NET Framework 1.1 SP1이나 2.0에서 실행시킬 수 있습니다. 그러니 둘 중 하나는 설치되어 있어야 합니다. 그러나 .NET Framework 1.1 이나 2.0이 설치되어 있더라도 1.1 SP1이 없을 경우 문제가 생기는 경우가 있으니 2.0이 설치되어 있는데 .Net Framework 1.1 Service Pack 1을 설치하라는 문구가 떠도 놀라지 마시기 바랍니다.

그리고 또한 Internet Explorer 5+도 필요할 것입니다.

AxInterop.SHDocVw.dll과 Interop.SHDocVw.dll 이 둘은 어떤 파일인가요 ?

이 프로그램은 .Net Framework에 기본으로 포함되어 있지 않은 컴포넌트인 ActiveX Control을 사용하는데 예전 Microsoft 개발환경에 있었던 것입니다(Visual Basic).

.Net 환경에서 작동하려면 ActiveX는 common runtime language (CRL)와 소통하기 위해 Proxy를 필요로 합니다. 컴포넌트에 대한 레퍼런스가 만들어지면 .Net에 의해 Proxy가 자동으로 생성됩니다. 동시에 .Net은 이 레퍼런스를 프로젝트에 반영하면서 두개의 dll파일을 추가합니다 : 하나는 실제 AcriveX Control용이고 다른 하나는 생성된 Proxy를 위한 것입니다. 그렇기 때문에 이 프로그램 실행시 이 두 파일이 필수적이며 실행시키기 위해서 꼭 있어야 하는 것입니다.

이 AcriveX Control은 프로그램의 브라우징 부분에서 사용된 Microsoft Web Browser Control 입니다. 매우 편리하면서도 프로그램에서 필요로 하는 모든 기능과 이벤트를 가지고 있다고 생각했습니다.

프로그램 루트 디렉토리에 SQLPowerInjector.exe.config파일이 있는 이유는 무엇인가요?

이 파일은 SQL Power Injector가 헤더에 에러가 있는 웹페이지를 로딩하기 위해서 필요로 하는 파일입니다. 한 예로 W3C standard RFC 2616 section 4는 헤더 필드 뒤에 한 줄을 공란으로 두어(CRLF) 해당 필드의 끝을 나타내도록 하고 있습니다. 몇몇 경우 SQL Power Injector 로딩 과정에서 CR이나 LF 가 입력되면 그런 에러가 발생합니다.

이런 종류의 프로토콜 위반을 무시하고 가능한 많은 페이지를 로드할 수 있도록 하기 위해 이 파일에 어떤 값을 삽입해야 했습니다.

이 프로그램은 Microsoft 운영체제에서 실행되게 되어있는데 나는 UNIX, Linux, Macintosh 운영체제를 사용하고 있습니다. 내가 사용하는 운영체제에서 실행할 수 있는 방법이 있습니까?

.Net 프로젝트를 개발하고 실행시킬 수 있는 프로그램 중 많이 알려진 두가지가 있습니다.

여기 프로그램 이름과 웹사이트 주소가 있습니다. :

설치와 관련된 모든 필요한 정보는 각각의 웹 사이트에서 찾을 수 있습니다.

Linux에서 어떻게 실행할 수 있는지에 대한 더 많은 정보를 얻고자 한다면 이 글을 읽어보시기 바랍니다.: http://www.builderau.com.au/program/0,39024614,39130565,00.htm

설치에 어려움이 있습니다. 직통 전화나 연락처가 있습니까?

무상으로 제공되는 프로그램이니 만큼 직통전화는 없습니다. 하지만 sqlpowerinjector.com로 이메일을 보내면 적절한 시간내에 도움을 줄 수 있도록 최대한 노력하겠습니다.

위로

설치파일과 함께 Plugin도 자동으로 설치됩니까?

아니오. 아래 방법 중 하나로 FireFox와 함께 설치해야 합니다.:

Firefox 사용시:

Internet Explorer 사용시 :


위로

사용방법

Load를 누르면 "No FORM tag with the POST option checked"라는 메세지가 뜹니다. 이유가 무엇입니까?

불러온 페이지에 form tag가 없기 때문입니다. 여러가지 이유가 있을 수 있는데 그 중 두가지 원인은 아래와 같습니다 :

  1. 불러온 URL이 하나 이상의 프레임을 포함한 웹사이트에서 복사해서 붙여넣기 한 것일 수 있습니다. 그 프레임이 당신이 불러오고자 하는 parameter를 포함하고 있을 수 있으니 이 경우 그 프레임의 URL을 따로 찾아야 할 것입니다.

    HINT: 웹페이지 중 당신이 원하는 parameter를 포함하고 있을거라 짐작되는 부분에서 가까운 지점에 마우스 오른쪽 버튼을 클릭한 다음 속성(properties)을 클릭하여 URL을 복사해 붙여넣기 하십시오. .

  2. 웹 페이지는 기본적으로 POST method를 사용하여 로드됩니다. GET option으로 불러오고 싶었다면 그냥 그것을 선택하고 다시 시도하십시오.

Normal mode가 무엇인가요?

Normal mode는 SQL inject를 하고자 할 때 기본적으로 가장 먼저 하게되는 것입니다. 말하자면, datagrid로 부터 값을 가지고 와서 그대로 웹 서버로 보내는 것입니다. .

Blind mode는 무엇입니까?

SQL inject되어 리턴된 웹 페이지에 정보를 보여줄 방법이 없을 때 사용되는 방법입니다. 두가지 방법으로 사용할 수 있습니다.

이때, 프로그램은 서버에 요청해 예상되는 응답의 진위여부를 이분법으로 비교하거나 요구된 값을 찾을 때 까지 시간을 지연시킬 것입니다.

HINT:normal mode로 인젝트할 SQL 명령어를 찾아본 후 다른 방법이 없을 때 blind SQL injection mode를 사용하십시오.

Parameter grid에 텍스트 삽입 값이 왜 세 개인가요?

그 세 텍스트 삽입 값이 이 프로그램이 특별한 핵심 이유입니다. .

어떤 mode를 사용하는지에 따라 프로그램이 텍스트 삽입값을 하나만 사용할수도 세개를 다 사용할수도 있습니다. Normal mode를 사용하고 있다면 "Starting string"이라 불리는 첫번 째 값만 필요할 것입니다. 이 경우 모든 입력값은 보내진 그대로이며 어떠한 변경이나 문자열 추가도 이루어지지 않습니다.

반면, blind mode에 있다면 SQL inject를 할 수 있는 parameter중 하나를 선택해야 하고 세가지 문자열을 사용해야 합니다. (Note: 왼편에 있는 checking the parameter에서 선택) 이 경우, 얻고자 하는 정보가 무엇이냐에 따라(단어, 길이, 방문횟수) 선택된 parameter가 시작 문자열(이름을 가지고 오는 곳) 뒤에 몇몇 문자열을 추가할 것입니다. 그리고 변동문자열 이전과 이후 그리고 마지막 문자(이 또한 이름을 가지고 오는 곳임)열 이전에도 문자열을 추가할 것입니다.

예를들어, Oracle DB를 hosting 하는 서버의 IP주소를 가져오기 위해서는:

Options:

SMITH' AND 30 < (SELECT ASCII(SUBSTR(CAST(SYS_CONTEXT('USERENV', 'IPADDRESS') AS VARCHAR(4000)), 1, 1)) FROM DUAL)--

Legend:

           Blue: Starting string
           Red and italic: Automatically added strings
           Purple and bold: Varying string
           Green: Ending string

여기에서 볼 수 있듯이 많은 문자열이 자동으로 추가되었으며 어떤 부분은 이전 예제의 전체 IP 주소값을 얻을 때 까지 계속해서 바뀝니다.

이 부분을 더욱 잘 이해 할 수 있는 또 다른 예입니다 :

공격받은 SQL 서버의 첫번째 database의 이름의 길이를 알고자 한다고 가정하면

Options:

white' AND 30 < (SELECT LEN(name) FROM master..sysdatabases where dbid=1)--

Legend:

           Blue: Starting string
           Red and italic: Automatically added strings
           Purple and bold: Varying string
           Green: Ending string

전체 이름을 알고 싶으면 Type을 Word로 바꾸기만 하면 됩니다. 두번째 database의 이름을 알고 싶으면 dbid의 값을 2로 바꾸고 시작을 클릭하십시오. 보시다시피 syntax를 찾기만 한다면 그 다음엔 그냥 몇몇 값을 바꾸기만 하면 됩니다.

이후에 스스로 SQL 문자열을 만들어내서 특정한 명령어와 함께 삽입할 수도 있을 것입니다. Blind mode라면 반복되는 문자열로 저장될 것입니다.

내가 injection을 목적으로 SQL 문자열을 만들때 syntax가 세가지 주요 부분으로 나뉜다는 것을 발견했습니다. 예제에서 보듯이 몇몇 값들은 바뀔수도 있지만 변동 문자열은 항상 주기적으로 되풀이 됩니다.

변동 문자열이 정확히 뭔가요?

SQL injection이 이루어지면 얻고자 하는 정보입니다. Blind mode에서만 가능합니다.

더 자세한 정보를 원하면"Parameter grid에 텍스트 삽입 값이 왜 세 개인가요?" 를 읽어 보시기 바랍니다.

Weird result messgage가 의미하는 바가 정확히 무엇인가요?

서버에는 몇가지 종류의 오류가 발생할 수 있습니다. 그 중 몇가지 경우의 목록입니다.

Check box error는 무엇을 위한 것인가요?

웹페이지에서 SQL injection 취약점을 찾으려 하는데 조금이라도 성공할 가능성이 있는지 페이지 응답을 들여다 볼 때 유용합니다. 에러가 있을만한 지점을 가능한 모두 찾아 내려고 웹페이지 소스에서 “error”라는 단어가 있는지 검색하는 옵션을 추가하기로 했습니다.

소스 코드의 나머지 부분 없이 에러에 대한 구체적인 정보를 얻고자 하는 이에게 유용할 수 있습니다. 유일한 목적은 명확성을 좀 더하고 한번에 진짜 에러 메세지를 찾아내는 것입니다. 그러나 error라는 단어 뒤에 따라오는 문자열의 길이는 "HTML Message Length"에 입력된 값의 크기에 따라 달라질 수 있습니다. 정보가 부족하다고 판단되면 값을 좀 더 크게 조정한 뒤 start again을 눌러 만족할 만한 결과를 얻을 때 까지 반복할 수 있습니다. .

왜 자동화 하지 않았을까요? 이유는 간단합니다. 때로 실제 SQL injection error가 아님에도 Error라는 단어가 소스코드 안에 있을 수 있기 때문입니다. 에러를 포함한 변수를 다루는 JavaScript 코드가 한 예입니다.

덧붙이자면 이 프로그램은 일반적으로 ODBC 에러만을 감지하고 보여줄 것입니다. 그것이 바로 우리가 찾는 것이기 때문입니다. 지금은 하드코딩 되어있지만 이후 버전에서는 파일로 만들어 수정도 가능하고 그때는 고려치 않았던 database 에러들도 추가할 수 있도록 하려고 합니다.

"Replace space by /**/"은 무엇을 위한 것인가요?

가끔 어떤 웹사이트는 IDS나 어떤 문자열 필터링 메커니즘을 갖고 있어서 TSQL이나 PL/SQL에서 흔히 쓰이는 모든 syntax 단어들을 잡아내려 합니다. 이를 피해가는 한가지 방법은 단순히 공란을 /**/로 대체해 주는 것입니다. 이 옵션은 그 일을 자동으로 해 주는 것입니다.

SQL injection에서 긍정적인 결과를 얻지 못했다면 한번 시도해 보길 권합니다. 운이 좋으면 성공할 수도 있으니까요.

시간지연을 inject할 수 있다는 걸 알고 있지만 'WAITFOR DELAY '0:0:5'를 입력하면 내가 입력한 값보다 2배/3배/4배 더 늦게 결과를 받습니다. 뭐가 잘못된 건가요?

그건 좋은 신호입니다. WAITFOR delay가 가능하다는 것을 알게 된 것이니까요. 그러나 서버쪽에서 보면 동적으로 설계된 쿼리에서 당신이 삽입한 매개변수가 많이 사용되었다는 뜻입니다. .

그러니 쿼리가 그 parameter를 3번 사용하는데 당신이 4초 시간지연을 하면 대략 13초 후에 응답을 받게 됩니다. (1초는 웹페이지의 서버쪽 코드의 실제 실행시간입니다.) 좋은 소식은 당신은 손해볼 일이 없다는 것입니다. 시간지연의 초 매개변수를 4초에서 12초로 바꾸십시오. 짜잔!

SQL injection 결과 페이지가 실제 SQL injection에러를 얻지 않은 곳에서 멈춰있습니다. 왜 그런건가요?

"Trap Error String"을 체크해 두었을 때 실제 에러가 아닌 경우에도 응답 소스 코드에 “error”라는 단어가 발견됩니다. 예를들어 변수가 error라는 단어를 포함하고 있는 javascript function에서도 그런 결과가 나올 수 있습니다.

좀 더 자세한 설명은 "Check box error는 무엇을 위한 것인가요?" 를 참고하십시오.

SQL injection 결과 페이지가 멈춰버렸고 나머지 메세지를 읽을 수 없습니다. 어떻게 된 건가요?

다음 세가지 중 한가지가 원인일 수 있습니다 :

왜 결과 화면에 그림이 하나도 없나요?

이 프로그램의 목적은 웹페이지에서 SQL injection을 찾아서 이용하는 걸 돕는 것입니다. 그래서 Microsoft Web Browser Control AcriveX를 사용해 꼭 필요한 것만 보여줌으로써 이미지 때문에 시선이 분산되는 것을 피하고자 했습니다. 실제 브라우저를 만들려는 의도는 전혀 없었습니다.

하지만 SQL injection 성공을 위한 힌트를 줄때 드문 경우지만 이미지로 보여줘야 할 때가 있다는 것은 잘 알고 있습니다. (에러나 예를들때 이미지에 느낌표를 넣는 것). 많은 이들의 요청이 있으면 이후 버전에서는 이 기능을 추가할수도 있습니다. 어떤 경우라도 이미지 이름이 에러 단어를 포함하고 있어서 "Trap Error String" 옵션에 의해 에러로 인식될 수 있습니다.

Grid 결과에서 한 줄을 선택했더니 입력했던 값이 없어졌습니다. 왜 인가요?

웹서버가 잘 해석할 수 있도록 공란은 모두 +로 대체될 것입니다. 결과적으로 Data grid는 하나의 긴 단어로 여길 것입니다. 만일 이 단어가 해당 줄에서 보여줄 수 있는 너비를 넘어서면 선택했을 때 처음 몇 단어만 보여줍니다. (예시 "Is True - ")

그냥 읽고 싶은 줄을 클릭해 오른쪽 화살표 키로 끝까지 이동하며 읽으면 됩니다.

프로그램이 자동으로 SQL code를 추가하는 것은 좋은데 보내기 전 SQL injection 문자열이 정확히 어떤지 볼 방법은 없나요?

보내고자 하는 parameter가 있는 줄위에 마우스를 갖다 대면 일, 이초 후에 SQL injection 문자열이 Tooltip으로 표시될 것입니다.

만일 지금 막 parameter 문자열을 변경해서 포커스가 아직 textbox에 있다면 변경된 것이 보이지 않습니다. 다른곳을 한번 클릭한 다음 몇 초 후 다시 마우스를 갖다 대면 변경된 것이 보일 것입니다.

사용에 문제가 있는데 도움을 받을 수 있는 직통전화나 연락처가 있나요?

무료로 제공되는 만큼 직통전화는 없지만 누구든 문제가 있으신 분은 sqlpowerinjector.com 의 기술지원으로 이메일을 보내면 적당한 시간 내에 도움을 줄 수 있도록 노력 하겠습니다.

SQL injection이 가능한 것은 알지만 웹 어플리케이션에 로그인 되어 있어야만 됩니다. 어떻게 해야 하나요?

이만큼 진행했다면 아마도 유효한 로그인 아이디와 비밀번호를 갖고 있을 거라 생각됩니다. 그렇다면 아래 두가지 방법이 있습니다.

가장 쉬운 방법:

  1. Firefox에 SQL Power Injector를 설치하지 않았다면 설치하십시오.
  2. 어플리케이션에 로그인하고 취약한 페이지로 가십시오.
  3. SQL Power Injector를 모든 세션 컨텍스트와 함께 불러오기 위해 Plugin을 사용하십시오.
  4. 짜잔! 이제 테스트 할 준비가 되었습니다.

가장 어렵고 오래된 방법:

  1. SQL inject가 가능한 그 페이지의 URL을 복사해서 URL parameter textbox에 붙여넣고 Load를 클릭하십시오.
  2. 세션이 없거나 이나 액세스가 거부되었기 때문에 이 시점에서 웹 사이트에 따라 에러 메시지가 뜰 것입니다. 걱정하지 마십시오. .
  3. 이제 일반 브라우저를 이용해 그 웹사이트로 가서 로그인 하십시오. 보통은 쿠키나 삽입된 URL에 있는 세션토큰으로 웹사이트가 세션을 만들어 낼 것입니다.
  4. a) URL안에 있다면 꽤 쉽습니다. 그냥 SQL inject 가능한 페이지로 가서 URL을 유효한 세션과 함께 복사해서 URL parameter textbox에 붙여넣고 Load를 클릭하면 될 것입니다.
    b)만일 쿠키에 있다면 브라우저 속성(Mozilla, Netscape와 비슷한 종류)나 Paros(http://www.parosproxy.org/index.shtml) 혹은 webscarab (http://www.owasp.org/software/webscarab.html) 같은 proxy 어플리케이션으로 얻을 수 있을 것입니다. 개인적으로 Proxy 어플리케이션을 사용하길 권하는데 browser를 사용하면 쿠키 정보를 원하는 형식으로 얻기 어렵기 때문입니다. 말하자면: MySessionID=AGDAFHAD3142324. 
    찾았으면 그냥 복사하십시오.
  5. SQL Power Injector로 돌아가서 (1단계를 거쳤다면 프로그램이 실행되고 있을 것입니다. 만일 건너뛰었다면 더 진행하기 전에 1단계를 실행하시기 바랍니다.) 메뉴에서 Insert를 선택하고 Cookie를 클릭하십시오.
  6. 입력창이 뜰 것입니다. 쿠키 값을 붙여넣고 ok를 클릭하십시오. JSP 세션의 쿠키는 이런 형태일 것입니다:
    JSESSIONID=D23TfhU3fdf7884HDSA45hfdGs
  7. 이제 Start를 다시 클릭하십시오. 그러면 로그인된 것과 같은 페이지가 보일 것입니다. 그건 SQL inject를 실행할 준비가 되었다는 뜻입니다. .

SQL positive injection결과란 정확이 무슨 뜻입니까?

"Trap Error String"이라는 에러 옵션처럼 프로그램이 textbox에 삽입된 단어의 존재를 리턴된 웹페이지 소스에서 검색하도록 하는 것입니다. 문자열에서 "HTML Message Length"에 설정된 길이만큼의 텍스트를 보여줄 것입니다. .

SQL injection문제가 있다는 것을 보여주는 키워드가 가 무엇인지 알아내었거나 리턴된 웹페이지 소스에서 유용할 것이고 어떤 정보를 빨리 찾으려 할 때 유용할 것입니다.

(좀 더 자세한 설명은 "Check box error는 무엇을 위한 것인가요?" 을 참고하십시오.)

쿠키를 삽입하는 이유는 무엇입니까?

여러가지 이유가 있습니다:

삽입할 만한 적당한 쿠키 정보는 어디서 찾나요?

Mozilla 기반 browser를 사용하고 있다면 browser preference에서 찾을 수 있고 Paros (http://www.parosproxy.org/index.shtml)나 webscarab (http://www.owasp.org/software/webscarab.html) 과 같은 proxy에서도 찾을 수 있습니다..

개인적으로 Proxy 어플리케이션을 사용하길 권하는데 browser를 사용하면 쿠키 정보를 원하는 형식으로 얻기 어렵기 때문입니다. 말하자면:

MySessionID=AGDAFHAD3142324

한 열(column)의 최대값과 최소값을 어떻게 얻나요?

가변길이 문자열에 SQL 명령어 MAX나 MIN을 사용할 때는 값을 괄호안에 넣어주어야 합니다.

예:

          MAX(OBJ#) for maximum of an Oracle object ID,
          MIN(OBJ#) for minimum of an Oracle object ID

          Oracle 데이터베이스의 모든 테이블 값을 얻고자 할 때 유용합니다.

Normal 에서 Blind mode로 바꾸면 왜 다른 화면이 나옵니까?

왜냐하면 normal mode에서만 사용가능한 옵션들이 있고 blind mode에서만 사용가능한 옵션들이 있기 때문입니다. 현재 mode에서 필요한 것들만 보여주는 것이 더 좋을 것이라 생각합니다.

스레드의 수가 왜 50에서 멈추나요?

50에서 멈추기로 한 것에 특별한 이유는 없습니다. 10에서 멈출수도 있고 100에서 멈출수도 있겠지요. 그러나 특정 지점을 넘어 가면 포화상태가 되어 버리거나CPU 성능이 충분치 않을 것입니다. 이 웹사이트에 개시된 통계치에서 최대값이 높다고 가장 좋은것은 아니라는 것을 보여줍니다.

하지만 더 많이 해 보고 싶다고 생각하면 코드를 수정해 수치를 원하는 만큼 올려보십시오. 상수이므로 수정하기가 어렵지는 않습니다.

그러나 경험상 수치가 8 이상이 되면 에러가 많아지고(sun characters) 현저히 속도가 느려집니다.

시작 길이와 카운트 수를 변경할 수 있는 이유가 무엇인가요?

최적화의 문제일 뿐입니다. Blind injection에서 현재 캐릭터가 무엇인지 알아내는 방법은 이분법에 의해서 결정됩니다. Merriam Webster에 의하면 이분법은 분할 또는 두 개의, 특히 상호 배타적 또는 모순되는 그룹 또는 독립체를 분할하는 과정입니다.

L시작 길이가 1000000이고 당신이 가진 데이터의 길이는 6이라고 하면, 프로그램은 실제 숫자에 근접하기 전에 이 값들을 서버측에 전달해야 합니다. :

1000000,
500000,
250000,
125000,
62500,
31250,
15625,
7812,
3906,
1953,
976,
488,
244,
122,
61,
30,
15,
7,
3,
5,
6

21 서버 호출...하지만 30처럼 좀 더 적합한 수치를 택한다면:

30,
15,
7,
3,
5,
6

6 서버 호출, 훨씬 빠릅니다.

이제 이런 식으로 시작 길이와 카운트를 최적화 할 수 있을 것입니다.

감지된 Submit URL 에 명시된 Method type과 색상은 무엇입니까?

웹페이지에 포함된 필드를 불러오기 위해 SQL Power Injector는 당신이 그것들을 어디서 가지고 오기를 원하는지 알아야 합니다. 다시 말하면 URL 문자열에서 가져오길 원하는지 form안에서 가져오길 원하는지 알아야 한다는 뜻입니다. 그 시점에는 어떤 method으로 페이지를 요청해야 하는지 알 방법이 없습니다. Start 버튼을 클릭해 말도 안되는 페이지를 얻게되거나 어떤 눈에 보이는 결과도 얻지 못하게 될 것입니다.

탐지된 method의 특정한 형식에 따라 이 옵션을 GET이나 POST로 바꿀 수 있고 그렇게 함으로써 웹 어플리케이션에 원하는 결과를 얻을 수 있습니다. 그러나 예상치 못한 method를 사용할 때 어플리케이션이 어떻게 반응하는지 보는 것은 언제나 재미있지요. 여러가지 색상은 그저 조금의 인체공학적인 개선으로 가독성을 높이고자 한 것입니다.

전에 저장해 두었던 세션 하나를 불러왔는데 이제 작동하지 않습니다. 무엇이 잘못된 건가요?

다음의 세가지가 원인이 될 수 있습니다.

먼저 세션을 저장할 당시에는 현재와는 다른 필드나 값이 있었는데 지금은 바뀌어서 웹어플리케이션이 다르게 작동하도록 하는 것 일 수 있습니다. 여전히 같은지 확인해 보기 위해 페이지를 다시 불러와서 비교해 보시기 바랍니다.

두번째 가능성은 당신이나 다른 사람이 session XML file을 수정해서 더이상 웹페이지에 부합되지 않는 것일 수 있습니다.

마지막으로 웹페이지가 인증 쿠키를 요구하는데 더이상 유효하지 않는 것 일 수 있습니다. 쿠키를 다시 찾아내 다음 질문에 설명된 대로 다시 입력하면 됩니다. "SQL injection이 가능한 것은 알지만 웹 어플리케이션에 로그인 되어 있어야만 됩니다. 어떻게 해야 하나요?"

왜 새로운 문자열 parameter를 추가하면 새로운 cookie parameter가 생기고 새로운 cookie parameter를 추가하면 새로운 문자열 parameter이 생기나요?

Add 버튼을 눌렀을 때 잘못된 형태의 매개변수가 선택되었기 때문일 것입니다. 아니면 add 버튼을 클릭하기 전에 잘못된 형태의 매개변수를 선택했을 것입니다.

적절한 형태의 매개변수를 선택했는지를 볼 수 있는 방법은 두가지가 있습니다:

TOP은 왜 SQL Server에서만 사용 가능하고 다른 DBMS에서는 안되나요?

SQL Server만이 그 기능을 안정적으로 지원하기 때문입니다(Sybase/AES 는 이상하게 작동해서 제거해 버렸습니다). 분명 이들도 다른 DBMS와 동등하지만 지금 이 시점에 들일 수 있는 것 보다 더 많은 노력을 필요로 했습니다. 아마도 이후에 나오는 버전에서는 가능할 지도...

페이지 소스를 볼 때 색깔이 나타나지 않거나 가끔 나타납니다. 왜 그런가요?

결국에는 나타나게 될 겁니다. 프로그램이 HTML tag들과 페이지 소스 안의 텍스트를 처리하고 있는 중이라 그런 것입니다. 더 크고 복잡할 수록 더 오래 걸립니다. 이후의 버전에서는 어떻게든 최적화를 할 수도 있습니다.

왜 목록에 두가지 MySQL 데이터베이스가 있나요?

4.1.1 버전 이전의 MySQL에서는 blind SQL injection을 위해 다른 SQL syntax를 썼기 때문입니다. 확실히 MySQL 4.1.0과 그 아래 버전은 CAST 와 SUBSTR을 지원하지 않고 SUBSTRING만 지원하는데 SUBSTRING은 4.1.1에도 있습니다. 또한 4.1.1버전까지는 CAST를 CHAR과 함께 사용하는 것이 가능하지 않습니다. 그래서 두 가지 SQL 데이터베이스가 목록에 추가된 것입니다.

Character preset기능은 왜 사용하나요?

시간을 엄청 절약할 수 있고 웹서버에 대한 요청수를 현저히 줄일 수 있습니다. 물론 효과적으로 사용한다면 말이지요.

이분법 기술로 ASCII로 된 문자 표현을 찾기 위해서는 ASCII table에 있는 모든 256개의 문자를 다 찾아봐야 합니다. 그러므로 문자마다 8개의 요청을 웹 서버로 보내야 합니다. 그러면 let’s는 100개의 문자를 포함하고 있는 문장이 있다고 하는데 그것은 800회의 요청을 보낼 것입니다. 평균 보내고 응답받는 시간을 0.5초라고 하면 400초가 걸리는데 즉, 6분 40초가 걸린다는 이야기가 됩니다. 꽤 길지요?

그래서 어떻게 최적화 하면 될까? 하고 자문해 보았습니다. 대부분의 경우 내가 얻고자 했던 문자열은 그것이 포함된 문자 형태에 관해서는 예측이 가능했습니다. 다시 말하면 어떤 경우에는 문자열이 알파벳과 공란으로만 이루어져 있다는 것이 미리 알 수 있었다는 것입니다. 그래서 실제로 53개 문자만 찾으면 되는데 왜 모든 문자(256)를 다 사용해야 하나 하는 생각이 들었습니다. 더 나아가 SQL 측을 대문자로만 만들 수 있다면 52개 알파벳 세트를 사용할 필요도 없었습니다 (26개 대문자와 26개 소문자). 이제 27개 문자만 찾아보면 됩니다. 정말로 더 최적화를 하고 싶다면 Z나 다른 거의 사용되지 않는 문자를 제거할 수도 있습니다.

그렇게 되면 어떤 경우엔 문자당 요청수를 3개나 4개로 줄일 수 있게 됩니다. 3개로 줄였다고 가정해 보고 100개 문자로 이루어진 단어를 사용한다면 0.5초 응답시간에 요청 수는 500개가 됩니다. 모두 250초이니 4분 10초가 걸립니다. 2분 30초를 줄이는데 성공했네요! 이제 50개를 얻어야 한다면 얼마다 줄일 수 있을지요...

Note: UPPER CASE로 최적화 하고자 한다면 Case Insensitive Checkbox를 클릭하고 대문자로만 이루어진 선택된 문자 프리셋에서 선택하셔야 합니다.

Sybase와 it’s로 session을 저장했는데 불러오니 MySQL 4.1.1을 보여주네요. 왜인가요?

MySQL 데이터베이스 형식을 두가지로 나누어 놓았기에 MySQL 4.1.0이후 인덱스와 그 이전 것이 데이터베이스 타입 drop down list에 추가되었습니다. 그래서 MySQL다음에는 Sybase/AES가 있으므로 그 DBMS만이 영향을 받았습니다. 그것의 인덱스는 4였는데 이제는 5입니다. MySQL 4.1.1과 그 상위 버전이 4이기 때문입니다. 더불어, Sybase/AES으로 session을 불러오면 MySQL 4.1.1이나 그 이상으로 보여질 것입니다.

정말 유감으로 생각하고 피해가 많지 않았기를 바랍니다. 좋은 소식은 Sybase는 다른 DBMS보다 널리 사용되지 않기 때문에 리스크가 조금이라도 덜어진 부분이 있다는 것입니다. .

문제해결을 위해서는 각 세션을 Sybase를 사용한 곳에 불러온 다음 drop down list에서 변경하고 이전 파일에 덮어씌워 다시 저장하십시오. .

왜 결과 문자열 안에 sun 문자 ¤가 있나요?

프로그램이 그 문자를 해결하지 못했기 때문입니다. 그래서 계속해서 그 문자에 머무르는 대신 새로운 방법으로 그 문자를sun 문자로 바꾸어 주는 것입니다.

그러니 질문을 바꿔서 해 보면 왜 프로그램이 특정 문자를 해결하지 못하나요? 가 될 것입니다. 원인은 여러가지가 있을 수 있습니다.

몇가지 경우 :

위로

라이센스와 저작권

사용에 제한이 있나요?

이 제품에 대해 Clarified Artistic license를 존중하는 한 사용에 제한은 없습니다. .

전문적인 보안 평가에 무료로 사용가능 한가요?

물론입니다. 그렇게 하도록 권하는 바입니다.

판매용으로 만드는 보안 프로그램에 코드를 재 사용해도 되나요?

이 문제와 관련해서 Clarified Artistic license가 다시 거론이 됩니다. 라이센스내에 이 문제와 관련해 중요한 두 부분이 아래에 나와 있습니다.

  1. 당신이 만약 어떠한 형태로든 이 패키지를 다른 형태로 수정하려 한다면, 변경된 파일들에 대해서 각각 파일의 시작부에 언제 어떻게 변경했는지를 명확히 기록해야 합니다. 그리고 추가로 아래중 적어도 한가지를 해야 합니다:
    1. 당신이 수정한것들을 퍼브릭(public) 도메인을 통해서나 다른방법을 이용해서 수정된것들이 자유롭게 사용될 수 있도록 하십시오. 예를들면 유즈넷같은곳이나 그에 맞먹는 중형 혹은 대형 아카이브 사이트(archive site)들에 올리거나, 저작권자에게 알려 패키지의 표준 버전에 당신이 수정한것을 저작권자의 결정에 따라 포함될 수 있도록 하십시오.
    2. 수정된 패키지를 당신의 회사나 단체에서만 사용하십시오 .
    3. 모든 비표준 실행물들의 이름을 변경해서 표준의 실행물들의 이름과 겹치지 않도록 해서 공개하십시오. 또한 분리된 설명서 페이지에 비표준 실행물들에 대해 표준의 실행물들과 어떠한 것이 다른가에 대해서 기록해서 제공해야 합니다.
    4. 저작권자와 별도로 배포에 대한 합의를 하십시오.
    5. 누구든 수정된 패키지 권한의 사본을 받는 이는 어떤 특정 방식으로든 당신의 수정본을 자유롭게 사용할 수 있도록 허용하고 권장하십시오.
  2. 당신이 이 패키지의 프로그램을 목적코드나 실행물의 형태로 배포하려면 적어도 다음의 한가지를 해야 합니다:
    1. 표준버전의 실행물들과 라이브러리 파일을 표준버전에서 얻은 안내서 (설명서안에 있는 부분이거나 그와 동등한) 와 함께 배포하십시오.
    2. 당신에의해 변경된 패키지의 소스를 컴퓨터가 읽을 수 있는 형태로 배포하십시오.
    3. 표준버전의 실행물에 해당하는 모든 비표준 실행물을 비표준 이름으로 포함시키십시오. 또한 설명서(혹은 그에 상응하는)에 표준버전에서의 설명과 함께 그 차이를 명확히 기록하십시오.
    4. 저작권자와 별도로 배포에 대한 합의를 하십시오.
    5. 컴퓨터가 읽을 수 있는 형태의 패키지의 소스를 당신의 수정본과 함께 우편 주문으로 제공하십시오.
위로

버전

앞으로 새로운 버전이 더 나올 예정인가요?

가능성이 거의 없습니다. 동일 분야에서 일하고 있기 때문에 이익이 상충하는 것을 방지하기 위해 이 버전을 완료하면 다른 주요 버전을 만드는 것을 그만두기로 고용주와 합의를 했습니다. 어쨌든 사랑하는 아내, 미래의 가족, 태권도와 바이올린과 같은 소중한 다른 것들에 들여야 하는 시간을 많이 소비해야 했기에 그렇게 많이 신경이 쓰이지는 않습니다.

다른 사람이 프로젝트를 도와 시작하지 않는 이상 현재로서는 더이상 많은 변화가 있을것 같지는 않습니다. 그러나 버그가 발견되면 수정할 것이고, 이메일에도 응답하고 아마도 약간의 기능 추가도 있을지 모르겠습니다.

프로그램은 계속 무료인가요?

주요 기능은 계속해서 무료일 것이라고 약속드립니다. 언젠가 기능이라던지, 필요로 하는 어떤 강력하고 전문적인 지원 등 회사에서 요구하는 기능을 추가해서 판매할 수도 있을 것입니다. .

그런 것들은 더 많은 시간과 전문적인 후속 조치를 필요로 하므로 혼자서는 해 나갈 수 없습니다. 그래서 도와줄 인력을 고용할 지도 모르겠습니다. 다시 말하지만 전적으로 프로그램의 인기도에 달려 있습니다.

하지만 걱정하지 마십시오. 모든 강력한 기능들은 무료로 남아있을 것입니다. 그리고 누구든 프로그램에 관해 질문이 있거나 도움을 요청한다면 할 수 있는 한 도울 것입니다. 그저 혼자서 진행하는 프로젝트이니 인내심을 좀 가져주시기만 하면 됩니다.

이후에 가능하게 될 기능에 대한 목록이 있나요?

공식적으로는 없습니다. 하지만 만일 FAQ 전체를 읽어봤다면 가끔 몇가지 아이디어가 드러나 있는 것을 볼 수 있었을 것입니다.

프로그램을 향상시킬 멋진 아이디어가 있는데 어떻게 도울 수 있습니까?

이런 소식을 들으면 정말 기쁠 것입니다! 가장 어려운 부분은 만들어졌고 길도 찾아지고 있으니 이제 그 길을 더욱 안전하고 단단하고 더 좋게 만들 시간이지요.

오픈소스일 경우 코드로 제공하는 것도 괜찮으나 프로젝트/품질관리 매니저로서 나머지 부분과의 일관성을 위해 제가 코드의 몇몇 부분을 수정할 수도 있음을 인지하고 있어야 합니다. 일반적인 알고리즘은 유지될 것이고 아마도 필요할 경우 들여쓰기나 변수 이름 수정, 몇몇 코멘트를 추가하는 정도가 될 테니 걱정하지 마십시오. 이건 나의 좀 고지식한 면이기도 한데 이 업계에서는 중요한 측면이라고 생각하고 있습니다.

당신이 가지고 있는 아이디어를 나누려면 sqlpowerinjector.com 에 있는 improvement를 통해 저와 연락할 수 있습니다.

프로그램에서 버그를 발견했습니다. 어디에 알려야 하나요?

sqlpowerinjector.com에 있는 bugs를 통해 저에게 알릴 수 있습니다. 알려주시면 많은 도움이 될 것입니다. 자신이 만든 것에 대해 나쁜 점을 지적받거나 버그가 발견되는 것이 기분좋은 일은 아닐지라도 개인적으로 나에게는 더욱 나아질 수 있는 좋은 기회일 뿐이라고 생각합니다. 버그에 대해 최대한 자세한 정보를 주시기 바랍니다. 그리고 가능하다면 screen shot도 보내주십시오(해당 사항이 있는 경우).

위로

Plugin

이 Plugin의 주요 목적은 무엇인가요?

간단히 말하자면, 인생을 좀 더 편하게 만들기 위해서.

플러그인이 자동으로 현재 웹 페이지의 모든 관련 매개 변수를 얻어내고 SQL Power Injector를 시작해 그것들을 불러옵니다. 하지만 더 중요한 것은 현재 세션에 연결된 모든 쿠키를 불러옵니다. 모든 세션 쿠키를 말입니다.

이전 버전의 SQL Power Injector에는 거슬리는 점이 두 가지 있었습니다.

첫 번째는 SQL Injection이 포함되어 있다고 의심하는 각 페이지를 체계적으로 불러와 테스트 하는 것인데 실제로는 웹사이트를 탐색하는 동안 브라우저 내에서 빨리 테스트 하는 것이 훨씬 쉽다는 것이었습니다. SQL injector의 진정한 힘은 SQL injection하기 어려운 것을 찾아내도록 도와주는 것입니다. 매개변수에 따옴표만 추가하면 되는 그런게 아니라 말이지요. 그러나 어떤 페이지에 SQL injection이 있다고 의심하고 있지만 쉽게 찾을 수 없을 때에는 바로 Plugin을 사용하면 짜잔! 됩니다. 진짜 테스트가 시작됩니다. 이 방식으로 더 빠르게 말이지요.

두번째로 그리고 지금까지 가장 거슬리는 점은, 예들들어 로그인 후 세션을 유지하기 위해 쿠키를 사용해야 하는 경우, 그것들의 값을 얻은 다음 수동으로 프로그램에 추가해 넣어야 한다는 점입니다. 하지만 원할때 마다, 로그인 전이나 후에나, Plugin만 사용하면 쿠키와 연관된 모든 세션 컨텍스트가 당신에게 전달될 것입니다.

Firefox용 Plugin만 있고 Internet Explorer용은 없는 이유가 있나요?

두가지 이유가 있습니다.

첫 번째는 Firefox로 만들기가 훨씬 쉽고 빨랐기 때문입니다.

두 번째는 시간이 부족해서 입니다.

게다가, 어쨋든 대부분의 SQL Power Injector 사용자가 Firefox를 사용하는 것을 알고 있었습니다. 마이크로소프트 기술로 프로그램을 만들었으니 다른 뭔가를 사용하는 것이 공평하겠다고 생각했습니다.

Plugin을 사용할 때 POST으로만 값을 얻고 GET으로는 안되거나 반대로 GET으로는 되는데 POST로는 안되는 건 왜 그런가요?

Plugin의 옵션을 변경할 필요가 있습니다.

현실적이지 않은것은 알고 있으나 Plugin의 다음 버전에서는 향상시킬 것입니다. 또 다시 시간의 부족이 발목을 잡네요.

어디에서 default load method를 변경합니까?

Tool 메뉴로 가서 Add-on으로 가십시오. 거기서 SQL Power Injector Plugin를 찾아 Option을 클릭하십시오. 거기에서 기본 동작을 변경할 수 있습니다.

위로

Copyright © 2006-2014 Francois Larouche