본문 바로가기

해킹/Web Hacking

직접 만든 사이트에 SQLmap 테스트해보기

sqlmap

최근 프로젝트를 열심히 하면서 본사에 교육을 들으러 갈 일이 있었다.

교육해주시는 대표님께서 자동화 도구를 능동적으로 사용하는 방법에 대해서 알려주셨는데,

쿼리를 일일히 대입해보며 SQL Injection을 테스트해보기란 정말 오래걸리는 일이기 때문에, sqlmap을 이용해 이 도구가 보내는 패킷들의 형태를 보며 왜 이 쿼리를 날렸는지를 사용해보며 익힐 수 있다고 하셨다.

생각해보니 정말 좋은 방법인 것 같다.

이때까지는 웹 해킹의 정말 기초적인 부분만을 다뤄보고 툴 같은 거에 대해 소극적인 태도를 가졌었다고 생각하기 때문이다.

 

일단 바로 sqlmap을 설치해보자.

 

일단 sqlmap은 python을 기반으로 만들어진 툴이기 때문에 python이 설치되어 있어야한다.

 

본인은 python이 설치되어있다.

3.10.5 버전

 

그 후, 아래 주소로 들어가 sqlmap을 다운받아주자.

https://sqlmap.org/

 

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

 

암거나 받아주자. 본인은 tarball을 받았다.

 

설치가 끝났으면 이렇게 여러폴더와 sqlmap.py를 비롯한 파일이 추가될 것이다. 여기 주소 표시줄에 cmd를 치고 python을 통해 sqlmap을 실행해보자.

 

실행이 잘 되는지 테스트해보기 위해 아래 명령어를 입력해보자.

python sqlmap.py --help

 

저렇게 주사기모양이 나오면 잘 설치된 것이다.

 

그럼 sqlmap을 잘 사용하기 위한 옵션들이 주루룩 나올 것이다.

 

자 그럼 이제 sqlmap 실습을 해볼 대상

직접 만든 홈페이지를 틀어보자.

 

sqlmap은 가능성이 있는 쿼리들을 모조리 때려박아버리는 툴이라 아무데서나 실습하면 큰일난다.

하지만 직접 만든 홈페이지는 어떤 패킷을 날리던지 내꺼라 아무상관이 없다^^

 

이 페이지는 로그인 창과 게시판에서 sql injection이 유효한 "취약한 페이지"이다.

sqlmap에 어떤 대상을 할 건지 -u 옵션을 통해 url을 넣을 수 있다.

그리고 --proxy="URL"을 통해 sqlmap이 날리는 쿼리들을 burp suite으로 받아볼 수 있다.

--cookie="PHPSESSID~~"를 통해 로그인 이후의 기능에서 SQL 쿼리를 삽입할 수 있고

-p 를 통해 어떤 파라미터에 삽입할 것인지를 결정할 수 있다.

 

-u : 어떤 url에 넣을 건지

-p : 어떤 파라미터에 넣을 건지

--proxy="" : sqlmap이 보내는 쿼리들을 burp suite으로 받아볼 수 있게 해줌.

--cookie : 로그인 상태를 유지시켜줌.

--dbs : 어떤 DB인지를 알려준다. (목표를 부여)

 

아래 명령어는 

search_result.php라는 곳에 --cookie로 로그인을 하고 search 파라미터에다가 sql 쿼리를 넣어줘

근데 burp suite으로 패킷을 전송해주고 DB의 이름을 알려줘 라는 명령인 것이다.

python sqlmap.py 
-u "http://192.168.219.100:2100/search_result.php?category=title&search=&pre_date=&end_date=" 
--cookie="PHPSESSID=4bvt5fm44p4it0erddbpvu97db" 
-p "search" 
--proxy="http://127.0.0.1:8080" 
--dbs

 

그럼 sqlmap이 막 돌아가면서 search 파라미터가 취약한 것 같다고 해주고

DB의 정보가 'MySQL 인 것 같다'라고 알려준다.

그러더니 DB명이 어떤 것들이 있는지 까지 알려주고 5개가 있다고 알려준다.

놀랍다.

 

그 다음 Burp Suite 패킷을 보자.

--proxy 옵션을 줘서 그런지 sqlmap이 마구 쏘아댄 패킷들이 그대로 history에 잡혀 있다.

패킷들을 클릭해보면 어떤 쿼리를 날렸는지가 보이는데,

union과 concat 함수등등을 사용해간 흔적이 보인다.

 

확실히 평소에 스스로 잘 안쓰던 함수의 기능들도 접할 수 있는 능동적인 학습이 되는 것 같다.

 

 

 

TABLE 명 출력해보기

--dbs 옵션을 줬더니 DB종류와 DB이름을 출력했던 것처럼

--tables 옵션을 주거나 --columns 옵션을 주면 table 명, columns 명을 전부 뽑아낼 수 있다.

 

옵션만 --dbs에서 --tables로 바꿔서 enter를 쳐보니 주루룩 잘 돌아간다.

 

이럴 수가 test DB의 모든 tables가 출력되었다. 물론 위에 information_schema db 등등 모든 DB도 다 출력되어있지만 생략..

 

어떤 쿼리를 입력했나 봤더니 더러운 함수들을 많이 써놨다.