前言
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
尝试使用本机作为攻击机,两台虚拟机来模拟内网环境。一台虚拟机one为内网环境的对外出口,攻击机可以访问,另外一台虚拟机two在内网,攻击机不能访问,而虚拟机one可以访问内网的虚拟机two,攻击机拿下了虚拟机one,要对虚拟机two进行攻击,故利用nps代理实现内网穿透。通过设置虚拟机two的ssh登录白名单来模拟以上内网环境,攻击机不能ssh登录虚拟机two,虚拟机one可以ssh登录虚拟机two,让攻击机能够ssh登录虚拟机two即内网穿透成功。
实验环境
虚拟机one(192.168.232.138),虚拟机two(192.168.232.156),攻击机(192.168.1.100)
实验目的
通过nps代理,实现攻击机ssh代理主机one登录主机two。
实验步骤
(1)two的ssh登录设置白名单
vim /etc/hosts.deny
sshd:ALL #ALL表示除了上面设置的IP。其他全部拒绝SSH登录
wq保存退出。
vim /etc/hosts.allow
sshd:192.168.232.138:allow #只允许one主机登录
wq保存退出。
重启ssh服务:
systemctl restart sshd
(2)测试白名单是否设置成功:
攻击机ssh尝试连接:
连接失败。
one主机尝试连接:
连接成功。
(3)代理实现
通过nps代理,实现攻击机ssh登录到two主机。
nps下载地址:https://github.com/ehang-io/nps/releases/tag/v0.26.10
按需下载符合操作系统版本的nps即可,nps有服务端和客户端。
在攻击机上下载nps服务端(攻击机为windows),解压压缩包并进入文件夹对配置文件进行配置:
打开nps.conf,可以配置服务端的web管理界面的账号、密码和端口。可以看到上图nps服务端的web管理界面的账号是admin,密码是123456,web端口是8080.
启动nps服务端:
浏览器访问本机8080端口:
输入配置文件的账号密码即可登录:
点击客户端,新增客户端:
使用默认配置创建一个客户端即可:
点击新增客户端左边蓝色的+号:
只要在one主机(linux主机)上传nps客户端,并执行客户端命令:./npc.exe -server=<服务端的IP地址>:8024 -vkey=usns0hhq8uwmpv40 -type=tcp(给的是windows环境下的命令。在Linux环境下把npc.exe改成npc即可)就能够使客户端上线。
成功上线:
可以看到客户端列表连接那一列由离线变为在线。
点击右侧查看那一列的隧道选项,新建socks5隧道:
选择SOCKS代理,然后设置⼀个服务端端口,这个服务端端口的意思是,如果要使用这个代理,就连接这个端 口,连上就能用了,我这里设置的是7788
利用proxifier代理到本机7788端口(proxifier是⼀个可以接管系统网卡,设置系统代理的软件)
点击配置文件->代理服务器->添加:
配置代理端口和地址,选择socks5协议:
然后添加⼀个规则,配置哪些请求通过代理,哪些请求不使用代理:
点击配置文件->代理规则->添加:
one、two主机在192.168.232.1/24的网段下,故设置为在请求的目标主机为192.168.232.*时生效,动作设为刚配置的socks5代理服务器,即代理到127.0.0.1:7788。
再次尝试ssh登录two主机:
成功登录,并可以看到代理进程:
总结
总的来说,攻击机尝试ssh登录two主机(192.168.232.156),由于属于192.168.232.*网段,proxifier会代理到本机的7788端口。本机的7788端口与one主机(192.168.232.138)建立了socks5隧道,故攻击机通过代理one主机(192.168.232.138)登录two主机(192.168.232.156)