转载:https://www.cnblogs.com/-mo-/p/11908260.html
我们将主机扫描的场景大致可分为三种,
1)直接在webshell下执行,通过系统自带命令或上传脚本工具进行扫描探测 ;
2)通过反弹shell进行内网渗透,msf等渗透测试框架自带一些扫描模块;
3)通过socks代理扫描内网(例如 proxychains+Nmap扫描)。
在合适的场景下,选择最合适的武器。比如支持存活探测的协议,包括了 ARP、ICMP、SMB、 UDP、NETBIOS、SNMP协议等;支持端口扫描的方式,包括ACK扫描、SYN扫描、TCP扫描、UDP扫描、ICMP扫描等。
image.png

0x01 Netbios协议探测

1.1 netbios简介

IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的同一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享

1.2 nmap扫描

  1. nmap -sU --script nbstat.nse -p137 192.168.1.0/24 -T4

1.3 msf扫描

  1. msf > use auxiliary/scanner/netbios/nbname
  2. msf > options
  3. msf > set RHOSTS 192.168.1.1
  4. msf > run

1.4 nbtscan扫描

项目地址:http://www.unixwiz.net/tools/nbtscan.html
Windows:

  1. nbtscan-1.0.35.exe -m 192.168.1.0/24
  2. nbtstat -n

Linux:

  1. nbtscan -r 192.168.1.0/24
  2. nbtscan-v-s: 192.168.1.0/24

0x02 ICMP协议探测

2.1 ICMP简介

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

2.2 CMD下扫描

扫描内网C段存活主机
命令行直显:

  1. Windows下使用ping命令扫描C段:
  2. for /l %i in (1,1,255) do @ping 192.168.64.%i -w 1 -n 1|find /i "ttl="
  3. Linux 下使用ping命令扫描C段:
  4. for k in $( seq 1 255);do ping -c 1 192.168.99.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done
  5. 另外,还可以结合系统自带的traceroutearp netstat等命令收集内网信息,curlwget可以用来做端口探测。

image.png
输出内容导出:

  1. @for /l %i in (1,1,255) do @ping -n 1 -w 40 192.168.0.%i & if errorlevel 1 (echo 192.168.0.%i>>c:\a.txt) else (echo 192.168.0.%i >>c:\b.txt)

因为要写C盘,所以需要管理员权限的cmd运行。(导出其他盘符,不需要管理员权限)

2.3 nmap扫描

  1. nmap -sn -PE -T4 192.168.0.0/24 (扫描一个C段下的存活主机)

2.4 powershell扫描

脚本下载地址:
https://gallery.technet.microsoft.com/scriptcenter/Invoke-TSPingSweep-b71f1b9b

  1. powershell.exe exec bypass Command "Import‐Module ./Invoke‐TSPingSweep.ps1; Invoke‐TSPingSweep ‐StartAddress 192.168.1.1 ‐EndAddress 192.168.1.254 ‐ResolveHost ‐ScanPort ‐Port 445,135"
  2. powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSweep.ps1;Invoke-TSPingSweep -StartAddress 192.168.1.0 -EndAddress 192.168.1.255"
  3. PowerShell实现基本的端口扫描功能。
  4. 针对单个IP的多个端口的扫描:
  5. PS C:\Users\Bypass> 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.246.44",$_)) "Port $_ is open!"} 2>$null
  6. 针对某IP段中单个端口的扫描:
  7. foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.1.$ip}
  8. 针对某IP & 多个端口的扫描器
  9. 1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}

image.png

  1. tcping.exe -n 1 192.168.1.0 80

image.png

0x03 UDP协议探测

3.1 UDP简介

UDP(User Datagram Protocol)是一种无连接的协议,在第四层-传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

3.2 UDP显著特性

1.UDP 缺乏可靠性。UDP 本身不提供确认,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序,也不保证每个数据报只到达一次。2.UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任何(协议上的)记录边界。3.UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系。大多数的UDP实现中都选择忽略源站抑制差错,在网络拥塞时,目的端无法接收到大量的UDP数据报4.UDP 支持多播和广播。

3.3 nmap扫描

  1. nmap -sU -T5 -sV --max-retries 1 192.168.1.100 -p 500

慢的令人发指
image.png

3.4 msf扫描

  1. msf > use auxiliary/scanner/discovery/udp_probe
  2. msf > use auxiliary/scanner/discovery/udp_sweep

3.5 unicornscan扫描

linux下使用推荐

  1. root@John:~# unicornscan -mU 192.168.1.100

3.6 ScanLine扫描

win下使用推荐。管理员执行。
image.png

3.7 在线

在线基于Nmap的udp扫描:https://pentest-tools.com/network-vulnerabilityscanning/udp-port-scanner-online-nmap

0x04 ARP协议探测

4.1 ARP简介

ARP,通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址

4.2 nmap扫描

  1. nmap -sn -PR 192.168.1.1/24

image.png

4.3 msf扫描

  1. msf > use auxiliary/scanner/discovery/arp_sweep

4.4 netdiscover

  1. root@John:~# netdiscover -r 192.168.1.0/24 -i wlan0

image.pngimage.png

4.5 arp-scan(linux)

(推荐)速度与快捷
项目地址:https://linux.die.net/man/1/arp-scan
arp-scan没有内置kali,需要下载安装:

  1. apt-get install arp-scan

image.png

4.6 arp-scan(windows)

(推荐)速度与快捷

  1. arp-scan.exe -t 192.168.1.1/24

(非官方)项目地址:https://github.com/QbsuranAlang/arp-scan-windows-/tree/master/arpscan
image.png

4.7 Powershell

  1. c:\tmp>powershell.exe -exec bypass -Command "Import-Module .\arpscan.ps1;InvokeARPScan -CIDR 192.168.1.0/24"

image.png

0x05 SNMP协议探测

5.1 SNMP简介

SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

5.2 nmap扫描

  1. root@John:~# nmap -sU --script snmp-brute 192.168.1.0/24 -T4

image.png

5.3 msf扫描

  1. msf > use auxiliary/scanner/snmp/snmp_enum

image.png

0x06 SMB协议探测

6.1 基于msf

  1. msf > use auxiliary/scanner/smb/smb_version

image.png

6.2 基于nmap

  1. nmap sU sS ‐‐script smbenumshares.nse p 445 192.168.1.119

image.png

6.3 基于CMD

  1. for /l %a in (1,1,254) do start /min /low telnet 192.168.1.%a 445

image.png

6.4 基于powershell

一句话扫描:

  1. IP
  2. 445 | %{ echo ((newobject Net.Sockets.TcpClient).Connect("192.168.1.119",$_)) "$_ is open"} 2>$null
  3. ip
  4. 1..5 | % { $a = $_; 445 | % {echo ((newobject Net.Sockets.TcpClient).Connect("192.168.1.$a",$_)) "Port $_ is open"} 2>$null}
  5. port,多IP
  6. 118..119 | % { $a = $; writehost "‐‐‐‐‐‐"; writehost"192.168.1.$a"; 80,445 | % {echo ((newobject Net.Sockets.TcpClient).Connect("192.168.1.$a",$)) "Port $_ is open"} 2>$null}

image.pngimage.pngimage.png

6.5 crackmapexec

  1. aptget install crackmapexec

默认为100线程:

  1. cme smb 192.168.1.0/24

0x07 MSF探测辅助模块汇总

  1. auxiliary/scanner/discovery/arp_sweep #基于arp协议发现内网存活主机,这不能通过代理使用
  2. auxiliary/scanner/portscan/ack #基于tcp的ack回复进行端口扫描,默认扫描1-10000端口
  3. auxiliary/scanner/portscan/tcp #基于tcp进行端口扫描,默认扫描1-10000端口
  4. auxiliary/scanner/discovery/udp_sweep #基于udp协议发现内网存活主机
  5. auxiliary/scanner/discovery/udp_probe #基于udp协议发现内网存活主机
  6. auxiliary/scanner/netbios/nbname #基于netbios协议发现内网存活主机
  7. auxiliary/scanner/ftp/ftp_version #发现内网ftp服务,基于默认21端口
  8. auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口
  9. auxiliary/scanner/telnet/telnet_version #发现内网telnet服务,基于默认23端口
  10. auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口
  11. auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口
  12. auxiliary/scanner/http/title #探测内网http服务的标题
  13. auxiliary/scanner/smb/smb_version #发现内网smb服务,基于默认的445端口
  14. auxiliary/scanner/mssql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口
  15. auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口
  16. auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口
  17. auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口
  18. auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口
  19. auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口
  20. auxiliary/scanner/netbios/nbname #探测内网主机的netbios名字

在实战过程中,许多特殊环境下scanner,db_nmap不能快速符合实战渗透诉求,尤其在域中的主机存活发现,而gather/post下的模块,弥补了该诉求,以便快速了解域中存活主机。

  1. windows/gather/arp_scanner
  2. windows/gather/enum_ad_computers
  3. windows/gather/enum_computers
  4. windows/gather/enum_domain
  5. windows/gather/enum_domains
  6. windows/gather/enum_ad_user_comments
  1. run windows/gather/arp_scanner RHOSTS=192.168.1.110120 THREADS=20

image.png

0x08 参考链接

https://github.com/Micropoor/Micro8
https://www.jianshu.com/p/dc7f42ef056f
https://blog.csdn.net/qq_36119192/article/details/92556219
https://blog.csdn.net/liqiuman180688/article/details/88175334

总结:基于MSF的内网主机探测

使用msf进行反弹shell进行内网渗透时,通过msf自带的扫描模块进行快速扫描。

  1. 主机存活探测:
  2. auxiliary/scanner/discovery/arp_sweep #ARP扫描
  3. auxiliary/scanner/discovery/udp_sweep #UDP扫描
  4. auxiliary/scanner/netbios/nbname #NETBIOS扫描
  5. auxiliary/scanner/snmp/snmp_enum #SNMP扫描
  6. auxiliary/scanner/smb/smb_version #SMB扫描
  7. 端口扫描:
  8. auxiliary/scanner/portscan/ack #TCP ACK端口扫描
  9. auxiliary/scanner/portscan/ftpbounce #FTP bounce端口扫描
  10. auxiliary/scanner/portscan/syn #SYN端口扫描
  11. auxiliary/scanner/portscan/tcp #TCP端口扫描
  12. auxiliary/scanner/portscan/xmas #TCP XMas端口扫描