MSF Pivoting X SocksProxy

최근에 MSF로 Pivoting 환경에서 테스팅이 필요한 경우가 있었습니다. 방법 자체는 어려운게 아니라 그냥 몸에 있는대로 진행하긴 했는데, 생각해보니 블로그에 정리했던 적은 없는 것 같아 간단하게 남겨봅니다.

Pivoting

Metasploit에서 Exploit을 통해 Session을 얻은 이후에 meterpreter session 내부의 autoroute 또는 post/multi/manage/autoroute 를 통해 Pivoting을 진행할 수 있습니다.

참고로 meterpreter의 autoroute 기능은 이제 deprecated 됩니다. 가급적이면 post를 사용합시다.

Pivoting을 구성하면 내부의 원하는 네트워크 대역과 외부를 이어주는 G/W를 만들 수 있고, 외부에 있는 Metasploit에서 내부 사설망에 대한 테스팅을 쉽게 할 수 있도록 지원합니다.

msf6 post(multi/manage/autoroute) > run

[!] SESSION may not be compatible with this module:
[!]  * incompatible session platform: windows
[*] Running module against WIN11-TEST
[*] Searching for subnets to autoroute.
[+] Route added to subnet 169.254.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 172.19.176.0/255.255.240.0 from host's routing table.
[*] Post module execution completed

# 이후 외부에 있는 msfconsole의 기능들을 통해 169.254 대역 등을 대상으로 테스트 시 
# 해당 세션을 G/W 삼아 트래픽을 핸들링하게 됩니다. 서브넷과 넷마스크만 잘 구성해주면 쉽습니다.

다만 기본적인 Pivoting은 Metasploit -> Private Network 로의 통신만을 지원하기 떄문에 MSF의 모듈을 이용해서만 테스트할 수 밖에 없습니다.

Sock Proxy

그래서 이럴 때 사용할 수 있는게 Socket Proxy입니다. auxiliary/server/socks_proxy 를 이용하여 socks4a, socks5에 대한 proxy sever를 구성할 수 있습니다. 제 기억에 예전에는 socks4a 같이 버전별로 별도의 모듈로 있었는데 통합되고 option으로 VERSINO을 받도록 변경되었네요.

msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > show options

Module options (auxiliary/server/socks_proxy):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT  1080             yes       The port to listen on
   VERSION  5                yes       The SOCKS version to use (Accepted: 4a, 5)


   When VERSION is 5:

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   PASSWORD                   no        Proxy password for SOCKS5 listener
   USERNAME                   no        Proxy username for SOCKS5 listener


Auxiliary action:

   Name   Description
   ----   -----------
   Proxy  Run a SOCKS proxy server

Option은 SRVHOST, SRVPORT 정도만 지정해주면 됩니다. SRVHOST는 LISTEN 할 로컬IP를 의미하고 SRVPORT는 로컬 포트를 의미합니다. 실행하면 자동으로 background 처리됩니다.

msf6 auxiliary(server/socks_proxy) > run
[*] Auxiliary module running as background job 4.

이후 1080 포트를 프록시로 경유하는 경우 Metasploit을 proxy 서버로 사용하게 되고 아까 Pivoting을 구성한 상태라면 내부망까지 이어지는 상태가 됩니다.

위와 같은 그림이 되겠죠.

그래서 proxy 옵션을 지원하는 도구들은 아래와 같이 1080 포트를 경유하여 내부 네트워크를 대상으로 테스트할 수 있습니다.

curl -i -k 10.20.30.2:8081
# Timeout

curl -i -k 10.20.30.2:8081 —proxy localhost:1080
# HTTP/2 200
# ....

e.g

curl -i -k 10.20.30.2:8081 —proxy localhost:1080
dalfox http://10.20.30.2:8081 --proxy http://localhost:1080
nuclei -u http://10.20.30.2:8081 -http-proxy http://localhost:1080

Proxy 옵션이 없는 도구는 proxychains를 이용하여 미리 프록시 정보 세팅 후 강제로 프록시를 태워 스캔할 수 있습니다.

proxychains4 your_tool -u http://10.20.30.2:8081