使用Nmap进行端口扫描
在未经授权的情况下夺取计算机系统控制权的行为是 违法行为, 此篇文章仅作为学习交流和探讨,若要测试成果,请在自己虚拟机上测试,或者被允许渗透的计算机系统上演练, 请勿做出违法之骚操作,操作者做出的一切违法操作均与本人和此文无关
本文使用Nmap进行扫描,其他扫描手段本文不进行探讨
Nmap是端口扫描方面的业内标准,网上的资料让人眼花缭乱,时至今日,各式各样的防火墙已经普遍采用了入侵检测和入侵防御技术,他们能够有效地拦截常见的端口扫描,所以,即使使用Nmap程序扫描结果一无所获也不是什么意外的事。换句话说, 如果你在公网上对指定网段进行主机扫描时没检测出一台在线主机,那么就应当认为扫描行动多半是被防火墙系统拦截下来了,反之则是另一种极端情况:每台主机都在线,每个端口都处于开放状态
SYN扫描
所谓的SYN扫苗实际上是一种模拟TCP握手的端口扫描技术。TCP握手分为3个阶段:SYN、SYN-ACK、ACK。在进行SYN扫描时,Nmap程序向远程主机发送SYN数据包并等待对方的SYN-ACK数据。 如果在最初发送SYN数据包之后没有收到SYN-ACK响应,那么既定端口就不会是开放端口,在此情况下,既定端口不是关闭就是被过滤了
在使用Nmap扫描之前,可以先使用maltego之类的信息搜集工具分析出有用的信息。我使用一个非法网站的IP来作为演示
需要注意的是,某个端口是开放端口不代表这个端口背后的程序存在安全缺陷,我们仅能够通过开放端口初步了解计算机运行的应用程序,进而判断这个程序是否存在安全缺陷
版本扫描
虽然SYN扫描具有某种隐蔽性,但它不能告诉我们打开这些端口的程序到底是什么版本,如果说我们想要知道这台主机的某个端口在运行着什么程序以及它运行的版本,这在我们后期威胁建模阶段有极大的用处, 使用-sT或者-sV 即可查看
运气很好,看来这个网站运行的程序有安全漏洞,这个名为OpenSSH 5.3的软件存在着一个CVE-2016-10009漏洞,攻击者可以通过远程攻击openssh来获得服务器权限。我们在这里不做攻击操作,毕竟这是别人的网站,虽然是个违法网站。如果有机会后期笔者将会根据情况写一些关于漏洞利用的文章
UPD扫描
Nmap的SYN扫描和完整的TCP扫描都不能扫描UDP,因为UDP的程序采用无连接的方式传输。在进行UDP扫描时,Nmap将向既定端口发送UPD数据包,不过UDP协议的应用程序有着各自不同的数据传输协议,因此在远程主机正常回复该数据的情况下,能够确定既定端口处于开放状态。 如果既定端口处于关闭状态,那么Nmap程序应当收到ICMP协议的端口不可达信息。 如果没有从远程主机收到任何数据那么情况就比较复杂了,比如说:端口可能处于发放状态,但是响应的应用程序没有回复Nmap发送的查询数据,或者远程主机的回复信息被过滤了,由此可见 在开放端口和被防火墙过滤的端口方面,Nmap存在相应的短板
扫描指定端口
指定端口的扫描可能造成服务器崩溃,最好还是踏踏实实的彻底扫描全部端口 。就不拿别人的服务器来测试了,毕竟我也怕被报复,在这里我把渗透目标设置为我自己的xp靶机,步骤跟前面一样,扫描出端口查看是否有可利用程序,然后对想扫描的端口进行扫描
在渗透测试中,我们都不希望致使任何服务器崩溃,但是我们的确可能会遇到那些无法正确受理非预期输入的应用程序,在这种情况下,Nmap的扫描数据就可能引发程序崩溃
网络安全:Nmap端口扫描
nmap -sS minimum ip/范围
TCP SYN scans:
nmap -sS target ip
nmap使用在连接层的Address Resolution Protocol询问target ip的MAC地址,并获得回应,但是没有TCP包。
nmap显示所有端口都被过滤了,猜想是防火墙过滤了TCP SYN的包。后来发现是虚拟机网络的混杂模式设为了拒绝,调成允许所有之后:
nmap发出了1000个TCPSYN,等待目标主机TCP ACK回应,打开的端口在ACK中包含Source port=自己的端口号,关闭的端口Source port=54247。
1000个端口中有四个端口打开了。
UDP scans:
nmap -sU target ip --host-timeout 100
设置timeout以免等待时间过长。
nmap发出了UDP包,等待目标主机ICMP 70/110 Destination unreachable回应。
扩大搜索范围以纳入更高端口。
nmap --top-ports 10000 target ip
nmap -p 10000-30000 target ip
nmap -sV -p 13337 target ip
这是一个Apache HTTP服务器。
nmap扫描工具的使用二 网络探测
Nmap的6种端口状态:
Open:开放状态
Closed:关闭状态
Filtered: 过滤状态(可能被过滤,可能网络阻塞)
Unfiltered:未被过滤状态(可以访问,但未知端口处于开放还是关闭状态)
Open|Filtered:开放还是过滤的
Closed|Filtered:不能确定端口事关闭还是被过滤的
-T 时序选项
-p|-F|-r 常用扫描方式
-sS TCP SYN扫描:(需要root权限)
-sT TCP连接扫描:完整三次握手,最基础最稳定的扫描方式
-sU UDP扫描(速度非常慢,一般用-p指定端口范围以节约时间)
-sN/sF/sX 隐蔽扫描
-sA TCP ACK扫描
-sW TCP窗口扫描
-sM TCP Maimon扫描
–scanflags 自定义TCP扫描
-sI 空闲扫描
-sO IP协议扫描
-b * FTP Bounce扫描
时序选项:
-T0(偏执的):非常慢的扫描,用于IDS逃避
-T1(鬼祟的):缓慢的扫描,用于IDS逃避
-T2(文雅的):降低速度以降低对带宽的消耗,一般不同
-T3(普通的):默认,根据目标的反应自动调整时间
-T4(野蛮的):快速扫描,常用,需要在很好的网络环境下进行扫描,请求可能会淹没目标
-T5(疯狂的):极速扫描,以牺牲准确度来提升扫描速度
例子:
(1)指定端口扫描:
nmap -p 80 192.168.20.16
如图,直接输入nmap -p 80 192.168.20.16的时候提示Host seems down。我们可以通过ping命令来确定网络的连通性,此处使用的命令是ping 192.168.20.16,发现可以ping通,即网络是通的, 使用Ctrl+z停止执行ping命令。 再使用nmap -p 80 192.168.20.16命令的时候就可以出现正确的结果了。
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -p 80-1000 192.168.20.16
(2)TCP SYN扫描:
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -sS 192.168.20.16
又称为半开放(需要root权限),常见扫描方式,扫描速度较快,由于未进行TCP连接,比较隐蔽,很难背防火墙或管理员发现
(3)隐蔽扫描
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -sN 192.168.20.16
-sN是Null扫描
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -sF 192.168.20.16
-sF是Fin扫描(发送FIN包)
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -sX 192.168.20.16
-sX是Xmas扫描(将数据包的FIN/PSH/URG都标记为1)
(4)TCP ACK扫描
ping 192.168.20.16(使用Ctrl+z停止执行ping命令)
nmap -sA 192.168.20.16
致命缺点:无法确定端口是否开放还是被过滤
【工具使用】常见的NMAP命令总结
总结了一下常见的NMAP的使用命令,用来快速查看的,觉得有用的小伙伴可以收藏一下。
nmap -v 详细信息输出
nmap -p 指定端口
nmap -iL 扫描文件中的ip
nmap -exclude 不扫描某些ip
nmap -Pn 使用ping扫描,显式地关闭端口扫描,用于主机发现
nmap -sn 使用ping扫描,进行端口扫描,假设主机都是up的
nmap -sS 使用SYN扫描,不需要完成三次握手
nmap -sT TCP connect扫描,需要完成三次握手,只适用于找出TCP和UDP端口
nmap -sU 扫描UDP端口
nmap -sF FIN扫描,用于探测防火墙状态,识别端口是否关闭,容易漏扫
nmap -sV 扫描目标主机的端口和软件版本
nmap -O 远程检测操作系统和软件
nmap -O --osscan-guess 猜测目标操作系统版本
nmap -traceroute 路由跟踪
nmap -A 综合扫描,包含1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测
nmap -oN result.txt 将标准输出写入到指定文件中
nmap -oX result.xml 将输入写成xml的形式
nmap -oS result.txt 将输出写成特殊符号的形式,内容跟-oN是一样的,只是字体变了而已
nmap -oG result.txt 将输出写成特殊格式
nmap -oA 将输出所有格式,有三种 .xml/ .gnmap/ .nmap
nmap -T[0-5] 时间参数模板
-T0 用于躲避IDS,时间很长
-T1 用于躲避IDS,时间很长
-T2 降低了扫描速度,使用更小的带宽和目标主机资源对目标靶机进行扫描
-T3 默认模式,未做优化
-T4 假设用户具有合适及可靠的网络而加速对目标靶机的扫描
-T5 假设用户具有更好的网络或者愿意牺牲准确性而加速扫描
nmap -sC 根据端口识别服务自动调用默认脚本
nmap --script
想用nmap扫描主机开放端口的命令是什么
nmap命令
1. 各种代码举例。 扫描单一的一个主机:#nmap nxadmin.com#nmap 192.168.1.2,扫描整个子网:#nmap 192.168.1.1/24,扫描多个目标:#nmap 192.168.1.2 192.168.1.5, 扫描一个范围内的目标:#nmap 192.168.1.1-100 。
2有关IP的代码。扫描和namp在同一目录下的IP为txt的所有主机:#nmap -iL target.txt,关于你扫描的所有主机的列表:#nmap -sL 192.168.1.1/24,扫描除过某一个ip外的所有子网主机:#nmap192.168.1.1/24-exclude192.168.1.1,扫描特定主机上的80,21,23端口:#nmap-p80,21,23192.168.1.1,扫描除过某一个文件中的ip外的子网主机:#nmap192.168.1.1/24-excludefilexxx.txt。
资料拓展:
扫描模式分类:
1. FINscan(sF)扫描有时不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手:
a href="mailto:root@bt:~#nmap-sF192.168.1.8"root@bt:~#nmap-sF192.168.1.8/a/p pStartingNmap5.51at2012-07-0819:21PKTNmapscanreportfor192.168.1.8Hostisup(0.000026slatency).Notshown:999closedportsPORTSTATESERVICE111/tcpopen|filteredrpcbind
版本检测(sV)版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCPSYN扫描开放了哪些端口:#nmap-sV192.168.1.1。
Idlescan(sL)是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包:#nmap-sL192.168.1.6192.168.1.1。
Idlescan是一种理想的匿名扫描技术,它通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口有需要其它的扫描技术,这里就比如说FTPbounce(FTP反弹,fragmentationscan(碎片扫描),IPprotocolscan(IP协议扫描),以上讨论的是几种最主要的扫描方式。
Nmap的OS检测(O):Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。
Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照:InitiatingSYNStealthScanat10:21Scanninglocalhost(127.0.0.1)[1000ports]Discoveredopenport111/tcpon127.0.0.1CompletedSYNStealthScanat10:21,0.08selapsed(1000totalports)InitiatingOSdetection(try#1)againstlocalhost(127.0.0.1)RetryingOSdetection(try#2)againstlocalhost(127.0.0.1)。
2. Nmap的操作系统指纹识别技术:设备类型(路由器,工作组等)运行(运行的操作系统)操作系统的详细信息(操作系统的名称和版本)网络距离(目标和攻击者之间的距离跳)如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机:#nmap-O-PN192.168.1.1/24Nmap检测的基础是有开放和关闭的端口,当OSscan无法检测至少一个开放或关闭的端口时:
Warning:OSScanresultsmaybeunreliablebecausewecouldnotfindatleast1openand1closedportOSScan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口,这种情况是非常不理想的,应该是远程主机做了针对操作系统检测的防范。
如果Nmap不能检测到远程操作系统类型,那么就没有必要使用-osscan_limit检测,想好通过Nmap准确的检测到远程操作系统是比较困难的,需要使用到Nmap的猜测功能选项,–osscan-guess猜测认为最接近目标的匹配操作系统类型:#nmap-O--osscan-guess192.168.1.1。
3. Tcp SYN Scan (sS) 这是一个基本的扫描方式,它被称为半开放扫描:#nmap -sS 192.168.1.1,Tcp connect() scan(sT)如果不选择SYN扫描,这个扫描就是默认的扫描模式:#nmap -sT 192.168.1.1,Udp scan(sU)扫描技术用来寻找目标主机打开的UDP端口:#nmap -sU 192.168.PINGScan(sP),PING扫描需要ROOT权限,否则PING扫描将会使用connect()调用:#nmap-sP192.168.1.11.1。
0条大神的评论