NPS內網穿透工具使用詳解
0x01 前言
在紅隊HW中通過前期的打點獲得shell后通常下一步就是對內網進行橫向,獲得shell進想要行橫向的前提是我們必須有代理可以訪問內網中的資產,這時候我們就需要通過拿到shell的那臺機器權限,在此臺機上傳代理工具進行配置搭建內網代理,目的達到內網出網的效果,使我們能夠進行下一步的內網橫向滲透。在hw中經常用到的代理工具有很多,根據不同之需和個人不同的使用習慣選擇不同工具進行使用,本文主要對NPS這款代理工具進行介紹。
0x02 簡介
nps是一款輕量級、高性能、功能強大的內網穿透代理服務器。目前支持tcp、udp流量轉發,可支持任何tcp、udp上層協議(訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面,內網dns解析等等……),此外還支持內網http代理、內網socks5代理、p2p等,并帶有功能強大的web管理端。
工具獲取:https://github.com/ehang-io/nps
特點:
- 支持多種協議,兼容幾乎所有常用協議,例如tcp,udp,http(s),socks5,p2p,http代理…
- 全面的平臺兼容性(Linux,Windows,MacOS,Synology等),僅支持將安裝作為系統服務進行。
- 全面控制,允許客戶端和服務器控制。
- Https集成,支持將后端代理和Web服務轉換為https,并支持多個證書。
- 只需在Web ui上進行簡單配置即可完成大多數要求。
- 完整的信息顯示,例如流量,系統信息,實時帶寬,客戶端版本等。
- 強大的擴展功能,一切可用(緩存,壓縮,加密,流量限制,帶寬限制,端口重用等)
- 域名解析具有諸如自定義標題,404頁面配置,主機修改,站點保護,URL路由和全景解析之類的功能。
- 服務器上的多用戶和用戶注冊支持。
0x03 實驗環境
NPS代理需要借助VPS進行中轉,首先我們要根據VPS的系統和內網客戶端系統下載對應的nps程序。這里我使用騰訊云的VPS作為服務端,系統為Ubuntu 18.04,內網分別采用VMware中centOS 7和Windows 7進行模擬,將內網代理到本地。
環境模擬1-客戶端配置文件模式
環境拓撲:

服務端部署
根據vps的系統下載服務端程序并上傳至vps,本文中使用的騰訊云Ubuntu18.04作為vps下載使用了安裝包linux_amd64_server.tar.gz

解壓文件包結構如下:
linux_amd64_server/ - conf ##配置文件目錄 - web ##web文件目錄 - nps ##nps運行文件
進入conf目錄,可編輯nps.conf配置文件對部分選項進行配置,默認運行不需要進行任何配置即可運行
默認配置運行nps服務端啟動會占用80,8080,8024端口,可根據需求對配置進行修改。
appname = nps #Boot mode(dev|pro) #啟動模式 runmode = dev #HTTP(S) proxy port, no startup if empty #HTTP(S)代理端口,如果為空則不啟動 http_proxy_ip=0.0.0.0 http_proxy_port=8081 #http監聽端口,默認80 https_proxy_port=443 https_just_proxy=true #default https certificate setting #默認HTTPS證書設置 https_default_cert_file=conf/server.pem https_default_key_file=conf/server.key ##bridge ##橋接 bridge_type=tcp bridge_port=8024 ##客戶端與服務端連接端口 bridge_ip=0.0.0.0 # Public password, which clients can use to connect to the server # 公共密碼,客戶端可以使用它連接到服務器 # After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file. # 連接完成后,服務器就可以打開相關端口,根據自己的配置文件解析相關域名。 public_vkey=123 #Traffic data persistence interval(minute) #流量數據持續時間間隔(分鐘) #Ignorance means no persistence #flow_store_interval=1 # log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7 # 日志等級設置 log_level=7 #log_path=nps.log #Whether to restrict IP access, true or false or ignore #是否限制IP訪問,true、false或ignore #ip_limit=true #p2p代理 #p2p_ip=127.0.0.1 #p2p_port=6000 #web web_host= ##web管理端登錄地址URL web_username=admin ##web管理端登錄名 web_password=123 ##web管理端登錄密碼(注:正式環境建議更改) web_port = 8080 ##web管理端訪問端口 web_ip=0.0.0.0 ##web管理端登錄地址默認0.0.0.0不需要修改 web_base_url= ##管理端web路徑,默認不需要指定 web_open_ssl=false #管理端是否開啟ssl web_cert_file=conf/server.pem web_key_file=conf/server.key # if web under proxy use sub path. like http://host/nps need this. #web_base_url=/nps #Web API unauthenticated IP address(the len of auth_crypt_key must be 16) #Remove comments if needed #auth_key=test auth_crypt_key =1234567812345678 #allow_ports=9001-9009,10001,11000-12000 #Web management multi-user login #Web管理多用戶登錄 allow_user_login=false allow_user_register=false allow_user_change_username=false #extension allow_flow_limit=false allow_rate_limit=false allow_tunnel_num_limit=false allow_local_proxy=false allow_connection_num_limit=false allow_multi_ip=false system_info_display=false #cache http_cache=false http_cache_length=100 #get origin ip http_add_origin_header=false #pprof debug options #pprof_ip=0.0.0.0 #pprof_port=9999 #client disconnect timeout #客戶端斷開連接超時 disconnect_timeout=60
運行服務端 ./nps

訪問服務端


2.客戶端部署
客戶端使用虛擬機win7模擬內網,下載對應版本客戶端程序windows_amd64_client.tar.gz上傳至內網主機

解壓文件包結構如下:
- conf #客戶端配置文件夾 - npc.exe #客戶端運行程序
下載好客戶端程序后解壓壓縮包,在客戶端配置文件夾conf中找到npc.conf配置文件進行編輯。
這里我們使用客戶端配置文件模式將客戶端內網3389映射到公網vps43389端口實現遠程訪問內網主機。
3.客戶端詳細配置
在配置文件中將[common]和[tcp]之外的參數項刪除,本次通過TCP代理實現內網3389端口映射,配置如下:
[common] server_addr=1.1.1.1:8024 ## 服務端vps ip/域名:port conn_type=tcp ## 通信模式與服務端配置bridge中bridge_type=tcp設為一致 vkey=w4c7qokkqsfqzxeg ## 端配置文件中的服務密鑰,手動指定 auto_reconnection=true ## 斷線重連 max_conn=1000 flow_limit=1000 rate_limit=1000 basic_username=11 ## 代理認證用戶名 basic_password=3 ## 代理認證密碼 web_username=user web_password=1234 crypt=true ## 加密傳輸 compress=true ## 壓縮傳輸 #pprof_addr=0.0.0.0:9999 disconnect_timeout=60 [tcp] mode=tcp target_addr=192.168.138.135:3389 ##內網服務地址 ip:port server_port=43389 ##映射到vps端口

4.建立連接
登錄服務端web控臺,在“客戶端-客戶端列表”添加新增

添加設置如下圖所示,注意:basic用戶名和密碼需與上文客戶端配置中basic_username/basic_password一致、唯一驗證秘鑰有客戶端配置中vkey一致。

保存后,繼續新建連接隧道

在隧道列表中新增

設置代理模式、服務端口和內網地址

完成如上配置后,在客戶端運行npc.exe

訪問測試連接成功


通過客戶端配置文件進行連接的方式需要修改配置文件的相關參數項,上文模擬中介紹了通過TCP代理內網3389的方式,在實際使用需求中對于其他代理模式配置大同小異,只需要在客戶端配置選項中保留需要使用的代理模式參數進行配置,刪除其他模式參數,在web管理端新建隧道選擇相對應的代理模式即可。其他代理模式詳細配置不再詳細描述。

環境模擬2-客戶端無配置文件模式
環境拓撲:

1.服務端部署
服務端的部署與上文相同不再重復說明。
在服務端web管理新建一個客戶端連接。

填寫新建參數,選擇不通過客戶端配置文件連接

新建完成后點擊列表中的“+”號展開詳情

在詳情中給出客戶端連接命令,注意這里給出的命令為linux運行命令,如果客戶端使用Windows客戶端時運行npc.exe
./npc -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp ##linux npc.exe -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp ##windows
2.客戶端部署
下載客戶端對應的版本

上傳至客戶端進行解壓
tar -zxvf linux_amd64_client.tar.gz
解壓后不需要對配置文件進行修改。
3.建立連接
在客戶端執行連接命令
./npc -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp

刷新web管理頁面查看連接成功

新建隧道設置代理模式使用TCP代理,設置服務端映射端口,內網ip服務端口


配置完成后本地使用vpsip映射端口訪問內網ssh進行測試,如下圖代理成功


其他代理模式設置在新建隧道時選擇進行配置即可,不再一一列舉
0x04 總結
使用nps時需要注意的問題:服務端默認配置啟用了8024、80、443端口,如果端口沖突將導致無法啟動,請注意修改配置。注意檢查安全組防火墻規則,在nps使用過程中放相應的端口。
nps代理工具的部署使用配置相對于其他代理工具來說操作簡單,nps服務端支持多客戶端連接能夠實時統計流量情況,通過web管理端更友好的管理。