본문 바로가기
인터넷 보안/실습

[인터넷 보안] SQL Injection - SQL Map

by 볼링치는 개발자 2021. 6. 12.
반응형

SQL Map이란?

SQL Map은 파이썬으로 개발된 툴로 Kali Linux안에 설치되어있는 프로그램입니다.

SQL Map은 터미널로 명령어를 입력하면서 SQL Injection 공격을 수행할 수 있습니다.

SQL Map을 실행해보면 다음과 같은 창이 로딩됩니다.

기본적으로 SQL Map은 url을 기반으로 공격합니다.

현재 실습하려는 DVWA와 같이 로그인된 경우에는 cookie에 대한 정보도 설정해줘야 합니다.

DVWA의 blind SQL injection에서 SQL map을 사용해 공격해보겠습니다.

 

SQL map을 사용하는 2가지 방법이 있습니다.

  1. URL 사용하기
  2. 요청을 담은 텍스트 파일 사용하기

URL 사용하기

다음 명령어를 통해 SQL map을 실행시켜 줍니다.

$ sqlmap -u "http://192.168.0.21/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=522d9f659519d33c0d383d568454c6f5"

-u 뒤에는 공격하고자 하는 DVWA의 링크를 넣어주고, cookie정보를 넣어주면 됩니다.

이 정보에 대해서는 다음과 같이 얻을 수 있습니다.

요청을 담은 텍스트 파일 사용하기

Burpsuite을 켜고, 인터셉트를 켜놓고, DVWA의 SQL Injection에서 submit버튼을 누르면 다음과 같이 요청이 인터셉트됩니다.

다음 요청을 파일로 복사합니다.

파일로 복사할 때 request.txt 같은 이름을 부여해 복사합니다.

터미널 창을 열고 다음과 같은 명령어를 입력해 SQL map을 실행합니다.

$ sqlmap -r request.txt

SQL Map 사용하기

그럼 위의 명령문을 실행하자마자 DBMS은 MySQL이고 다른 공격을 skip 할 거냐고 물어보는데 Y를 입력해주면 됩니다.

다음으로 MySQL에 대한 모든 공격을 할 거냐고 물어보는데 마찬가지로 Y를 입력해주면 됩니다.

공격을 하다가 id 파라미터가 취약하고, 다른 것들도 공격을 테스트할 거냐고 물어보는데 n을 입력해줍니다.

최종적으로 다음과 같은 결과 문을 출력하며 sqlmap이 종료가 됩니다.

위의 출력문을 보면 id 파라미터가 취약하고 time-base blind공격과 union 쿼리문 공격이 가능할 것 같다고 말합니다.

백엔드의 데이터베이스, 개발에 사용된 언어, 웹서버의 종류와 버전과 같은 정보들도 보여줍니다.

또한 지금 테스트한 결과를 파일로 저장합니다.

 

그럼 이제 본격적인 공격을 시작하겠습니다.

다음 명령어를 입력해 현재 데이터베이스 정보를 알아냅니다.

$ sqlmap -u "http://192.168.0.21/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=522d9f659519d33c0d383d568454c6f5" --current-db

결과로 현재 데이터베이스가 dvwa라고 알려줍니다.

다음 명령어를 입력해 dvwa 데이터베이스의 테이블 정보들을 조회합니다.

$ sqlmap -u "http://192.168.0.21/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=522d9f659519d33c0d383d568454c6f5" -D dvwa --tables

결과로 dvwa 데이터베이스에는 guestbook과 users라는 2개의 테이블을 확인할 수 있었습니다.

다음 명령어를 입력해 users 테이블의 dump를 조회합니다.

$ sqlmap -u "http://192.168.0.21/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit"
--cookie="security=low; PHPSESSID=522d9f659519d33c0d383d568454c6f5" -D dvwa -T users --dump

이때 4가지 질문에 답해야 합니다.

  1. 해시 값을 따로 파일에 저장할까요? N
  2. Dictionary-attack으로 해시 값을 크랙 할까요? Y
  3. 무슨 Dictionary를 사용하실 건가요? 기본값으로 Enter
  4. 비밀번호 뒤에 붙는 접미사도 사용할 건가요? 느리다고 하니 N

조금의 시간이 지나면 해시값을 크랙 하는 것을 볼 수 있고 최종적으로 모든 결과를 보여주게 됩니다.

이렇게 데이터베이스의 하나의 값만 취약해도 자동 공격 프로그램으로 데이터베이스의 정보를 모두 조회할 수 있습니다.

 

반응형

'인터넷 보안 > 실습' 카테고리의 다른 글

[인터넷 보안] XSS (Kali, Ubuntu 사용)  (1) 2021.06.12
[인터넷 보안] XSS  (0) 2021.06.12
[인터넷 보안] SQL Injection  (0) 2021.06.11
[인터넷 보안] CSRF 공격  (0) 2021.06.11

댓글