壹 工具说明
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
1.2 优点
a.图形化
b.多协议
1.3 缺点
a.容易暴露自己
b.容易掉线
贰 工具适用场景
a.做微信公众号开发、小程序开发等—-> 域名代理模式
b.想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,—-> tcp代理模式
c.在非内网环境下使用内网dns,或者需要通过udp访问内网机器等—-> udp代理模式
d.在外网使用HTTP代理访问内网站点—-> http代理模式
e.搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备—-> socks5代理模式
叁 安装说明
安装路径:releases
非常重要:
a、大家尽量使用最新版本,同时使用的版本必须一致,有些高低版本不兼容,会出一些问题;
b、工具与使用的系统架构环境必须一致;
c、挂上代理后,如果在npc.conf
文件里面存在配置一定要删除该文件,不然会暴露自己;
序列 | 架构 |
---|---|
386 | X86架构 |
amd64 | amd架构 |
arm | arm架构 |
arm64 | 64位arm架构 |
mips | mips架构 |
mips64 | 64位mips架构 |
mipsle | mipsle架构 |
mips64le | 64位mipsle架构 |
系统的架构可以看这个博客:如何查看linux系统的体系结构
uname -a或者arch或者file /bin/bash
// 存在aarch64,就是ARM架构;
// 存在x86_64,就是X86架构;
肆 工具参数说明
4.1 服务端
- 服务端配置文件:
nps/conf/nps.conf
名称 | 含义 |
---|---|
web_port | web管理端口 |
web_password | web界面管理密码 |
web_username | web界面管理账号 |
web_base_url | web管理主路径,用于将web管理置于代理子路径后面 |
bridge_port | 服务端客户端通信端口 |
https_proxy_port | 域名代理https代理监听端口 |
http_proxy_port | 域名代理http代理监听端口 |
auth_key | web api密钥 |
bridge_type | 客户端与服务端连接方式kcp或tcp |
public_vkey | 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式 |
ip_limit | 是否限制ip访问,true或false或忽略 |
flow_store_interval | 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化 |
log_level | 日志输出级别 |
auth_crypt_key | 获取服务端authKey时的aes加密密钥,16位 |
p2p_ip | 服务端Ip,使用p2p模式必填 |
p2p_port | p2p模式开启的udp端口 |
pprof_ip | debug pprof 服务端ip |
pprof_port | debug pprof 端口 |
disconnect_timeout | 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins |
服务端例子如下:
# 工具名字
appname = nps
#Boot mode(dev|pro)
runmode = dev
# HTTP(S)代理端口
#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
# 设置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
# 公用密码,客户端可以使用该密码连接到服务器,连接后,服务器将能够根据自己的配置文件打开相关端口并解析相关域名。
# 就是客户端连接时使用的key,或者可以在web后台配置,web后台的vkey权限高于这个
public_vkey=123
# 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化
#flow_store_interval=1
# 日志输出级别
# 紧急-0、警报-1、严重-2、错误-3、警告-4、通知-5、信息-6、调试-7
log_level=7
# 输出日志的地址
#log_path=nps.log
# 是否限制ip访问,true或false或忽略
#ip_limit=true
# p2p模式
# 服务端Ip,使用p2p模式必填
#p2p_ip=127.0.0.1
# p2p模式开启的端口
#p2p_port=6000
# web后台管理
# web地址
web_host=a.o.com
# web用户名,修改
web_username=admin
# web密码,修改
web_password=123
# 默认web端口
web_port = 8080
web_ip=0.0.0.0
# web管理主路径,用于将web管理置于代理子路径后面,例如:web_base_url=/nps,即:http://host/nps
# web_base_url=
web_open_ssl=false
web_cert_file=conf/server.pem
web_key_file=conf/server.key
# Web API 未经身份验证的IP地址(身份验证密钥的长度必须为16)
#auth_key=test
# 获取服务端authKey时的aes加密密钥,16位
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
# debug模式
# debug pprof 服务端ip
#pprof_ip=0.0.0.0
# debug pprof 服务端端口
#pprof_port=9999
# 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins
disconnect_timeout=60
4.2 客户端
- 客户端配置文件:
nps/conf/nps.conf
项 | 含义 |
---|---|
server_addr | 服务端ip/域名:port |
conn_type | 与服务端通信模式(tcp或kcp) |
vkey | 服务端配置文件中的密钥(非web) |
username | socks5或http(s)密码保护用户名(可忽略) |
password | socks5或http(s)密码保护密码(可忽略) |
compress | 是否压缩传输(true或false或忽略) |
crypt | 是否加密传输(true或false或忽略) |
rate_limit | 速度限制,可忽略 |
flow_limit | 流量限制,可忽略 |
remark | 客户端备注,可忽略 |
max_conn | 最大连接数,可忽略 |
pprof_addr | debug pprof ip:port |
官方使用文章:链接在此
伍 工具使用
5.1 服务端
服务端一般配置在攻击机上。使用工具分为Windows和Linux系统:
- Windows:管理员身份运行cmd,进入安装目录执行
nps.exe install
,在运行nps.exe start
,不过我实验的时候是直接双击运行的。 - Linux:进入工具文件夹,执行
sudo ./nps install
,在执行sudo nps start
,停止和删除是sudo nps uninstall
,sudo nps stop
。
a.访问服务端ip:web服务端口(默认为8080)
b.使用用户名和密码登陆(默认admin/123,正式使用一定要更改)
c.创建客户端
5.2 客户端
跳板机或者受害机一般配置客户端。也分两种系统:
- Windows:
npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
- Linux:
sudo ./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
可以试试nohup ./npc -server=(ip:port) -vkey=(web界面中显示的密钥) > file.log 2>&1 &
或者
或者在web后台管理可以查看以上命令:cd $(dirname $0) pid=$(pgrep npc) if [ -z "$pid" ]; then nohup ./npc -server=(ip:port) vkey=(web界面中显示的密钥) -type=tcp >/dev/null 2>&1 & fi
启动服务后,日志文件Windows位于当前目录下,Linux位于/var/log/npc.log
。不过可以修改配置设置log的存放位置。
陆 例子
6.1 端口转发
Windows服务端IP地址:192.168.91.136
Linux客户端IP地址: 192.168.91.138、 192.168.127.132
- Windows服务端
服务端配置文件于参数的配置文件一样:nps.conf
双击点击nps.exe文件,如下:
在浏览器中登录127.0.0.1:8080
,用户名密码:admin\123
新增客户端:
以下就是新增加的客户端,其中ID下面新建隧道时候用:
接下来点击隧道,新建隧道:
在这里ID一定要配置与前面客户端ID一样,不然会输出没有:
可以看到增加了一个隧道,并且选择加号可以看到详细信息:
客户端还没有连接,可以看到客户端属于离线(信息中的IP要改变):
- Linux客户端
将对应的nps客户端文件上传到跳板机中,并且将npc
文件增加x权限:chmod +x npc
然后执行./npc.exe -server=服务器IP:bridge端口 -vkey=nps的Web后台唯一验证密钥 -type=tcp
命令,成功运行:
在服务端nps的web后台可以看到:
- 配置Proxifier
不可以服务受害机的192.168.127.0网段:
配置Proxifier
配置Proxifier servers
配置Proxifier rules
访问成功!
其实在nps代理工具中,以上设置可以访问22端口ssh。
6.2 端口映射
Windows办公机IP地址:192.168.106.184
kali服务端IP地址:192.168.106.187
Linux客户端IP地址: 192.168.106.202、 192.168.91.139
首先我们使用Windows办公机ssh连接:192.168.106.202:2222
,不通,说明没有映射!
- Windows办公机进入kali的web后台
服务端配置文件于参数的配置文件一样:nps.conf
双击点击nps.exe文件,如下:
在浏览器中登录192.168.187:8080
,用户名密码:admin\123
新增客户端:
以下就是新增加的客户端,其中ID下面新建隧道时候用:
接下来点击隧道,新建隧道:
上面基本上和端口转发一样,到了这里我们选择的是tcp隧道:
可以看到增加了一个隧道,并且选择加号可以看到详细信息:
- Linux客户端
将对应的nps客户端文件上传到跳板机中,并且将npc
文件增加x权限:chmod +x npc
然后执行./npc.exe -server=服务器IP:bridge端口 -vkey=nps的Web后台唯一验证密钥 -type=tcp
命令,成功运行:
在服务端nps的web后台可以看到:
此时不需要配置Proxifier,直接用办公机ssh连接:192.168.106.202:2222
,连同说明成功!