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端
在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端
首先客户端有多个使用方式。
- 可以直接无配置文件使用
./npc -server=ip:port -vkey=web界面中显示的密钥
- 也可以注册到系统服务进行使用
如linux下
sudo ./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx) 注册
sudo npc start 启动
sudo npc stop 停止
sudo npc uninstall 卸载
- 也可以配置文件进行是使用,这就类似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
访问18080端口,输入控制台用户密码,即可登录
搭建socks5隧道
新增一条客户端。
设置”不以配置文件运行”,且压缩加密。
客户端运行web控制台给出的命令。
可以在无配置文件的情况下,上线成功。运行成功后status状态变为”online”
这时候就可以增加socks5代理。
这时候就可以使用SocksCap64 设置端口,以及basic权限认证的用户名密码。访问内网。
当然也可以选择加载npc.conf配置文件来运行npc,注意也要设置相对应的basic权限认证。
搭建tcp隧道
同样创建tcp隧道。
用mac的microsoft remote desktop 远程连接公网的33389即可。完美实现端口转发。
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
# 显示路由
再创建socks5隧道
use auxiliary/server/socks5
set srvhost 127.0.0.1
set srvport 1080
run
没有设置用户名和密码。
metasploit同时具有socks4和socks5两个模块。socks4只支持TCP协议,socks5支持TCP和UDP。
再使用proxychains命令进行代理访问
cobalt strike
cobalt strike也一样具有内网穿透的能力。同样首先需要一个beacon
端口转发
beacon自带了一个端口转发的命令rportfwd
rportfwd 本机端口 目标ip 目标端口
创建socks4隧道
选择SOCKS Server
可用来创建socks4隧道。
对应的代理也需要设置为socks4协议
可成功访问。
在创建成功后,可以使用”Proxy Pivots”代理metasploit走内网。
复制该命令到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版本
其余内网穿透工具,如ew、ngork因为实际应用、免杀性就不多记录了。
总结
- 实战时注意将通信流量进行加密、压缩
- 注意将socks5代理设置为认证状态
- 在使用tcp协议上进行加密、压缩还不行的情况下,不妨试一下kcp协议