NPS内网穿透详细案例

admin 2025年5月15日17:52:10评论0 views字数 5699阅读18分59秒阅读模式

免则声明:本公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权转载和其他公众号白名单转载,如需转载,联系作者开白。

文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

NPS工具介绍

NPS工具是一款使用go语言编写的轻量级、功能强大的内网穿透工具。支持TCP、UDP流量转发,支持内网HTTP、SOCKS5代理,同时支持snappy压缩(节省带宽和流量)、站点保护、加密传输、多路复用、header修改等。同时还支持web图形化管理。该工具使用简单,相比于FRP,NPS是图形化界面,因此配置更加简单

[root@ls4jtubcnt opt]#wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz

[root@ls4jtubcnt opt]# mkdir nps

[root@ls4jtubcnt opt]# tar -zxf linux_amd64_server.tar.gz -C  nps/

[root@ls4jtubcnt opt]# cd nps/

[root@ls4jtubcnt nps]# ./nps install                  #执行安装命令

[root@ls4jtubcnt nps]# ./nps  start                #启动NPS,nps start|stop|restart|uninstall|reload

[root@ls4jtubcnt nps]# cd /etc/nps/conf/      #安装后配置文件位于/etc/nps/conf目录下

nps.confg配置文件:

appname = weblogger

#Boot mode(dev|pro)  

指定运行模式(dev|pro)

runmode = dev

#HTTP(S) proxy port, no startup if empty

# http

展开收缩
代理,如果设置为空,则表示忽略

#http_proxy_ip=

#http_proxy_port=

#https_proxy_port=

#https_just_proxy=

#default https certificate setting

指明https缺省证书文件位置

https_default_cert_file=conf/server.pem

https_default_key_file=conf/server.key

##bridge

客户端和服务端之间所用的通信协议,端口和服务端绑定ip

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=Pksfy2312df70i5osc

#Traffic data persistence interval(minute)

#Ignorance means no persistence

服务端流量数据持久化间隔,单位分钟,忽略表示不持久化

flow_store_interval=3

# log level LevelEmergency->0  LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7

输出运行日志,如下,写到当前目录下的weblogger.log文件中,7表示调试模式

log_level=7

log_path=weblogger.log   #生成的日志文件路径为:/weblogger.log

#Whether to restrict IP access, true or false or ignore

是否限制ip访问,truefalse或忽略

#ip_limit=true

#p2p

#p2p_ip=127.0.0.1

#p2p_port=6000

#web

# web 控制面板配置,包括域名,访问端口和登录账号密码,域名访问需要使用反向代理进行配置

web_host=login.weblogger.com

web_username=backlion

web_password=bks.net@#125

web_port = 8081

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 web api密钥,auth_crypt_key表示获取服务端authKey时的aes加密密钥,16

#auth_key=ATi39sdp2d

auth_crypt_key =AmSo173adsPEWRSZ

#allow_ports=9001-9009,10001,11000-12000

为防止nps服务端端口滥用,可限制可开启的端口,忽略或者不填表示端口不受限制

#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

# nps 服务端支持在web上显示和统计服务器相关信息,但默认一些统计图表是关闭的,可以通过此选项打开

system_info_display=true

#cache

# http 缓存设置,保持默认即可

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

服务端启动后会首先监听两个端口,一个是web面板访问端口[此处为8081 ],另一个就是nps客户端和服务端的通信端口[此处为9099 ]

[root@ls4jtubcnt conf]# netstat  -tulnp

NPS内网穿透详细案例

访问:http://vps ip:8081/,并输入以上/etc/nps/conf/nps.confg配置文件下设置的用户名和密码

NPS内网穿透详细案例

如下,便是登录成功后,整个nps web控制面板的实际效果图,因为当前暂时还没有任何客户端在线,所以才全部显示为

NPS内网穿透详细案例

客户端,新建一个客户端的链接方式(注意此处的这个用户名和密码,只有在进行socks5http代理时才会用到)

NPS内网穿透详细案例

以下是客户端创建成功后的样子,特别注意下这个id,后面的所有隧道代理和socks5代理都会基于这个id来创建

NPS内网穿透详细案例

客户端下执行命令:.

/npc -server=106.13.218.47:8024 -vkey=yxznk7q02rirabtz -type=tcp

NPS内网穿透详细案例

发现客户端已在线,表示已与服务器端进行了连接

NPS内网穿透详细案例

tcp隧道

适用范围:ssh、远程桌面,数据库等tcp连接场景

假设场景:想通过访问公网服务器1.1.1.1的2022端口,连接内网机器192.168.126.128:的22端口,实现ssh连接

使用步骤

  • 在刚才创建的客户端隧道管理中添加一条tcp隧道,填写监听的端口(2022)、内网目标ip和目标端口(192.168.126.128:22),保存
NPS内网穿透详细案例
  • 访问公网服务器ip(1.1.1.1),填写的监听端口(2022),相当于访问内网ip(192.168.126.128):目标端口(22)
NPS内网穿透详细案例

udp隧道

适用范围:内网dns解析等udp连接场景

假设场景:内网有一台dns(10.1.50.102:53),在非内网环境下想使用该dns,公网服务器为1.1.1.1

使用步骤

  • 在刚才创建的客户端的隧道管理中添加一条udp隧道,填写监听的端口(53)、内网目标ip和目标端口(10.1.50.102:53),保存。
  • 修改需要使用的dns地址为1.1.1.1,则相当于使用10.1.50.102作为dns服务器

socks5代理

适用范围:在外网环境下如同使用vpn一样访问内网设备或者资源

假设场景:想将公网服务器1.1.1.1的3538端口作为socks5代理,达到访问内网任意设备或者资源的效果

使用步骤

  • 在刚才创建的客户端隧道管理中添加一条socks5代理,填写监听的端口(3538),保存
NPS内网穿透详细案例
  • 在外网环境的本机配置socks5代理(例如使用proxifier进行全局代理),ip为公网服务器ip(1.1.1.1),端口为填写的监听端口(3438),即可畅享内网了

添加代理服务器

菜单栏点击Proxy Servers图标—add,这里添加socks代理,填写socks服务端的ip和端口[一定要记得此处的代理是有账号密码的,也就是我们开始创建客户端配置时设置的那个账号密码]

NPS内网穿透详细案例
NPS内网穿透详细案例

单击Proxification Rules图标—add,这里设置如果访问192.168.126.* 目标内网段,这个ip段则走socks5代理

NPS内网穿透详细案例

勾选我们添加的代理规则,默认的代理规勾选为Direct!!!记得

NPS内网穿透详细案例

 这样我们就能直接访问目标内网的机器,像在本地一样开burp做渗透测试

NPS内网穿透详细案例

或者使用SocksCap64进行全局代理socks5

NPS内网穿透详细案例
NPS内网穿透详细案例

注意经过socks5代理,当收到socks5数据包时socket已经是accept状态。表现是扫描端口全open,建立连接后短时间关闭。若想同内网表现一致,建议远程连接一台设备。

http正向代理

适用范围:在外网环境下使用http正向代理访问内网站点

假设场景:想将公网服务器1.1.1.1的9999端口作为http代理,访问内网网站

使用步骤

  • 在刚才创建的客户端隧道管理中添加一条http代理,填写监听的端口(9999),保存。
NPS内网穿透详细案例
  • 在外网环境的本机配置http代理,ip为公网服务器ip(1.1.1.1),端口为填写的监听端口(9999),即可访问了
NPS内网穿透详细案例
NPS内网穿透详细案例

注意:对于私密代理与p2p,除了统一配置的客户端和服务端,还需要一个客户端作为访问端提供一个端口来访问

私密代理

适用范围:无需占用多余的端口、安全性要求较高可以防止其他人连接的tcp服务,例如ssh。

假设场景:无需新增多的端口实现访问内网服务器10.1.50.2的22端口

使用步骤

  • 在刚才创建的客户端中添加一条私密代理,并设置唯一密钥secrettest和内网目标10.1.50.2:22
  • 在需要连接ssh的机器上以执行命令
./npc -server=1.1.1.1:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret

如需指定本地端口可加参数-local_port=xx,默认为2000

注意:password为web管理上添加的唯一密钥,具体命令可查看web管理上的命令提示

假设10.1.50.2用户名为root,现在执行ssh -p 2000 [email protected]即可访问ssh

p2p服务

适用范围:大流量传输场景,流量不经过公网服务器,但是由于p2p穿透和nat类型关系较大,不保证100%成功,支持大部分nat类型。nat类型检测

假设场景:

想通过访问使用端机器(访问端,也就是本机)的2000端口---->访问到内网机器 10.2.50.2的22端口

使用步骤

  • nps.conf中设置p2p_ip(nps服务器ip)和p2p_port(nps服务器udp端口)

    注:若p2p_port设置为6000,请在防火墙开放6000~6002(额外添加2个端口)udp端口

  • 在刚才刚才创建的客户端中添加一条p2p代理,并设置唯一密钥p2pssh
  • 在使用端机器(本机)执行命令
./npc -server=1.1.1.1:8024 -vkey=123 -password=p2pssh -target=10.2.50.2:22Copy to clipboardErrorCopied

如需指定本地端口可加参数-local_port=xx,默认为2000

注意:password为web管理上添加的唯一密钥,具体命令可查看web管理上的命令提示

假设内网机器为10.2.50.2的ssh用户名为root,现在在本机上执行ssh -p 2000 [email protected]即可访问机器2的ssh,如果是网站在浏览器访问127.0.0.1:2000端口即可。

原文始发于微信公众号(渗透测试研究中心):NPS内网穿透详细案例

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月15日17:52:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   NPS内网穿透详细案例https://cn-sec.com/archives/4049026.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息