nps内网穿透工具学习

nps

nps简介

nps也是go语言编写,是一款强大的内网穿透工具。同样支持tcp、udp流量转发、内网http代理、内网socks5代理、p2p等,并带有强大的web管理端。比frp更强大。

nps下载

https://github.com/ehang-io/nps/releases/tag/v0.25.1 下载amd文件

nps配置

下载后查看一下文件目录。
server端

image.png

在nps目录下有一个nps可执行文件、conf配置目录和web网页目录,我们使用的时候只需要修改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

client端

image.png

首先客户端有多个使用方式。

  1. 可以直接无配置文件使用

./npc -server=ip:port -vkey=web界面中显示的密钥
  1. 也可以注册到系统服务进行使用
    如linux下

sudo ./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx) 注册
sudo npc start  启动
sudo npc stop   停止
sudo npc uninstall  卸载
  1. 也可以配置文件进行是使用,这就类似frp了。

./npc -config=npc配置文件路径

查看npc.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 流量限制,可忽略

再往下示具体模式进行配置。
具体参考官方文档

nps使用

server端启用nps
编辑nps.conf配置文件

appname = nps
#Boot mode(dev|pro)
runmode = dev

##bridge
#底层通信协议,默认tcp,可选用kcp协议
bridge_type=tcp
#底层通信端口,默认8024,如已被占用请指定其他端口
bridge_port=8024
bridge_ip=0.0.0.0

#当客户端以配置文件模式启动时会用到的验证密钥,可自行设置
public_vkey=cseroad

#web 控制台
web_host=10.xx.xx.7
web_username=cseroad
web_password=cseroad.com
web_port=18080
web_ip=0.0.0.0

启动nps

./nps start
image.png

访问18080端口,输入控制台用户密码,即可登录

image.png

搭建socks5隧道

新增一条客户端。

image.png

设置”不以配置文件运行”,且压缩加密。

image.png

客户端运行web控制台给出的命令。

image.png

可以在无配置文件的情况下,上线成功。运行成功后status状态变为”online”

这时候就可以增加socks5代理。

image.png

这时候就可以使用SocksCap64 设置端口,以及basic权限认证的用户名密码。访问内网。

image.png

当然也可以选择加载npc.conf配置文件来运行npc,注意也要设置相对应的basic权限认证。

搭建tcp隧道

同样创建tcp隧道。

image.png

用mac的microsoft remote desktop 远程连接公网的33389即可。完美实现端口转发。

image.png

metasploit

metasploit作为红队神器,本身也有内网穿透的功能。
在获取session之后,可进行端口转发以及创建socks5隧道。

转发端口

portfwd用来转发单个端口

portfwd add -l 33389 –p 3389 -r 10.211.55.19
# 添加转发
portfwd delete -l 33389 –p 3389 -r 10.211.55.19
# 删除转发
portfwd list
# 列出当前转发的列表
portfwd flush
# 移除所有转发端口

创建socks5隧道

在有session基础上,先添加路由

run get_local_subnets
# 获取路由
run autoroute -s 10.211.55.0/24
# 添加路由
run autoroute -p
# 显示路由
image.png

再创建socks5隧道

use auxiliary/server/socks5
set srvhost 127.0.0.1
set srvport 1080
run

没有设置用户名和密码。

image.png

metasploit同时具有socks4和socks5两个模块。socks4只支持TCP协议,socks5支持TCP和UDP。
再使用proxychains命令进行代理访问

image.png

cobalt strike

cobalt strike也一样具有内网穿透的能力。同样首先需要一个beacon

image.png

端口转发

beacon自带了一个端口转发的命令rportfwd

rportfwd 本机端口 目标ip 目标端口  

创建socks4隧道

选择SOCKS Server

image.png
image.png

可用来创建socks4隧道。
对应的代理也需要设置为socks4协议

image.png

可成功访问。

image.png

在创建成功后,可以使用”Proxy Pivots”代理metasploit走内网。

image.png

复制该命令到metasploit配置里。该设置为全局设置,一次设置,metasploit各个模块全部可用。
比如使用smb_login模块

setg Proxies socks4:172.16.252.11:1080    设置本地的msf走cs的socks4代理
setg ReverseAllowProxy true               建立双向通道
use auxiliary/scanner/smb/smb_version     探测smb版本
image.png

其余内网穿透工具,如ew、ngork因为实际应用、免杀性就不多记录了。

总结

  1. 实战时注意将通信流量进行加密、压缩
  2. 注意将socks5代理设置为认证状态
  3. 在使用tcp协议上进行加密、压缩还不行的情况下,不妨试一下kcp协议