본문 바로가기

전공 공부/리눅스 보안 실습

웹사이트 세션 스푸핑을 이용한 SQL 유저 데이터 탈취

728x90

이 글은 교육목적으로 작성하는 것으로 절대 타인의 컴퓨터에 공격을 해서는 안됩니다.

범죄 행위이고 처벌을 받을 수 있습니다.

모든 해킹 행위는 자기 자신에게 책임이 있습니다.

 

제 블로그는 불법적인 해킹 행위를 권장하거나 유도하지 않습니다. 오로지 테스트 및 연습 목적으로 읽어주시면 감사하겠습니다.

 

DVWA는 PHP/MySQL 기반 웹 애플리케이션이며 웹 취약점 공격을 테스팅할 수 있는 환경을 줍니다.

 

http://www.dvwa.co.uk/

 

DVWA - Damn Vulnerable Web Application

 

www.dvwa.co.uk

metasploitable에 설치되어 있는 Damn Vulnerable Web App(DVWA)의 SQL injection에서, 스푸핑을 이용해 SQL문을 이용해 데이터베이스 탈취를 해보도록 하겠습니다.

 

1. 스니핑을 이용해서 세션 알아내기

먼지 DVWA Security 레벨을 low로 변경해 주겠습니다.

 

 

 

tcpdump -i eth0 -nn -vv -A tcp port 80 and 192.168.196.142

먼저 스니핑을 위해 칼리 리눅스에서 tcpdump 를 이용해 패킷을 볼 수 있습니다.

- i: 인터페이스 설정(eth0)

-vv: -v 옵션보다 더 많은 정보들을 출력한다.

-nn: 출력시 호스트나 서비스명이 아닌 IP주소와 PORT로 출력한다.

-A: 패킷의 내용을 아스키코드로 출력한다.

 

웹사이트만 스니핑 할 것이기 때문에 tcp port 80으로 설정하였습니다.

192.168.196.142는 DVWA서비스가 실행되어 있는 주소입니다.

 

기본 아이디: amdin  / 패스워드 pwssword 입니다.

 

이제 제3의 컴퓨터에서 DVWA에 접속 후 SQL injection 페이지에서 값을 입력 후 submit을 눌러주면, 서버로 데이터가 전송이 됩니다.

 

 

이때 전송되는 값을 tcpdump가 스니핑을 하는데, 패킷 중에 PHPSESSID라는 값이 있습니다. 이 값은 웹서버에 접속할 때 사용자에게 부여하는 세션 아이디입니다. 

 

실제 제3의 컴퓨터에서 웹사이트에서 F12를 누른 뒤 Application -> Cookies에서 PPSESSID 값을 볼 수 있습니다.

tcpdump로 스니핑 한 값과 일치하는 것을 볼 수 있습니다.

 

 

2. SQLMAP을 이용한 데이터 베이스 정보 알아내기

이제 위에서 알아낸 PHPSESSID 값을 이용해 세션을 속이는 스푸핑이 가능합니다.

 

여기서 주의해야 할 점이 sqlmap으로 PHPSESSID 값을 이용해 데이터베이스 정보를 탈취하기 위해서는 제3의 컴퓨터의 세션이 계속 유지되어 있어야 합니다.

 

sqlmap을 사용하면 손쉽게 SQL의 전체적인 구조를 알아낼 수 있습니다.

-u 옵션을 사용해 파라미터 값으로 tcpdump에서 DVWA 웹사이트로 요청한 URL값을 적어주면 됩니다.

--cookies 에는 PHPSSID 값과 security 값을 적어주면 됩니다.

 

마지막으로 --dbs 옵션을 사용해 데이터베이스 정보를 알 수 있습니다.

 

 

3. SQLMAP을 이용한 테이블 정보 알아내기

 

-D 옵션을 통해 알아낸 데이터베이스 이름을 선택하면 됩니다. 여기에서는 mysql, dvwa를 선택하였습니다.

이제 데이터 베이스 이름을 알아냈으니 --tables 옵션을 주면, 해당 데이터 베이스에 있는 테이블 목록을 볼 수 있습니다.

 

 

왼쪽은 mysql 데이터베이스의 table 구조이고 오른쪽은 dvwa 데이터 베이스의 table 구조입니다.

 

4. SQLMAP을 이용한 유저 정보 알아내기

 

유저 데이터를 탈취하는 것이 목적이므로 -T 옵션으로 users의 테이블을 선택하고 --columns 옵션을 사용해 칼럼을 조회하였습니다.

 

users의 테이블에 담긴 칼럼들을 볼 수 있습니다. 

 

5. SQLMAP을 이용한 유저 정보 추출하기

 

이제 필요한 정보는 user이름들과 password 이므로 해당 Type만 선택하여 파일로 만들겠습니다. 

 

중간에 사전 기반으로 공격할 건지(y), 어떤 사전으로 할 것인지(1), 패스워드 접미사를 쓸 건지 (y)로 선택한 뒤 진행하였습니다.

 

 

결과 값으로 해당 users의 테이블에 있는 모든 칼럼 값들을 추출한 것을 볼 수 있습니다.

특히 password 또한 사전에 저장되어 있는 값들을 통해 hash에서 문자열로 변환된 것을 볼 수 있습니다.

id 1 같은 경우 처음 웹사이트 로그인할 때 입력하였던 아이디(admin)와 패스워드(password)가 일치하는 것을 볼 수 있습니다.

 

 아이디: 1337 / 패스워드: charley로 로그인을 시도해보았습니다.

 

 

실제로 DVWA 웹사이트에 로그인이 되는 것을 확인할 수 있었습니다.

728x90