sqlmap 을 이용한 GET 매개변수 기본 스캔 수행

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 sqlmap이라는 오픈 소스 침투 테스트 도구를 사용하여 SQL 인젝션 취약점을 탐지하고 악용하며 데이터베이스 서버를 장악하는 과정을 자동화하는 실질적인 경험을 쌓게 됩니다. 특히 웹 애플리케이션의 GET 매개변수에 대해 기본적인 스캔을 수행하여 잠재적인 SQL 인젝션 취약점을 식별하는 데 중점을 둘 것입니다. 스캔을 시작하는 방법과 초기 출력을 해석하는 방법을 이해하는 것은 웹 보안 또는 침투 테스트에 관련된 모든 사람에게 기본적인 기술입니다. 이 실습에서는 취약한 환경 설정부터 첫 sqlmap 명령 실행 및 결과 분석에 이르기까지 필요한 단계를 안내합니다.

GET 매개변수가 포함된 대상 URL 식별

이 단계에서는 sqlmap이 SQL 인젝션 취약점 테스트에 사용할 GET 매개변수가 포함된 대상 URL 을 식별합니다. GET 매개변수는 일반적으로 URL 에서 물음표 (?) 뒤에 나타나며, 키 - 값 쌍은 앰퍼샌드 (&) 로 구분됩니다. 이 실습을 위해 GET 을 통해 id 매개변수를 받는 간단한 취약한 PHP 애플리케이션을 설정했습니다.

먼저 LabEx 환경 내에서 웹 브라우저를 엽니다. 데스크톱 환경의 "Web Browser" 아이콘을 클릭하여 브라우저에 액세스할 수 있습니다.

다음 URL 로 이동합니다: http://localhost/index.php?id=1

페이지 내용을 관찰합니다. 애플리케이션이 id 매개변수에 따라 데이터를 표시하고 있음을 나타내는 간단한 출력이 표시되어야 합니다. 이는 id 매개변수가 sqlmap 스캔에 적합한 대상임을 확인시켜 줍니다.

-u 옵션을 사용한 기본 스캔 명령 구성

이 단계에서는 GET 매개변수가 있는 특정 URL 을 대상으로 하는 기본 sqlmap 명령을 구성하는 방법을 배웁니다. 대상 URL 을 지정하는 주요 옵션은 -u (또는 --url) 입니다.

LabEx 환경에서 터미널을 엽니다. 기본 사용자는 labex이며, 기본 작업 디렉토리는 ~/project입니다.

GET 매개변수가 있는 URL 을 스캔하기 위한 sqlmap의 기본 구문은 다음과 같습니다.

sqlmap -u "http://example.com/page.php?param=value"

http://example.com/page.php?param=value를 대상 URL 로 바꾸십시오.

이 실습의 대상 URL 은 http://localhost/index.php?id=1입니다. 따라서 사용할 명령은 다음과 같습니다.

sqlmap -u "http://localhost/index.php?id=1"

이 명령은 sqlmap에게 지정된 URL 스캔을 시작하고 id GET 매개변수에 대한 SQL 인젝션 취약점을 테스트하도록 지시합니다.

대상 URL 에 대한 스캔 실행

이제 sqlmap 명령을 구성했으므로 터미널에서 실행할 차례입니다. 이렇게 하면 자동화된 SQL 인젝션 스캔이 시작됩니다.

터미널에서 이전 단계에서 구성한 sqlmap 명령을 실행합니다.

sqlmap -u "http://localhost/index.php?id=1"

sqlmap은 다양한 유형의 SQL 인젝션 취약점을 테스트하기 위해 id 매개변수에 다양한 페이로드 (payload) 를 보내기 시작합니다. 스캔 중에 sqlmap이 몇 가지 질문을 할 수 있습니다. 이 기본 스캔의 경우, 프롬프트가 나타날 때 Enter를 누르거나 y (yes) 를 입력하여 기본 옵션을 일반적으로 수락할 수 있습니다.

예를 들어, sqlmap은 다음과 같이 질문할 수 있습니다.
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n]
Y를 입력하고 Enter를 누릅니다.

또한 다음과 같이 질문할 수도 있습니다.
for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N]
식별된 취약한 매개변수에 집중하기 위해 N을 입력하고 Enter를 누릅니다.

스캔이 진행되며, 진행 상황과 수행되는 테스트를 나타내는 다양한 메시지가 표시됩니다.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (truncated output) ...

주입 지점에 대한 초기 스캔 출력 분석

sqlmap 스캔이 완료되면 결과에 대한 요약을 제공합니다. 이 단계에서는 초기 출력을 분석하여 확인된 SQL 인젝션 지점을 식별합니다.

터미널의 출력을 검토합니다. sqlmap이 취약한 매개변수를 찾았음을 나타내는 줄을 찾습니다. 주요 지표는 다음과 유사한 메시지입니다.

[INFO] GET parameter 'id' is vulnerable.

이 메시지는 sqlmap이 대상 URL 의 id GET 매개변수에서 SQL 인젝션 취약점을 성공적으로 식별했음을 확인합니다. 출력에는 일반적으로 발견된 인젝션 유형 (예: Boolean-based blind, Error-based, Time-based blind, Stacked queries 등) 과 식별된 백엔드 데이터베이스 관리 시스템 (DBMS)(예: MySQL, PostgreSQL 등) 도 표시됩니다.

이 초기 출력을 이해하는 것은 취약점이 어디에 있는지, 그리고 어떤 유형의 데이터베이스를 다루고 있는지 알려주므로 추가적인 공격 단계를 알리는 데 중요합니다.

... (previous output) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (truncated output) ...

출력 디렉토리에서 세션 파일 찾기

sqlmap은 식별된 취약점, 검색된 데이터 및 세션 정보를 포함한 모든 스캔 결과를 전용 출력 디렉토리에 자동으로 저장합니다. 이 단계에서는 이 세션 파일을 찾는 방법을 배웁니다.

기본적으로 sqlmap은 출력을 ~/.sqlmap/output/ 디렉토리에 저장합니다. 이 디렉토리 안에는 대상 호스트 이름으로 명명된 하위 디렉토리가 있습니다.

sqlmap 출력 디렉토리로 이동합니다.

cd ~/.sqlmap/output/localhost/

그런 다음 이 디렉토리의 내용을 나열하여 세션 파일 및 기타 스캔 관련 데이터를 확인합니다.

ls -l

특정 URL 또는 해당 URL 의 해시로 명명된 디렉토리가 보일 것이며, 그 안에는 session.sqlite, log와 같은 파일 및 데이터가 추출된 경우 dump 디렉토리가 있을 수 있습니다. session.sqlite 파일에는 세션 데이터가 포함되어 있어 sqlmap이 재스캔 없이 스캔을 재개하거나 이전 결과를 검토할 수 있습니다.

labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan  1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan  1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan  1 12:35 session.sqlite

이 단계는 sqlmap이 영구 데이터를 저장하는 위치를 이해하는 데 중요하며, 이는 이전 스캔을 검토하거나 복잡한 작업을 계속하는 데 유용합니다.

요약

이 실습에서는 sqlmap을 사용하여 GET 매개변수에 대한 기본적인 SQL 인젝션 스캔을 성공적으로 수행했습니다. 대상 URL 을 식별하고, -u 옵션으로 sqlmap 명령을 구성하고, 스캔을 실행하고, 초기 출력을 해석하여 인젝션 지점을 확인하는 방법을 배웠습니다. 또한 sqlmap이 결과를 저장하는 세션 파일과 출력 디렉토리를 찾았습니다. 이 기초 지식은 웹 애플리케이션 보안 테스트와 sqlmap의 기능에 대해 더 깊이 알고자 하는 모든 사람에게 중요합니다.