Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。
“端口”在计算机和网络领域中是个非常重要的概念。它是指网络中TCP协议、UDP协议的通信接口,端口号的范围从0到65535,分为系统默认端口号和一般端口号。
TCP标志位
ACK:确认标志,用来告诉发送端,数据包已收到
RST:复位标志,用来重置异常的连接
URG:紧急标志,用于发送特殊的数据包
SYN:同步标志,用于在建立连接时传输同步序号
FIN:终止标志,传输完毕后告诉对方释放连接
为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。
一、端口扫描
概念:对某一段端口或某个指定端口进行扫描。
原理:使用TCP/IP协议,向远程目标主机的某一端口提出连接请求,并分析目标主机的应答状态,从而判断出目标系统端口的开关状态。
TCP建立连接
TCP释放连接
1、端口扫描的原理
全连接扫描是TCP端口扫描的基础,TCP connect()扫描的实现原理如下所述:
扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect开始。如果端口开放,则连接将建立成功;否则,若返回-1则表示端口关闭。建立连接成功:响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。
优点:实现简单,对权限没有严格要求,系统中的任何用户都有权力使用,是得到banners信息的唯一方法,扫描速度快
缺点:在日志文件中留下大量记录,容易被发现,容易被防火墙和IDS检测、过滤
SYN扫描也称半开放扫描。在SYN扫描中,恶意客户企图跟服务器在每个可能的端口建立TCP/IP连接。这通过向服务器每个端口发送一个SYN数据包,装作发起一个三方握手来实现。如果服务器从特定端口返回SYN/ACK(同步应答)数据包,则意味着端口是开放的。然后,恶意客户程序发送一个RST数据包。结果,服务器以为存在一个通信错误,以为客户端决定不建立连接。开放的端口因而保持开放,易于受到攻击。如果服务器从特定端口返回一个RST数据包,这表示端口是关闭的,不能攻击。通过向服务器连续发送大量的SYN数据包,黑客能够消耗服务器的资源。由于服务器被恶意客户的请求所淹没,不能或者只能跟很少合法客户建立通信。
优点:未建立TCP连接,不会被记录到系统日志中,扫描隐蔽
缺点:需要攻击者拥有客户机的root权限,可以被防火墙检测和过滤
当我们发送一个FIN=1的报文到一个关闭的端口时,该报文会被目标主机丢弃,并随之返回一个RST报文;而对于一个开启的端口,该报文仍然会被丢弃,但不会有RST报文返回。可以由以上两点来辨别端口的状态;
优点:隐蔽性高,能穿透一般防火墙或者IDS系统,目标主机上也不会留下痕迹
缺点:数据包容易被丢弃,精确度偏低,只对Unix有效,对Windows无效(可以据此作为参考依据,来判断目的主机的操作系统)。
二、nmap
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。
其基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。
1、主机发现
任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为 一列活动的或者您感兴趣的主机。扫描每个IP的每个端口很慢,通常也没必要。
我们经常有这样的经验,就是当网络不通的时候,要去ping一下网关,来检查网关是否正常。这其实和主机发现的原理是一样的。当测试的目标是一个网络时,那么显然只有其中在线(也就是开机并联网)的主机才是我们的目标,那么我们就需要使用主机发现技术来找出这些目标。Nmap中提供了很多种的主机发现方法,这些方法大都与TCP/IP协议族中的协议相对应。
2、使用ARP协议进行主机发现
ARP活跃主机发现技术的原理:如果我们想要知道处在同一网段的IP地址为0.0.0.0的主机是否为活跃主机,只需要构造一个ARP请求数据包,并广播出去,如果得到了回应,则说明该主机为活跃主机。
但是注意这种扫描方式仅能用于与Nmap所在主机在同一子网的目标,例如执行:
Wireshark 抓包测试
三、接下来进行实践操作:
1、对单个主机进行扫描
随便打开一个靶向机,这里我打开的Metaspotable2-Linux
使用 ifconfig 指令获取这个靶向机的 ip 地址
2、指定端口扫描
除了所有前面讨论的扫描方法, Nmap提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。 默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫描。
-p (只扫描指定的端口)
该选项指明您想扫描的端口,覆盖默认值。 单个端口和用连字符表示的端口范围(如 1-1023)都可以。 范围的开始以及/或者结束值可以被省略, 分别导致Nmap使用1和65535。所以您可以指定 -p-从端口1扫描到65535。 如果您特别指定,也可以扫描端口0。 对于IP协议扫描(-sO),该选项指定您希望扫描的协议号 (0-255)。
-sT (TCP connect()扫描)
扫描开放端口
一次完整的三次握手
扫描关闭端口
-sS(TCP SYN扫描)
扫描开发端口
扫描关闭端口
-sF (FIN扫描)
扫描开发端口
扫描关闭端口
使用Nmap进行扫描目标操作系统
目标的操作系统类型是一个十分重要的信息,如果我们知道了目标所使用的操作系统之后就可以大大的减小工作量。例如我们知道了目标系统为Windows XP,那么就不必再进行一些针对Linux系统的渗透测试方法了。同样如果目标系统为Windows 10,那么之前的MS08—067这些针对Windows XP系统的渗透模块也就不需要测试了。通常,越老旧的系统也就意味着越容易被渗透,所以我们在进行渗透测试的时候往往希望能找到目标网络中那些比较老的系统。
Nmap最著名的功能之一是用TCP/IP协议栈fingerprinting进行远程操作系统探测。 Nmap发送一系列TCP和UDP报文到远程主机,检查响应中的每一个比特。 在进行一打测试如TCP ISN采样,TCP选项支持和排序,IPID采样,和初始窗口大小检查之后, Nmap把结果和数据库nmap-os-fingerprints中超过 1500个已知的操作系统的fingerprints进行比较,如果有匹配,就打印出操作系统的详细信息。 每个fingerprint包括一个自由格式的关于OS的描述文本, 和一个分类信息,它提供供应商名称(如Sun),下面的操作系统(如Solaris),OS版本(如10), 和设备类型(通用设备,路由器,switch,游戏控制台, 等)。
采用下列选项启用和控制操作系统检测:
-O (启用操作系统检测)
也可以使用-A来同时启用操作系统检测和版本检测
相对操作系统而言,那些安装在操作系统之上的软件更是网络安全的重灾区。所以在对目标进行渗透测试的时候,要尽量的检测出目标系统运行的各种软件。
(root㉿hnsw)-[~/桌面]
└─# nmap -A 192.168.159.133
Starting Nmap 7.93 ( https://nmap.org ) at 2024-04-25 15:25 CST
Nmap scan report for 192.168.159.133
Host is up (0.00080s latency).
Not shown: 977 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.159.131
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| vsFTPd 2.3.4 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
| ssh-hostkey:
| 1024 600fcfe1c05f6a74d69024fac4d56ccd (DSA)
|_ 2048 5656240f211ddea72bae61b1243de8f3 (RSA)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
|_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
| ssl-cert: Subject: commonName=ubuntu804-base.localdomain/organizationName=OCOSA/stateOrProvinceName=There is no such thing outside US/countryName=XX
| Not valid before: 2010-03-17T14:07:45
|_Not valid after: 2010-04-16T14:07:45
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_DES_64_CBC_WITH_MD5
| SSL2_RC4_128_EXPORT40_WITH_MD5
| SSL2_RC2_128_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
| SSL2_DES_192_EDE3_CBC_WITH_MD5
|_ SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
53/tcp open domain ISC BIND 9.4.2
| dns-nsid:
|_ bind.version: 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
|_http-title: Metasploitable2 - Linux
|_http-server-header: Apache/2.2.8 (Ubuntu) DAV/2
111/tcp open rpcbind 2 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2 111/tcp rpcbind
| 100000 2 111/udp rpcbind
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/udp nfs
| 100005 1,2,3 34766/udp mountd
| 100005 1,2,3 44276/tcp mountd
| 100021 1,3,4 38547/tcp nlockmgr
| 100021 1,3,4 49691/udp nlockmgr
| 100024 1 55213/udp status
|_ 100024 1 60258/tcp status
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login OpenBSD or Solaris rlogind
514/tcp open tcpwrapped
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
| mysql-info:
| Protocol: 10
| Version: 5.0.51a-3ubuntu5
| Thread ID: 20
| Capabilities flags: 43564
| Some Capabilities: SupportsTransactions, SwitchToSSLAfterHandshake, Speaks41ProtocolNew, Support41Auth, ConnectWithDatabase, LongColumnFlag, SupportsCompression
| Status: Autocommit
|_ Salt: B1mS9a\+`$.ZZ59`VpO{
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
|_ssl-date: 2024-04-25T07:26:17+00:00; +5s from scanner time.
| ssl-cert: Subject: commonName=ubuntu804-base.localdomain/organizationName=OCOSA/stateOrProvinceName=There is no such thing outside US/countryName=XX
| Not valid before: 2010-03-17T14:07:45
|_Not valid after: 2010-04-16T14:07:45
5900/tcp open vnc VNC (protocol 3.3)
| vnc-info:
| Protocol version: 3.3
| Security types:
|_ VNC Authentication (2)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
| irc-info:
| users: 1
| servers: 1
| lusers: 1
| lservers: 0
| server: irc.Metasploitable.LAN
| version: Unreal3.2.8.1. irc.Metasploitable.LAN
| uptime: 0 days, 0:23:46
| source ident: nmap
| source host: 6689AA28.FE159842.FFFA6D49.IP
|_ error: Closing Link: mdpgmlklj[192.168.159.131] (Quit: mdpgmlklj)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/5.5
MAC Address: 00:0C:29:F0:CD:B7 (VMware)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
| Computer name: metasploitable
| NetBIOS computer name:
| Domain name: localdomain
| FQDN: metasploitable.localdomain
|_ System time: 2024-04-25T03:25:48-04:00
|_clock-skew: mean: 1h20m05s, deviation: 2h18m34s, median: 4s
|_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
|_smb2-time: Protocol negotiation failed (SMB2)
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
TRACEROUTE
HOP RTT ADDRESS
1 0.80 ms 192.168.159.133
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 82.57 seconds
如果想节约扫描时间,也可以用-sV参数粗略扫描