sqlmap 으로 특정 데이터베이스 관리 시스템 타겟팅하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 SQL 인젝션 취약점을 탐지하고 악용하는 과정을 자동화하는 강력한 오픈 소스 침투 테스트 도구인 sqlmap 사용법을 배우게 됩니다. 특히, 특정 백엔드 데이터베이스 관리 시스템 (DBMS) 을 타겟팅하는 핵심 최적화 기법에 집중할 것입니다.

기본적으로 sqlmap은 다양한 데이터베이스 시스템을 테스트하는데, 이는 시간이 오래 걸릴 수 있습니다. 타겟 DBMS(예: MySQL, PostgreSQL 또는 MSSQL) 를 지정하면 스캔 프로세스를 크게 가속화하고 서버로 전송되는 요청 수를 줄이며 테스트를 더욱 효율적으로 만들 수 있습니다.

실습을 위해 취약한 웹 애플리케이션을 미리 구성해 두었습니다. 이 실습의 타겟 URL 은 다음과 같습니다: http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#

시작해 봅시다!

백엔드 DBMS 식별 (예: MySQL, PostgreSQL)

이 단계에서는 기본적인 sqlmap 스캔을 실행하여 백엔드 데이터베이스 시스템을 자동으로 식별하도록 합니다. 이는 침투 테스트에서 일반적인 첫 번째 단계입니다. 여기서 수집된 정보는 후속 단계에서 공격을 최적화하는 데 도움이 될 것입니다.

--batch 플래그를 사용하여 sqlmap이 모든 질문에 기본 답변으로 실행되도록 하여 스캔을 비대화형으로 만듭니다. 또한 취약한 페이지에 액세스하기 위해 세션 쿠키를 제공해야 합니다. 이 실습의 경우 쿠키는 security=low; PHPSESSID=labex입니다.

터미널에서 다음 명령을 실행하십시오:

sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --batch

sqlmap이 테스트 프로세스를 시작합니다. 출력에 주의 깊게 살펴보십시오. 일련의 테스트 후 sqlmap은 웹 서버 운영 체제, 웹 서버 기술 및 가장 중요한 백엔드 DBMS 에 대한 정보를 출력합니다.

다음과 유사한 출력을 볼 수 있습니다 (일부 세부 정보는 다를 수 있습니다):

[INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: PHP 8.1.2, Apache 2.4.52
back-end DBMS: MySQL >= 5.0

보시다시피 sqlmap은 백엔드 데이터베이스를 MySQL로 식별했습니다. 이것이 다음 단계에서 사용할 중요한 정보입니다.

대상 시스템 지정을 위한 --dbms 플래그 사용

이 단계에서는 이 실습의 핵심인 --dbms 플래그에 대해 배우게 됩니다. 이전 단계에서 대상이 MySQL 을 실행 중임을 알았으므로, sqlmap이 PostgreSQL, Oracle 또는 Microsoft SQL Server 와 같은 다른 데이터베이스 시스템에 대한 테스트를 실행하며 시간을 낭비할 필요가 없습니다.

--dbms 플래그를 사용하면 sqlmap에 테스트할 데이터베이스 시스템을 정확히 지정할 수 있습니다. 이를 통해 도구의 효율성이 훨씬 높아집니다.

구문은 간단합니다:
--dbms=DBMS_NAME

여기서 DBMS_NAME을 대상 데이터베이스 이름으로 바꿉니다. 일반적인 값은 다음과 같습니다:

  • MySQL
  • PostgreSQL
  • MSSQL (Microsoft SQL Server)
  • Oracle
  • SQLite
  • Access

이 정보를 제공함으로써 sqlmap에 지정된 DBMS 에 특화된 페이로드와 기법만 사용하도록 지시하는 것입니다. 이는 실제 시나리오에서 sqlmap을 효과적으로 사용하는 데 필수적인 기술입니다. 다음 단계에서는 이 플래그를 새로운 스캔에 적용할 것입니다.

--dbms=MySQL로 스캔 실행

이 단계에서는 sqlmap 스캔을 다시 실행하지만, 이번에는 --dbms=MySQL 플래그를 추가합니다. 이는 1 단계에서 수집한 정보를 바탕으로 sqlmap이 MySQL 관련 테스트에만 집중하도록 지시합니다.

터미널에서 다음 명령을 실행하십시오. 이전과 동일한 명령이며 새로운 플래그가 추가되었습니다.

sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=labex" --dbms=MySQL --batch

스캔이 즉시 시작됩니다. sqlmap의 초기 출력에서 백엔드 DBMS 를 MySQL 로 강제하고 있음을 확인할 수 있습니다.

[INFO] forcing back-end DBMS to 'MySQL'

스캔이 완료될 때까지 기다리십시오. 다음 단계에서는 결과를 분석하고 첫 번째 스캔과 비교할 것입니다.

페이로드 수 감소 및 더 빠른 식별 관찰

이 단계에서는 --dbms 플래그 사용의 직접적인 이점을 관찰하게 됩니다. 주요 이점은 수행되는 테스트 수의 상당한 감소와 훨씬 더 빠른 완료 시간입니다.

3 단계의 스캔 출력과 1 단계의 첫 번째 스캔을 비교하면 주요 차이점을 알 수 있습니다. 첫 번째 스캔은 데이터베이스를 식별하기 위해 시간을 소비했으며, 일반적인 테스트를 실행한 후 이를 좁혔습니다. 그러나 두 번째 스캔은 이 모든 과정을 건너뛰었습니다.

대상 스캔의 출력은 sqlmap이 MySQL 과 관련된 테스트만 실행하고 있음을 보여줍니다. PostgreSQL 또는 Oracle 과 같은 다른 시스템에 대한 테스트는 보이지 않을 것입니다.

예를 들어, 일반 스캔은 여러 데이터베이스에 대한 다양한 유형의 SQL 주입에 대해 수백 개의 페이로드를 테스트할 수 있습니다. 그러나 대상 스캔은 MySQL 에 대해 작동하는 것으로 알려진 페이로드만 실행합니다. 결과적으로 다음과 같은 이점이 있습니다:

  • HTTP 요청 수 감소: 도구가 대상 서버에 보내는 요청 수가 현저히 줄어듭니다.
  • 더 빠른 실행: 전체 스캔 시간이 극적으로 단축됩니다.

이러한 효율성은 시간 제약이 있는 경우가 많고 네트워크 트래픽을 최소화하면 방화벽이나 침입 탐지 시스템 (IDS) 에 의한 탐지를 피하는 데 도움이 될 수 있는 침투 테스트에서 매우 중요합니다.

테스트 케이스 감소를 통해 공격을 최적화하는 방법 이해

이 마지막 단계에서는 DBMS 를 대상으로 하는 것이 최적화를 위한 모범 사례인 이유에 대한 이해를 확고히 하겠습니다.

sqlmap은 포괄적인 도구로 설계되었습니다. 아무런 지침 없이 기본 동작은 대상에 대해 아무것도 모른다고 가정하는 것입니다. 따라서 많은 가능성을 다루기 위해 광범위한 테스트를 실행합니다:

  1. 핑거프린팅 (Fingerprinting): 다양한 쿼리를 보내고 응답을 분석하여 DBMS 유형을 결정하려고 시도합니다. 각 데이터베이스는 고유한 함수, 오류 메시지 및 동작을 가지고 있어 신원을 밝힐 수 있습니다.
  2. 광범위한 테스트: 그런 다음 다양한 SQL 주입 기법 (불리언 기반 블라인드, 시간 기반 블라인드, 오류 기반, UNION 쿼리 등) 을 테스트합니다.
  3. DBMS 별 페이로드: 각 기법에 대해 다른 데이터베이스 시스템에서 작동하는 페이로드를 시도합니다.

이 "무차별 대입" 접근 방식은 철저하지만 백엔드를 이미 알고 있거나 빠르게 추측할 수 있다면 비효율적입니다.

--dbms=MySQL을 사용하면 sqlmap에게 1 단계를 완전히 건너뛰고 3 단계의 페이로드 중 MySQL 과 관련된 페이로드만 사용하도록 지시하는 것입니다. 이렇게 하면 워크플로에서 엄청난 수의 테스트 케이스가 가지치기됩니다.

이러한 최적화는 세 가지 주요 이점을 제공합니다:

  • 속도: 불필요한 테스트를 실행하지 않기 때문에 스캔이 훨씬 빠르게 완료됩니다.
  • 은밀성: 요청 수가 적다는 것은 웹 서버 로그에 "노이즈"가 적다는 것을 의미하며, 활동이 경고를 트리거할 가능성이 낮아집니다.
  • 효율성: 도구의 성능을 가장 가능성 있는 공격 벡터에 집중시켜 성공적이고 빠른 발견 가능성을 높입니다.

--dbms와 같은 플래그를 마스터하면 sqlmap이 단순한 자동 스캐너에서 정밀하고 외과적인 테스트 도구로 변모합니다.

요약

이 실습에서는 sqlmap 스캔을 최적화하는 중요한 기술을 배웠습니다. 백엔드 데이터베이스 관리 시스템 (DBMS) 을 식별한 다음 --dbms 플래그를 사용하여 SQL 주입 테스트의 효율성을 극적으로 향상시킬 수 있음을 직접 확인했습니다.

먼저 일반 스캔을 실행하여 백엔드를 MySQL 로 식별했습니다. 그런 다음 --dbms 플래그에 대해 배우고 이를 사용하여 대상 스캔을 실행했습니다. 두 가지 접근 방식을 비교함으로써 대상 스캔이 관련 없는 많은 테스트 케이스를 제거했기 때문에 훨씬 더 빠르다는 것을 관찰했습니다.

도구에 집중하는 이 원칙은 효과적인 침투 테스트의 기본 개념입니다. 이 실습을 완료하고 핵심 sqlmap 기술을 도구 키트에 추가하신 것을 축하드립니다!