sqlmap 으로 특정 데이터베이스의 테이블 열거하기

Kali LinuxBeginner
지금 연습하기

소개

사이버 보안 분야에서 데이터베이스 구조를 이해하는 것은 웹 애플리케이션의 보안 상태를 평가하는 데 중요한 단계입니다. SQL 인젝션 취약점은 민감한 정보를 노출할 수 있으며, sqlmap과 같은 도구는 이러한 결함을 자동화하여 발견하고 악용하는 데 필수적입니다.

이 랩은 sqlmap의 기능 중 특정하지만 중요한 측면, 즉 데이터베이스 내의 테이블 열거에 중점을 둡니다. 잠재적인 SQL 인젝션 지점을 식별하고 사용 가능한 데이터베이스를 나열한 후, 다음 논리적 단계는 특정 데이터베이스를 더 깊이 파고들어 테이블 구조를 이해하는 것입니다. 이 지식은 특정 테이블에서 민감한 데이터를 덤프하는 것과 같은 추가적인 악용에 매우 중요합니다.

이 랩이 끝날 때쯤이면 sqlmap을 사용하여 특정 데이터베이스를 대상으로 하고 관련된 모든 테이블을 나열하는 데 능숙해질 것입니다. 이는 모든 침투 테스터 또는 보안 애호가에게 기본적인 기술입니다.

열거된 목록에서 대상 데이터베이스 선택

이 단계에서는 이전에 열거된 데이터베이스가 있다고 가정하고 하나를 선택하여 집중할 것입니다. 실제 시나리오에서는 사용 가능한 모든 데이터베이스를 나열하기 위해 --dbs 플래그와 함께 sqlmap을 이미 실행했을 것입니다. 이 랩에서는 acuart라는 데이터베이스를 대상으로 선택했다고 가정합니다.

먼저 sqlmap을 사용할 수 있는지 확인합니다. 설치되지 않은 경우 sudo apt update && sudo apt install sqlmap -y를 사용하여 설치할 수 있습니다.

대상으로 알려진 취약한 URL 을 사용하겠습니다. 시연 목적으로 http://testphp.vulnweb.com/listproducts.php?cat=1을 사용합니다.

시작하기 위해 대상에서 사용 가능한 데이터베이스를 나열해 보겠습니다. 이 명령은 sqlmap이 검사를 수행하므로 실행하는 데 시간이 걸립니다.

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

데이터베이스를 나열하는 다음과 유사한 출력이 표시됩니다.

---
[INFO] fetching database names
[INFO] the back-end DBMS is MySQL
...
available databases [X]:
[*] acuart
[*] information_schema
[*] mysql
[*] performance_schema
...

이 목록에서 추가 열거를 위해 acuart를 선택할 것입니다.

-D 플래그를 사용하여 데이터베이스 지정하기

이 단계에서는 sqlmap이 어떤 특정 데이터베이스와 상호 작용하기를 원하는지 알려주는 방법을 배웁니다. 이는 -D (또는 --db) 플래그 뒤에 데이터베이스 이름을 사용하여 달성됩니다.

이전 단계에서 대상 데이터베이스로 acuart를 식별한 내용을 이어받아, 이제 sqlmap이 이 특정 데이터베이스에 대한 작업을 집중하도록 지시할 것입니다.

데이터베이스를 지정하는 일반적인 구문은 다음과 같습니다.

sqlmap -u "TARGET_URL" -D "DATABASE_NAME" [OTHER_FLAGS]

이 랩에서는 acuart를 데이터베이스 이름으로 사용할 것입니다. 아직 테이블을 나열하는 것이 아니라 sqlmap의 컨텍스트를 설정하는 것입니다.

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

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

이 명령은 sqlmap에게 acuart 데이터베이스를 대상으로 하고 현재 연결된 데이터베이스를 식별하도록 지시하여 선택을 확인합니다. 출력은 acuart가 대상 데이터베이스임을 확인할 것입니다.

---
[INFO] fetching current database
...
current database: 'acuart'
...

--tables 플래그를 사용하여 테이블 나열하기

-D 플래그를 사용하여 대상 데이터베이스를 지정했으므로, 다음 논리적 단계는 해당 데이터베이스 내의 테이블을 나열하는 것입니다. 이때 --tables 플래그가 사용됩니다.

--tables 플래그는 sqlmap에게 현재 선택된 데이터베이스에 존재하는 모든 테이블을 열거하도록 지시합니다. -D 플래그와 결합하면 특정 데이터베이스의 구조를 파악하는 강력한 방법이 됩니다.

특정 데이터베이스의 테이블을 나열하는 일반적인 구문은 다음과 같습니다.

sqlmap -u "TARGET_URL" -D "DATABASE_NAME" --tables

이 랩에서는 대상 URL, acuart 데이터베이스 및 --tables 플래그를 결합하여 사용할 것입니다.

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

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

이 명령은 sqlmapacuart 데이터베이스 내의 모든 테이블을 식별하고 나열하는 프로세스를 시작합니다. 이 작업은 데이터베이스의 복잡성과 크기에 따라 시간이 걸릴 수 있습니다.

테이블 열거를 위한 명령 실행

이 단계에서는 지금까지 배운 모든 플래그를 결합하여 특정 대상 데이터베이스에서 테이블을 열거하는 전체 sqlmap 명령을 실행합니다.

대상 URL http://testphp.vulnweb.com/listproducts.php?cat=1을 사용하고, -D acuart를 사용하여 acuart 데이터베이스를 지정하며, --tables를 사용하여 sqlmap에 테이블을 나열하도록 지시할 것입니다.

터미널을 열고 다음 명령을 실행하십시오.

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

이제 sqlmap이 검사를 수행하고 테이블 이름을 검색하려고 시도합니다. sqlmap이 테스트를 진행함에 따라 다양한 [INFO] 메시지가 표시됩니다.

잠시 후 sqlmapacuart 데이터베이스 내에서 찾은 테이블 목록을 표시합니다. 출력은 다음과 유사하게 보일 것입니다.

---
[INFO] fetching tables for database 'acuart'
...
Database: acuart
[X] articles
[X] carts
[X] categories
[X] guestbook
[X] pictures
[X] products
[X] users
...

이 출력은 sqlmapacuart 데이터베이스 내의 테이블을 성공적으로 열거했음을 확인합니다.

반환된 테이블 이름 목록 분석하기

이 마지막 단계에서는 이전 sqlmap 명령의 출력을 분석합니다. 반환된 테이블 이름 목록을 이해하는 것은 후속 공격 단계를 계획하는 데 중요합니다.

sqlmap이 테이블을 성공적으로 열거하면 명확하고 체계적인 목록으로 표시됩니다. acuart 데이터베이스의 경우 articles, carts, categories, guestbook, pictures, products, users와 같은 테이블을 보셨을 것입니다.

이러한 각 테이블 이름은 데이터베이스에 저장된 데이터에 대한 단서를 제공합니다. 예를 들어:

  • users: 이 테이블에는 사용자 자격 증명 (사용자 이름, 비밀번호, 이메일) 이 포함될 가능성이 높으며, 이는 공격자에게 주요 대상이 되는 경우가 많습니다.
  • products: 이 테이블에는 웹사이트에서 판매되는 제품에 대한 정보가 포함됩니다.
  • articles, guestbook, categories: 이 테이블에는 콘텐츠 관련 데이터가 포함될 가능성이 높습니다.

users 테이블의 존재는 종종 민감한 정보를 포함하므로 특히 중요합니다. 실제 침투 테스트에서는 일반적으로 users 테이블 내의 열을 열거 (--columns 사용) 한 다음 해당 열의 데이터를 덤프 (--dump 사용) 하는 것이 다음 단계가 될 것입니다.

이 랩에서는 sqlmap을 사용하여 특정 데이터베이스에서 테이블을 열거하는 기본 기술을 습득했으며, 이는 모든 SQL 인젝션 평가에서 중요한 단계입니다.

요약

이 랩에서는 sqlmap을 사용하여 특정 데이터베이스에서 테이블을 열거하는 방법을 성공적으로 배웠습니다. 대상 데이터베이스를 선택하는 것의 중요성을 이해하는 것부터 시작하여, -D 플래그를 사용하여 이를 지정하고, 마지막으로 --tables 플래그를 사용하여 관련된 모든 테이블을 나열했습니다.

열거를 수행하기 위해 전체 sqlmap 명령을 실행했으며, 반환된 테이블 이름 목록을 분석하여 보안 평가에서의 잠재적 중요성을 이해했습니다. 이 기술은 SQL 인젝션 취약점을 식별하고 악용하는 과정의 기본 요소이며, 데이터베이스 구조를 파악하고 추가 데이터 추출을 계획할 수 있게 해줍니다.

이 기술을 숙달함으로써 웹 애플리케이션의 기본 데이터 구조를 탐색하고 이해하는 데 더 나은 준비를 갖추게 되었으며, 이는 모든 침투 테스트 작업에서 중요한 단계입니다.