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 |