[웹해킹] SQL 인젝션 공격 실습 - SQL MAP
- IT/웹해킹
- 2020. 12. 16.
지금까지 우리는 SQL 인젝션 공격을 손수 시도하여 각종 정보를 알아내는 실습을 하였다. 이번 시간에는 SQL 인젝션 공격 프로그램 중 가장 대중적이라고 할 수 있는 SQLMAP 이라는 프로그램을 이용하여 자동으로 공격하는 방법을 배워 보자.
Applications 메뉴로 가서 Web Application Analysis -> sqlmap 클릭
sqlmap은 파이썬으로 개발된 프로그램으로 터미널에서 명령을 실행 할 수 있다. sqlmap 화면을 보면 sqlmap과 관련된 각종 옵션들을 참고 할 수 있다.
이 중 필수 옵션은 -u 이다. -u 뒤에다가 공격할 URL주소를 입력하면 sqlmap 프로그램이 그 url을 대상으로 자동으로 공격을 수행한다. DVWA처럼 로그인 된 상태에서 공격을 수행할 때는 쿠키 정보를 추가로 입력해 주어야 한다. 그래서 sqlmap이 로그인이 된 것처럼 공격을 수행 할 수 있다.
DVWA의 블라인드 인젝션 공격 페이지를 통해 sqlmap을 사용해보자.
sqlmap -u 를 입력하는데 -u 뒤에는 정상적인 주소를 적어 주어야 한다. User ID에 1이라는 값을 넣고 제출했을 때의 url을 복사하여 터미널에서 실행시켜 본다.
submit 뒤에 # 은 지워도 상관 없다. 그리고 쿠키 옵션을 추가로 넣어 준다. 쿠키를 어떻게 확인하냐면 다른 방법도 많지만 아까 처럼 F12의 develope 에서 Console 탭으로 들어간 다음 밑의 >> 부분에 document.cookie를 입력하면 쉽게 현재 쿠키를 알아낼 수 있다.
엔터를 누른다.
위 그림의 쿠키 값을 복사한 후 sqlmap 명령어에 붙여넣어 완성한다.
실행을 시켜 보면 시작과 동시에 id 파라미터를 통한 AND boolean-based blind 공격이 가능 할 것 같다는 메시지가 나온다. AND boolean-based blind 공격은 아까 실습해 보았던 AND1=1, AND1=2와 같이 AND 조건을 이용한 공격 기법이다.
최종적인 결과 화면이다. 이 프로그램은 278개의 http요청을 자동으로 보냈고 id라는 파라미터가 boolean-base blind 공격과 time-based blind 공격이 가능하다고 알려준다.
지난 시간에 우리는 AND를 이용하여 손수 참, 거짓을 구별해내고 또 sleep 함수를 이용하여 참, 거짓을 구별해냈는데 그 결과와 동일하게 나오고 있다. 이처럼 url에 포함된 각 파라미터를 자동으로 테스트하여 sql 인젝션 공격이 가능한지를 알려준다. 또한 웹사이트가 개발된 개발언어, 웹서버의 종류와 버전, mysql DB의 버전 정보를 보여준다. 다음 실행할 것을 대비하여 어떤 경로에다 임시로 저장을 해두고 있다.
이제 sql 인젝션 공격이 가능하다고 나왔으니 sqlmap 프로그램을 이용하여 DB의 각종 정보를 쉽게 알아 낼 수 있다. 위에서 실행했던 sql 명령 뒤에 추가로 --curruent-db 라는 옵션을 주어 현재 DB의 이름을 알아낼 수 있다.
현재 DB의 이름이 dvwa라는 것을 알아냈고 이번에는 테이블 이름을 알아내보자. 아까 명령어에서 --curruent-db를 지우고 -D dvwa --table 옵션을 준다.
실행해보자.
guestbook이라는 테이블과 users라는 테이블이 있다는 것을 알려주고 있다.
users 테이블의 각종 정보들을 추출 해보자. 명령어에 -T를 주면 table까지 선택을 할 수 있다. -T users --dump 라는 명령어는 users 테이블의 모든 정보를 모두 뽑아낼 수 있다는 것이다. 아래 명령어를 실행한다.
한 자씩 한 자씩 출력 된다. 그 이유는 블라인드 SQL 인젝션 공격이기 때문인데 블라인드 SQL 인젝션 공격으로 각종 정보를 알파벳 하나씩 하나씩 넣어가면서 이것이 참인지, 거짓인지를 확인하기 때문이다. 일반 sql 인젝션 공격 이라면 훨씬 빠르게 가능하다.
users 테이블의 정보가 모두 출력된 이후에 해쉬 값이 있으니 이것을 혹시 나중에 처리하기 위해 저장해 둘거냐고 물어보는 것이다. 해쉬는 보통 패스워드를 저장할 때 많이 쓰는데 지금 바로 그 해쉬 값을 크랙하고 싶다면 n을 선택해도 상관 없다. 디폴트도 n으로 되어있다. 그냥 엔터를 누르자(n).
그리고 딕셔너리 공격으로 해쉬들을 크랙 할 것인지 물어본다. 딕셔너리 공격은 brute-force 공격 시간에 배웠던 것이다. y를 선택한다.
딕셔너리 공격에 어떤 파일을 쓸 것인지 물어보는 것인데 그냥 엔터를 치면 디폴트로 내장된 파일을 사용하게 된다.
자주 사용하는 패스워드 뒤에 붙는 접미사를 사용할 것이냐는 질문. 느리다고 하니 N을 선택한다.
users 테이블 내의 모든 정보가 출력 되었다. 이런식으로 데이터베이스의 모든 정보를 가져 올 수 있고 패스워드의 경우 크랙 까지 자동으로 해주고 있다.
이와 같이 사이트 내에 단 한 개의 파라미터가 sql 인젝션 공격에 취약하다면 이런 프로그램을 통해 과거의 해킹 사건들 처럼 수십만, 수백만 건의 개인정보가 유출 될 수 있다. 따라서 철저하게 SQL 인젝션 공격을 방어하는 것이 중요하다. 다음 시간에 이러한 sql 인젝션 공격을 어떻게 방어해야 될 지 알아 보도록 하자.
'IT > 웹해킹' 카테고리의 다른 글
[웹해킹] SQL 인젝션 공격 실습 - High 단계 (0) | 2021.03.09 |
---|---|
[웹해킹] SQL 인젝션 공격 실습 - Medium 단계 (0) | 2020.12.17 |
[웹해킹] SQL 인젝션 공격 실습 - 블라인드 SQL 인젝션 (0) | 2020.12.16 |
[웹해킹] SQL 인젝션 공격 실습 - UNION 공격 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 실습 - 칼럼 갯수 알아내기 (0) | 2020.12.14 |