目录
nmap环境
方法一:nmap扫描
1.主机发现:
2.端口扫描:
编辑
非nmap环境
方法二:arp-scan-主机发现
方法三:ping命令-主机发现
方法四:netcat-端口扫描
方法五:伪设备-端口扫描
信息搜集是渗透测试的第一步,而主机发现和端口扫描则是信息搜集的关键步骤。后续的渗透测试都是基于开始搜集侦察的信息进行测试的。这一步一定要保证把信息搜集完整齐全,否则一旦后续渗透过程出现了思路不畅,就会返工完全重做,非常浪费时间。哪怕是扫描不到有效的信息,也要及时记录
nmap环境
方法一:nmap扫描
nmap是进行主机发现和端口扫描最为常见的工具,但由于nmap这个工具过于出名,其流量特征早已被分析透彻,因此使用nmap进行扫描是很容易暴露痕迹的,容易被蓝队发现。在常规的打靶自学中,nmap还是非常常规的工具,我们应该熟悉其常规的参数和原理。
nmap的参数使用帮助可使用nmap --help查看:
sudo nmap --help
nmap参数很多,细小的参数差异可能实现很多不同的功能,所以我们应该对nmap的参数有一定的研究,才能让我们在遇见需求时,选择正确的参数
常用参数:
-sn ping扫描,用于扫描自己主机的整个c段,用来探针网段内存活主机
-sT TCP扫描,扫描通过tcp的协议
-sU UDP扫描,扫描通过UDP的协议
-sV 服务版本,显示扫描的存活端口开放服务的具体版本
-O 操作系统,显示目标主机的操作系统
-p 接开放端口,-p- 全端口扫描
--script=漏洞脚本 常用脚本:vuln
-min-rate 10000 最小扫描速度,nmap以不小于每秒10000次的速率进行扫描
10000这个数字是权衡的结果,数字过大,则扫描速度过快,有可能会有端口遗漏;数字过小,则扫描速度过慢,浪费时间。实际情况中建议扫描两次,保证没有端口遗漏。
1.主机发现:
对整个网段进行扫描。如果靶机和攻击机在同一个网段,我们可以扫描自己的网段确定靶机的ip,命令如下:
sudo nmap -sn 192.168.254.0/24
网段中这么多ip怎么确定那个ip是我们的目标主机?
在实际的渗透中,要想保证扫描准确,可以在靶机上线前后各进行一次扫描,对比上线的ip即可确定靶机的ip。
2.端口扫描:
2.1.全端口扫描
通过-min-rate 限制扫描速度,快速准确的扫描出目标主机的存活ip
sudo nmap -min-rate 10000 -p- 192.168.254.142
在实际的渗透过程中,会有网络延迟,防火墙的干扰,所以建议扫两遍以免遗漏;如果两次结果不同,就要分析原因调整参数;可以看到这些端口协议都走TCP
2.2.UDP扫描-扫描走UDP的端口是否有存活
UDP端口暴露的攻击面虽然较小,但我们也不要遗漏信息
sudo nmap -sU -min-rate 10000 -p- 192.168.254.142
2.3.服务版本探测
我们最为看重的一次扫描,会出现各种有价值的信息(各端口服务版本,操作系统版本)
sudo nmap -sT -sV -O -p22,80,3306,8080 192.168.254.142
2.4.漏洞脚本扫描
nmap中自带了一些内置脚本,其中就用漏洞脚本vuln,vuln是vulnerbility漏洞脆弱点的简写
sudo nmap --script=vuln -p22,80,3306,8080 192.168.254.142
表示探测这些端口的漏洞。这一步扫描的时间较长,可能需要几分钟时间。nmap的漏洞扫描结果可以给我们一个渗透测试的大致思路,即哪里的漏洞较多,我们可以从哪个端口入手进行渗透。通常情况nmap的漏洞扫描不会有太多结果,仅仅是一个辅助
非nmap环境
实际情况中,可能我们无法使用nmap进行主机发现(不想暴露流量特征/nmap被ban/环境中没有nmap且无法联网等情况)
方法二:arp-scan-主机发现
arp-scan -l
一种基于ARP协议的网络扫描工具,可以快速扫描整个网段并显示活动主机的IP地址和MAC地址
方法三:ping命令-主机发现
ping命令查看帮助文档
ping --help
但ping命令每次只能ping一个,所以结合bash脚本,扫描整个c段
for i in {1..254}; do ping -c 1 -W 0.1 192.168.254.$i|grep from;done
可以很方便的看到这个网段范围内存活的一些主机
方法四:netcat-端口扫描
利用nc进行端口扫描,不过要实现端口扫描用的是旧版的nc,而kali中默认安装的新版的nc,因此要使用nc.traditional,可以先用nc.traditional -h查看参数帮助:
nc.traditional -h
-vv
: 这是命令的选项之一,表示进行详细的输出(verbose)。通过使用该选项,命令将提供更多关于扫描进程的信息。
-z
: 这也是命令的选项之一,表示进行端口扫描。它会尝试建立到指定IP地址和端口的连接,但不发送任何实际的数据。
端口扫描:
扫描20-120的端口开放情况,这是完成过滤后的语句,只会显示存活端口
sudo nc.traditional -vv -z 192.168.254.142 1-65535 2>&1| grep -v refused
方法五:伪设备-端口扫描
伪设备,即/dev/tcp/ ,此处需要bash环境,而kali中的默认shell环境是zsh,可以用如下命令看到:
什么是伪设备?
在linux中所有设备都是映射成的文件,所以用文件模拟设备
echo $SHELL
先切换bsah环境(该命令在bash环境下更稳定)
bash
我们需要输入bash字符调整为bash的shell环境,若对20~120号端口进行扫描,bash脚本如下:
for i in {20..120}; do (echo < /dev/tcp/192.168.254.142/$i) &>/dev/null && printf "\n[+] The open port is : %d\n" "$i" || printf ".";done
这个脚本的作用是遍历指定的端口范围,尝试与目标IP地址的每个端口建立TCP连接。如果连接成功,则显示一个带有开放端口号的消息,如果连接失败,则显示一个点号.表示关闭端口,同时表示程序正在运行。这样可以快速扫描目标主机的端口,识别哪些端口是开放的。
for循环会依次遍历端口号,循环体中使用/dev/tcp特殊文件(伪设备)来进行基于TCP的端口连接测试。192.168.200.144是要扫描的目标IP地址,$i表示当前循环的端口号。
这里插叙一下,如果遍历所有端口1-65535,时间会很长,通常情况大部分端口都是关闭的,会输出很多点. 如果我们想终止程序,需要用ctrl + z,然后再kill -9 %1终止上一条命令:
参考:
渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)_nmap ping扫描-CSDN博客