
端口探测在渗透测试的信息收集以及威胁情报领域都有着很重要的应用,本文章将从几个方面来介绍端口探测相关的知识。 0×00 有关端口的基础知识0.基本概念端口并不是一个真是存在的实体,是完全抽象的,只是计算机网络中为了多个应用同时通信而创造出来的概念。它工作在OSI七层模型中的第四层网络层,属于TCP/UDP 协议中的内容。 TCP和UDP各有65536个端口(0-65535)作为一种网络资源,端口是由操作系统分配和管理的一般使用netstat来查看系统的端口使用状况。 $ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN
tcp 0 0 10.254.123.52:22 91.197.232.107:54098 ESTABLISHED
tcp 0 364 10.254.123.52:22 210.13.242.2:33679 ESTABLISHED
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::61616 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:6010 :::* LISTEN
tcp6 0 0 :::8161 :::* LISTEN
通常来说,一个端口只能由一个进程绑定比如apache如果绑定了80端口,如果nginx再绑定时,操作系统就会拒绝nginx的请求。 erro:listen tcp 0.0.0.0:80: bind: address already in use
但是注意,由于端口是完全抽象的概念,仅仅是一种标识,因此不同协议的相同端口是不会发生任何冲突的也就是说,进程 A 绑定了TCP的80端口,进程 B 再去绑定UDP的80端口时,是没有任何问题的。 在0-65535这些端口中,0-1023这1024个端口是系统的保留端口,为一些关键服务预留的。如果想要绑定这些端口,必须具有系统的最高权限(ROOT),而其他的端口只需要用户权限即可。 0×00 端口扫描工具0.nmap最为大名鼎鼎的端口扫描工具,支持许多种探测,可以使用各种类型的包进行探测,支持SYN、Ping、Xmas等数十种扫描方式。 1.zmap2.masscan这两种工具的特点就是速度极快,可以在很短时间内扫描大量主机。 3.nc相对于其他几种自动化探测的工具,使用nc进行端口探测可以说是纯手动的方式了。 0×02 常见的用途0. 识别服务一般来说,每一个服务都有固定的一个默认端口最常见的,如: 常见的系统端口| 端口 | 服务 |
|---|
| 21 | ftp | | 22 | ssh | | 23 | telnet | | 25 | smtp | | 80 | http | | 110 | pop3 | | 135 | rpc | | 139 | netbios | | 445 | smb |
常见的Web server的端口| 端口 | server |
|---|
| 80 | apache/nginx | | 8080 | tomcat | | 5000 | flask | | 3000 | nodejs | | 8000 | django | | 3000 | ruby on rails | | 8080 | beego | | 8888 | react |
常见的各类数据库的端口| 端口 | 服务 |
|---|
| 3306 | mysql | | 1521 | oracle | | 1433 | SQL-server | | 5432 | PostgreSQL | | 50000 | DB2 | | 5000 | sybase | | 6379 | Redis | | 27017 | mongoDB | | 11211 | memcached | | 60000 | HBase |
一般来说,对应的服务都会开在对应的端口上,以便访问(比如浏览器在不指定端口时会访问80端口,ssh不指定端口的时候会连接22端口) 但是,也有许多运维工程师和主机管理员为了避免安全问题,会把服务避开默认端口比如,把ssh开到80端口上,这就给探测服务带来了很大难度。 这个时候,就需要完成TCP连接,然后对于服务的内容进行试探,从返回的字符流中获取的服务的相关信息对于探测服务来说,可以使用nmap的 -sV选项: $ nmap -sV localhost
Starting Nmap 6.47 ( http://nmap.org ) at 2017-08-25 20:11 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Other addresses for localhost (not scanned): 127.0.0.1 127.0.1.1
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.5
22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC
3306/tcp open mysql MySQL 5.5.52-0+deb8u1
8081/tcp open http Apache httpd 2.4.10 ((Debian))
8082/tcp open http Apache httpd 2.4.10 ((Debian))
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
对于常见的服务,nmap甚至可以探测出服务版本但是,对于很多情况,必须辅以手动探测才能达到最好的效果,这个时候就需要使用nc来进行,举几个例子对于8001端口,nc连接上去,随便输入一个字符串,得到了以下结果: $ nc -vv localhost 8001
localhost [127.0.0.1] 8001 (?) open
asd
HTTP/1.1 400 Bad Request
Date: Fri, 25 Aug 2017 12:15:25 GMT
Server: Apache/2.4.23 (Debian)
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.23 (Debian) Server at 127.0.0.1 Port 8001</address>
</body></html>
由此我们知道了这是一个http服务,因为我们发送的字符串不是一个合法的HTTP请求,因此返回一个400 Bad requests,我们还得到了系统的版本是Debian,WebServer是Apache。 再举一个例子: $ nc -vv localhost 3306
localhost [127.0.0.1] 3306 (mysql) open
L
5.7.15-1
ttsEs!eCl AlJmysql_native_passwordsdad
Got packets out of order sent 5, rcvd 111
连接后直接返回了字符串mysql_native_passwordsda,可以判断这是一个mysql: $ nc -vv localhost 22
localhost [127.0.0.1] 22 (ssh) open
SSH-2.0-OpenSSH_7.3p1 Debian-3+b1
asd
Protocol mismatch.
sent 4, rcvd 54
也是同样,直接暴露出了SSH的服务。 根据端口信息判断一个IP属于何种类型一个公网IP可能有很多种类型可能是基站,ISP出口网关,也可能是服务器,也可能是一些网络设备如摄像头、打印机、智能硬件等。总体来说,具有开放端口的一般都是服务器,而网关和基站一般不会有任何端口处于开放状态。但是也不排除有个别基站的防火墙会将一些特定的端口重定向到一些服务器上(一般是运营商的官网)。。 但是,如果开放 21(ftp) 22 (ssh) 25(telnet)则可以基本确定是服务器。 智能硬件的端口一般在3000-10000的范围内,一个不确定的端口。 打印机有几个很大概率的端口,比如515 等,有些打印机也有自己的一个web端的管理后台,通常放在80或者8080。 根据端口扫描的结果,我们可以粗略的判断一个ip背后是属于哪一种设备。 0×03 端口探测的原理0.探测状态的原理首先,我们要明白,端口的三种状态,分别是: - OPEN
- CLOSED
- FILTERED
那么,这三种状态分别代表着什么呢? 1.OPEN 端口处于OPEN状态,代表着 - 这个端口是开放的,可以被访问
- 这个端口上面有进程(应用程序监听)
2.Filtered - 这个端口不会返回任何东西
- 可能是被防火墙屏蔽了,也就是说,这个包被丢弃了
3.Closed - 这个端口是可以被访问的
- 这个端口上没有程序监听,但是会返回包
以TCP-SYN 探测为例: OPEN 返回 SYN-ACK CLOSED 返回 RST FILTERED 啥都不反回
附注: 防火墙不一定会完全丢弃(DROP)包,也可根据用户的设置来进行其他操作以iptables为例: iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply
将-j设置为REJECT就可以显示为
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|