터널링이란.
* 해당 기술은 출발지와 목적지만 사용하고 그 중간단계에서는 사용하지 않는 프로토콜을 전송하여 서로간의 통신이 가능하게끔 만들어 줌.
* 터널링의 핵심은 캡슐화이다.
- (A) HOST 와 (B) HOST 간 통신이 어떤 프로토콜을 사용하던 간에 일단 터널이 구성되면 그 안에 원래 데이터는 캡슐화 되어 본 데이터가 무엇인가는 중요하지 않음.
SSH 터널링의 예시 (PUTTY 기준)
* 출발지가 127.0.0.1 IP에 3388 PORT를 사용하며 목적지는 192.168.0.31:3389인 터널을 설정한다.
* 세션탭에서 192.168.0.31 IP로 SSH 로그인하여 연결(터널)을 수립한다.
* 로컬 PC에서 원격데스크탑 서비스를 키고 연결 주소에 127.0.0.1:3388 을 입력한다.
* 위에서 입력한 127.0.0.1:3388 의 주소로는 캡슐화 되어 미리 연결되어 있는 터널을 통해 원격 데스크탑 프로토콜이 전송되어 목적지까지 도달한다.
* 터널을 통하여 목적지까지 도달한 원격데스크탑 프로토콜은 정상실행되고 터널 내부에서 지속적으로 연결 수립되어 원격 데스크탑 사용이 가능하다.
DNS 터널링 (dnscat2 사용)
관련 주소 : https://github.com/iagox86/dnscat2
dnscat2 역시 http 터널링과 같이 서버와 클라이언트로 구성되어 있다.
실습에는 칼리리눅스 2대를 사용하고 git 명령어를 사용하여 다운로드 및 설치를 진행한다.
dnscat2 CLIENT 설치
1. git clone https://github.com/iagox86/dnscat2.git 명령어를 사용하여 다운로드
2. 다운로드 경로로 이동 후 client 설치
3. 클라이언트 정상 설치 확인 (현재는 설정이 끝나지 않았기에 WARNING 메시지가 뜨는게 정상이다.)
4. A pc에서 클라이언트 설치 후 B pc에서 서버 설치를 진행한다.
dnscat2 server 설치 (root 권한으로 설치진행해야 원활하게 진행 가능하다.)
1. client 와 동일하게 git clone을 사용하여 다운로드 한다.
2. dnscat2/server 디렉터리로 이동 후 아래와 같이 설치를 진행한다.
3. 설치 후 아래 명령어를 사용하여 dnscat2.rb 스크립트를 실행한다. 스크립트 실행 후 엔터를 누르면 "dnscat2>"
프롬프트 확인이 가능하다.
TCPDUMP 명령어
tcpdump -vvv -s 0 -l -n port 53
클라이언트 접속 명령어
$ dnscat --dns=server=IPADDRESS,port=53
서버 명령어
세션확인 : sessions
세션사용 : session -i 번호
dnscat2 연결 진행
1. [서버] dnscat2 서버를 실행시킨다.
2. [서버] 서버 실행 후 53번 포트 서비스를 확인할 수 있다
3.[클라이언트] 서버쪽으로 dnscat을 사용하여 접근한다. 명령어는 다음과 같으며 연결 후 "Session established!" 메시지 확인이 가능하다
4.[서버] 연결 후 서버에서 tcpdump를 사용하여 관련 패킷을 확인할 수 있으며 dnscat2 서버 터미널에서 "New Window created" 를 확인할 수 있다.
* tcmdump 명령어 : tcpdump -vvv -s 0 -l -n port 53
5. 서버에서 help 명령어로 사용가능 명령어를 확인할 수 있으며 sessions 명령어를 사용하여 현재 연결되어있는 세션을 볼 수 있다.
6. session -i 번호 명령어를 사용하여 해당 커맨드(세션)로 접근이 가능하다.
7, 터널생성전 shell 명령어를 사용하여 쉘 프롬프트에 접근을 시도해본다. shell 명령어를 입력하면 새로운 윈도우(세션)이 생성된다.
8. Ctrl + z 키를 입력하여 초반에 봤던 Main Window로 화면을 이동하고 session -i 2 명령어를 사용하여 (7)에서 생성한 세션으로 이동한다.
세션 이동 후 아래와 같이 명령어를 입력해보면 정상적인 쉘프롬프트 사용이 가능한것을 확인할 수 있다.
(이어서_1) 특정 포트를 위한 터널 생성(SSH)
1. [서버] 목적지가 192.168.142.130:22(클라이언트) 인 터널을 생성한다.
2. [서버] SSH 연결을 미리 생성한 터널로 시도하면 정상적으로 로그인이 가능하다.
3. [서버] 연결이 된 경우 서버에선 다음과 같이 로그를 출력하며 WARNING의 경우는 SSH 서비스가 비활성화 되어있었을때 나온 경고 로그이다.
(이어서_2) 특정 포트를 위한 터널 생성(3306)
1. [클라이언트] mysql 서비스를 실행하고 서비스 포트 활성화를 확인한다.
2. [클라이언트] DB 접속을 확인한다.
3. [서버] 서버에서 클라이언트 쪽으로 디비 연결을 시도하지만 현재 로컬 IP로만 접속이 가능한 상태이기에 접속이 불가능하다.
4. [클라이언트] 서버 활성화 후 클라이언트 연결을 한다
5. [서버]다시 서버측으로 돌아와 listen 명령어를 사용하여 터널을 활성화한다. tunnels 명령어를 사용하여 현재 리슨중인 포트를 확인할 수 있다.
* listen [lhost:]lport rhost:rport
6. [서버] 생성된 터널로 연결을 시도하자 정상적으로 접근 및 로그인이 가능한것을 확인할 수 있다.
터널링 사용 시기 및 특징
[-] 개인적으로 생각하는 모의해킹시 터널링 사용시기 및 특징은 다음과 같다.
[공통]
[*] 방화벽 등 기타 솔루션 및 정책에 의해 아웃바운드, 인바운드 포트가 지정되어 있는 경우
[SSH TUNNEL]
[*] 암호화 통신이 필요한 경우.
[*] 조건만 맞는다면 가장 편하게 접근이 가능한듯.
[HTTP TUNNEL]
[*] 가장 열려있을 확률이 높은 포트, 단 불안정하다고 한다.
[*] 개인적인 판단으로는 어떻게 보면 서버 파일(웹쉘)만 올리면 완료이기에 터널 생성에 제일 편한듯하다.
[DNS TUNNEL] - dnscat2 사용시
[*] 웹쉘을 올렸는데 특정 상황에 의해 대화형 쉘이 불가능하고 단방향 쉘만 가능한 경우
- dnscat 업로드 후 권한 부여 후 서버측으로 연결시도.
[*] ssh가 사용불가능한데 암호화 통신이 필요한 경우.
- dnscat은 암호화 통신을 사용한다고 설명되어있다. 단, 검증은 이루어지지 않았기에 전적인 신뢰는 금한다 나와있다.
[ICMP TUNNEL]
[*] root 권한이 필요하다고 한다.(안해봄..)
'ETC > PT' 카테고리의 다른 글
20180805_터널링_카테고리_1 (0) | 2018.08.05 |
---|