데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
SQLMap은 오픈소스 침투 테스트 도구로, SQL 인젝션 취약점 탐지 및 익스플로잇을 자동화합니다. Python 기반으로 동작하며, 다양한 데이터베이스 백엔드(MySQL, PostgreSQL, MSSQL, Oracle, SQLite 등)를 지원합니다.
GET/POST 파라미터, 쿠키, User-Agent 등 다양한 entry point에서 SQL 인젝션 취약점을 자동 탐지.
데이터베이스 덤프, 테이블/컬럼 추출, 파일 읽기/쓰기, OS 커맨드 실행 등 고급 공격 지원.
WAF(Web Application Firewall) 우회를 위한 다양한 페이로드 난독화 및 템플릿 제공.
수동 SQL 인젝션 테스트는 시간이 많이 소요되고, 실수할 가능성이 높습니다. SQLMap은 반복 작업을 자동화하고, 널리 알려진 대안 도구와 비교했을 때 다음과 같은 강점을 가집니다.
| 도구 | 자동화 수준 | 지원 DB | 우회 기능 | 유지보수 |
|---|---|---|---|---|
| SQLMap | 높음 (전 과정 자동화) | 10+ | 강력 (tamper 스크립트) | 활발 (커뮤니티) |
| jSQL Injection | 중간 (GUI 위주) | 5~7 | 기본 | 중간 |
| Burp Suite (수동) | 낮음 (반자동) | 무관 | 사용자 구현 필요 | 상용 |
| Havij (단종) | 중간 | 제한적 | 없음 | 중단 |
💡 Tip: AI 보안 엔지니어라면 SQLMap을 CI/CD 파이프라인에 통합하여 정기적인 취약점 스캔을 자동화할 수 있습니다.
SQLMap의 아키텍처는 다음과 같은 주요 모듈로 구성됩니다.
SQLMap은 탐지 → 확인 → 데이터 추출 3단계로 동작하며, 각 단계마다 사용자 개입 없이 자동으로 최적의 페이로드를 선택합니다.
Python 3.7+ 환경에서 pip로 간단히 설치 가능합니다.
pip install sqlmap
또는 GitHub 저장소에서 직접 클론:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git
cd sqlmap
python sqlmap.py --version
설치 후 간단한 도움말 출력으로 정상 동작을 확인합니다.
sqlmap --help
다음은 취약한 예제 URL에 대한 기본 탐지 명령입니다.
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" --batch
Python 스크립트 내에서 호출하는 경우:
import subprocess
result = subprocess.run(['sqlmap', '-u',
'http://testphp.vulnweb.com/artists.php?artist=1',
'--batch'], capture_output=True, text=True)
print(result.stdout[:500])
⚠️ 주의: 실제 운영 환경에서 무단 스캔은 불법입니다. 반드시 허가된 대상에만 사용하세요.
| 옵션 | 설명 | 예시 |
|---|---|---|
-u | 대상 URL | -u "http://example.com/page?id=1" |
--data | POST 요청 바디 | --data "user=admin&pass=test" |
--cookie | 세션 쿠키 | --cookie "PHPSESSID=abc123" |
--level | 테스트 깊이 (1~5, 기본 1) | --level 3 |
--risk | 위험도 (1~3, 기본 1) | --risk 2 |
--batch | 비대화형 모드 (모든 질문 기본값) | --batch |
--tamper | WAF 우회 스크립트 | --tamper=space2comment |
--dump | 데이터베이스 덤프 | --dump -T users |
--os-shell | OS 커맨드 셸 획득 | --os-shell |
| 문제 | 원인 | 해결 |
|---|---|---|
| 탐지율 낮음 | WAF 또는 파라미터 필터링 | --level 5 --risk 3 및 tamper 스크립트 적용 |
| 세션 만료 | 인증 기반 페이지 | --cookie로 유효한 세션 전달 |
| 시간 기반 블라인드 느림 | 네트워크 지연 | --time-sec 1 (기본 5)로 타임아웃 조정 |
| 비정상 종료 | 메모리 부족 | --threads 1로 스레드 수 감소 |
| 파일 출력 안 됨 | 권한 문제 | --file-dest /tmp로 출력 경로 변경 |
💡 실무 팁: AI 기반 보안 파이프라인에 통합하려면 --output-dir과 --batch --flush-session을 함께 사용하여 재현성 있는 결과를 얻으세요.