[Tip&Trick] SSH-Tunnel Socks5 cho host không thể truy cập internet

Thời gian gần đây, mình có nhập triển khai hệ thống cho một bên, nhưng có một vấn đề ở chỗ các server mà mình được chuẩn bị sẵn thì lại không được NAT ra internet.

Vì vậy mình đã suy nghĩ làm sao có thể mở Proxy từ máy mình qua server để có thể truy cập internet cho server. Sau một buổi tìm kiếm và thử nghiệm, mình đã rút ra được cách thiết lập và giải quyết một số lỗi nhất định.
Đây cũng là cách thức mà các hacker sử dụng host trung gian bên trong hệ thống của victim để đi sâu vào hơn nữa, cũng như dò quét, khai thác tối đa.

1. Thiết lập SSH-Tunnel Reverse cho apt (apt-get) và cài đặt proxychains

Đầu tiên, thiết lập tunnel ở máy của bạn, nếu bạn xài OpenSSH thì đơn giản thôi. Chỉ cần chạy lệnh remote SSH thêm param vào là được: 
  • ssh -R<local_port>:<hostname>:<remote_port> <user>@<hostname_ssh_remote>
Ví dụ: mình muốn tunnel repo us.archive.ubuntu.com qua VPS thì mình sẽ chạy lệnh như này:
  • ssh -R9050:us.archive.ubuntu.com:80 n3r0@192.168.100.100
Lúc này, bạn đã mở thành công tunnel từ host của bạn đến repo us.archive.ubuntu.com, giờ mình sẽ phải thiết lập cho apt đi qua proxy này là được:
  • echo 'Arrange::http::Proxy "http://localhost:<local_port>";'|sudo tee /etc/apt/apt.conf.d/95proxies
Trong đó, local_port chính là local_port mà bạn đã nhập vào ở lệnh remote SSH, như ở đây mình xài là port 9050 thì mình sẽ chạy lệnh như sau:
  • echo 'Arrange::http::Proxy "http://localhost:9050";'|sudo tee /etc/apt/apt.conf.d/95proxies
Sau đó, cài đặt proxychains bằng lệnh:
  • sudo apt update && sudo apt install proxychains -y

 Lưu ý:

  • Bạn có thể dùng cách này để cài đặt các application khác thông qua apt
  • Cách này chỉ khả dụng đối với các repo không đòi hỏi cấu hình bảo mật như HTTP, còn lại như HTTPS(TLS) thì không thể hoạt động được, nên mình mới dùng đến proxychains để proxy qua socks5.
  • Sau khi cài xong thì bạn vào lại /etc/apt/apt.conf.d/95proxies và comment dòng "Arrange" lại nhé. Để apt sẽ đi qua proxychains

2. Cấu hình SSH server và proxychains trên VPS

Sau khi đã cài xong proxychains, mình tiến hành cấu hình lại SSH server và proxychains.
Đầu tiên, để cấu hình SSH server, mình sử dụng lệnh:
  • sudo nano /etc/ssh/sshd_config
Tìm đến dòng GatewayPorts và sửa giá trị thành yes, nếu có dấu # (comment) thì xóa đi.

Sau đó, lưu lại và khởi động lại SSH server bằng lệnh:
  • sudo systemctl restart sshd.service
và kiểm tra lại bằng lệnh systemctl status sshd.service, active hiện màu xanh như hình dưới là thành công

Giờ mình sẽ tiếp tục cấu hình cho proxychains, để cấu hình port và protocol tunnel, mình sẽ chỉnh sửa file /etc/proxychains.conf bằng lệnh:
  • sudo nano /etc/proxychains.conf
Di chuyển đến cuối file và nhập vào như sau:
  • socks5    127.0.0.1    <local_port>
với local_port ở đây là port mà bạn sẽ tunnel vào, ví dụ: mình tunnel qua port 9050 thì mình sẽ nhập vào như hình dưới.

Sau đó, lưu lại và thoát phiên SSH khỏi client.
Note:
    - local_port bạn nhập vào nên tránh trùng port nào đó đang bind trong localhost của bạn
    - để kiểm tra có local_port bạn mở có trùng với port nào không thì dùng lệnh netstat -a

3. SSH-Tunnel lại vào Client và tận hưởng

Sau khi đã config thành công, mình remote lại vào client bằng OpenSSH:
  • ssh -R<local_port> <user>@<hostname>
với local_port local_port mà bạn đã config vào ở proxychains, ví dụ: mình remote đến host với local_port là 9050 và username là n3r0, hostname là 192.168.100.100:
  • ssh -R9050 n3r0@192.168.100.100
Cách tunnel này là Reverse SSH-Tunnel Dynamic Port cho bạn nào muốn tìm hiểu thêm. Sau khi đã vào được host, chạy thử lệnh:
  • sudo proxychains apt update
nếu ra được như này thì bạn đã thành công, còn không được thì restart lại sshd và thoát ra, vào lại ssh nhé
nếu các chain đều ok và phân giải được IP của Repo thì thành công

Note:
    - mặc định thì proxychains nó sẽ phân giải domain thông qua 4.2.2.2, nếu như bạn gặp vấn đề về DNS này thì ở thể thay đổi bằng cách vào /usr/lib/proxychains3/proxyresolv vào sửa lại DNS là xong
    - có thể bạn sẽ gặp phải lỗi LD_PRELOAD, đây là cách sửa proxychains LD_PRELOAD cannot be preloaded

Comments

Popular posts from this blog

[Write-up] HTTP - Hố bug nho nhỏ

[Write-up] SQL injection 💉 - Union-based ⌨