sqlmap 을 이용한 대상 서버 데이터베이스 열거

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 sqlmap을 사용하여 대상 서버의 데이터베이스를 열거하는 방법을 배웁니다. 데이터베이스 열거는 침투 테스트 프로세스에서 중요한 단계로, SQL 주입에 취약할 수 있는 서버에 존재하는 데이터베이스 이름을 발견할 수 있게 해줍니다. sqlmap은 이 프로세스를 자동화하여 효율적이고 간단하게 만듭니다. 이전 스캔 (시뮬레이션) 에서 성공적인 주입을 보장하는 것부터 시작하여, --dbs 플래그를 사용하여 모든 데이터베이스를 나열하고, 명령을 실행하고, 결과를 해석한 다음, 시스템 데이터베이스와 사용자 데이터베이스를 구분하는 방법을 알아보겠습니다.

이전 스캔에서 성공적인 주입 확인

이 단계에서는 이전 스캔에서 성공적인 SQL 주입을 확인하는 것을 시뮬레이션합니다. 데이터베이스를 열거하기 전에 대상 URL 이 실제로 SQL 주입에 취약하고 sqlmap이 성공적으로 이를 악용할 수 있는지 확인하는 것이 중요합니다. 이 랩에서는 이전 스캔에서 취약한 URL 을 식별했다고 가정합니다. sqlmap 명령 구조를 시연하기 위해 플레이스홀더 URL 을 사용하겠습니다.

~/project 디렉토리에서 터미널을 엽니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --banner

이 명령은 sqlmap을 사용하여 지정된 URL 에 연결하고 데이터베이스 배너를 검색하려고 시도합니다. 배너 검색에 성공하면 성공적인 주입을 나타냅니다.

예시 출력:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (출력 생략) ...

    web server operating system: Linux Debian
    web application technology: Apache 2.2.14, PHP 5.3.2
    back-end DBMS: MySQL >= 5.0.12
    banner: '5.1.73-0ubuntu0.10.04.1'

출력의 banner 줄은 sqlmap이 데이터베이스와 성공적으로 상호 작용하고 버전 정보를 검색할 수 있었음을 확인하며, 이는 성공적인 주입을 나타냅니다.

--dbs 플래그를 사용하여 모든 데이터베이스 나열하기

이 단계에서는 sqlmap--dbs 플래그에 대해 배웁니다. 이 플래그는 대상 서버에서 사용 가능한 모든 데이터베이스를 열거하고 나열하는 데 특별히 사용됩니다. 이 플래그는 민감한 정보를 포함할 수 있는 데이터베이스 이름을 발견하는 데 필수적입니다.

--dbs 플래그는 sqlmap에게 데이터베이스 열거를 수행하도록 지시합니다. sqlmap이 SQL 주입 취약점을 성공적으로 악용하면, 데이터베이스 서버가 호스팅하는 모든 데이터베이스 목록을 쿼리할 수 있습니다.

명령 구조는 이전 단계와 유사하지만 --dbs가 추가됩니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

이 명령은 sqlmap에게 주어진 URL 의 SQL 주입 취약점을 통해 접근 가능한 모든 데이터베이스를 식별하고 나열하도록 지시합니다.

데이터베이스 열거 명령 실행

이 단계에서는 --dbs 플래그를 사용하여 데이터베이스를 열거하는 sqlmap 명령을 실행합니다. 이것이 이 랩의 핵심 작업입니다.

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

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

sqlmap은 이제 테스트를 수행하고 성공하면 데이터베이스 이름 목록을 출력합니다. sqlmap이 다양한 주입 기법을 수행하므로 이 프로세스에는 시간이 다소 걸릴 수 있습니다.

예시 출력:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
    [!] do you want to enable full support for HTTP(S) proxy? [y/N] N
    [!] do you want to resume the previous session? [Y/n/q] n

    ... (출력 생략) ...

    available databases [4]:
    [*] information_schema
    [*] mysql
    [*] performance_schema
    [*] acuart

출력에는 sqlmap의 진행 상황과 최종적으로 "사용 가능한 데이터베이스" 목록이 표시됩니다. 이 예에서는 information_schema, mysql, performance_schema, acuart가 나열됩니다.

반환된 데이터베이스 이름 목록 해석하기

이 단계에서는 sqlmap이 반환한 데이터베이스 이름 목록을 해석합니다. 이러한 이름이 무엇을 나타내는지 이해하는 것은 추가적인 침투 테스트 단계를 위해 매우 중요합니다.

이전 단계의 출력에서 다음과 유사한 목록을 보셨을 수 있습니다.

available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart

[*] 항목은 대상 서버에서 발견된 데이터베이스를 나타냅니다.

  • information_schema: 이것은 MySQL(및 기타 SQL 데이터베이스) 의 표준 데이터베이스로, 데이터베이스 메타데이터에 대한 액세스를 제공합니다. 다른 모든 데이터베이스, 테이블, 열 및 액세스 권한에 대한 정보를 포함합니다. 시스템 데이터베이스입니다.
  • mysql: 이것은 MySQL 서버가 작동하는 데 필요한 정보를 저장하는 MySQL 의 또 다른 표준 시스템 데이터베이스입니다. 사용자 계정, 권한 및 기타 서버 구성 데이터를 포함합니다.
  • performance_schema: 이것은 MySQL 에서 낮은 수준에서 MySQL 서버 실행을 모니터링하는 데 사용되는 시스템 데이터베이스입니다. 서버 성능에 대한 통찰력을 제공합니다.
  • acuart: 이 데이터베이스 이름은 서버에서 실행되는 웹 애플리케이션에 특정한 사용자 생성 데이터베이스일 가능성이 높습니다. 이것은 종종 사용자 자격 증명, 제품 정보 또는 기타 민감한 비즈니스 데이터와 같은 애플리케이션 데이터를 포함하는 데이터베이스입니다.

acuart와 같은 사용자 생성 데이터베이스를 식별하는 것은 종종 주요 목표입니다. 왜냐하면 이러한 데이터베이스에는 공격자에게 유용한 정보가 포함될 가능성이 더 높기 때문입니다.

시스템 데이터베이스와 사용자 데이터베이스 구분하기

이 마지막 단계에서는 열거 결과를 바탕으로 시스템 데이터베이스와 사용자 데이터베이스를 명확하게 구분합니다. 이 구분은 침투 테스트에서 다음 단계를 우선순위화하는 데 중요합니다.

이전 단계에서 관찰했듯이 information_schema, mysql, performance_schema와 같은 데이터베이스는 일반적으로 시스템 수준 데이터베이스입니다. 이들은 데이터베이스 관리 시스템의 핵심 기능의 일부이며 일반적으로 메타데이터, DBMS 자체의 사용자 계정 및 성능 통계를 포함합니다. 때때로 악용될 수 있지만 공격자가 종종 찾는 애플리케이션별 민감한 데이터를 포함하는 경우는 드뭅니다.

반면에 표준 시스템 이름이 아닌 이름의 데이터베이스 (예: 우리 예제의 acuart 또는 webapp_db, users, products 등) 는 일반적으로 사용자 생성 데이터베이스입니다. 이러한 데이터베이스에는 웹 애플리케이션의 실제 데이터가 저장됩니다. 예를 들면 다음과 같습니다.

  • 사용자 자격 증명 (사용자 이름, 해시된 비밀번호)
  • 고객 정보
  • 제품 카탈로그
  • 재무 기록
  • 기타 독점 비즈니스 데이터

침투 테스트를 수행할 때 데이터베이스를 열거한 후에는 이러한 사용자 생성 데이터베이스에 집중해야 합니다. 다음 논리적 단계는 이러한 사용자 데이터베이스 내의 테이블을 열거하고, 해당 테이블 내의 열을 열거한 다음, 마지막으로 데이터를 덤프하는 것입니다.

이 구분을 이해함으로써 가장 가치 있는 정보를 추출하기 위해 후속 sqlmap 명령을 효율적으로 타겟팅할 수 있습니다. 예를 들어, acuart 데이터베이스 내의 테이블을 열거하려면 다음과 같은 명령을 사용합니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

이 명령은 식별된 사용자 데이터베이스에 초점을 맞춰 다음 단계의 데이터 추출로 진행하는 방법을 보여줍니다.

요약

이 실습에서는 sqlmap을 사용하여 대상 서버에서 데이터베이스를 열거하는 방법을 성공적으로 배웠습니다. SQL 인젝션 성공을 확인하는 것의 중요성을 이해하는 것부터 시작했습니다. 그런 다음 --dbs 플래그를 사용하여 사용 가능한 모든 데이터베이스를 나열하고 명령을 실행하여 결과를 확인했습니다. 마지막으로 반환된 데이터베이스 이름을 해석하여 시스템 데이터베이스와 잠재적으로 더 가치 있는 사용자 생성 데이터베이스를 구별하는 방법을 배웠습니다. 이 기술은 취약한 웹 애플리케이션에서 정보를 추출하려는 모든 침투 테스터에게 기본적입니다.