> For the complete documentation index, see [llms.txt](https://394103765.gitbook.io/magic-book-of-high-salary/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://394103765.gitbook.io/magic-book-of-high-salary/trick-tree/pentest/information-leakage/information-collect/port-scan.md).

# 端口信息收集

总结端口信息收集相关知识点

## 端口扫描

在渗透测试过程中，收集端口也是一个很重要的过程，我们在得到服务器开放端口之后，就可以判断服务器上存在的服务，之后就可以对相应服务进行渗透测试。

### 原理

当我们向服务器的一个端口发起建立连接的请求时，如果服务器提供此项服务则会应答，否则不会应答，所以我们通过向可能存在相应服务的端口发起请求，并记录服务器返回的内容，即可知道服务器有可能开放了哪些端口。

### 端口对应服务以及攻击方向

1. 文件共享服务端口

   | 端口号      | 端口说明           | 攻击方向            |
   | -------- | -------------- | --------------- |
   | 21/22/69 | Ftp/Tftp文件传输协议 | 匿名上传、下载、爆破、嗅探   |
   | 2049/111 | Nfs服务          | 配置不当            |
   | 139      | Samba服务        | 爆破、未授权访问、远程代码执行 |
   | 389      | Ldap目录访问协议     | 注入、允许匿名访问、弱口令   |
   | 445      | SMB            | 远程执行            |
2. 远程连接服务端口

   | 端口号  | 端口说明       | 攻击方向                                          |
   | ---- | ---------- | --------------------------------------------- |
   | 22   | SSH远程连接    | 爆破、SSH隧道及内网代理转发、文件传输                          |
   | 23   | Telnet远程连接 | 爆破、嗅探、弱口令                                     |
   | 3389 | Rdp远程桌面连接  | Shift后门（需要Win2003以下系统）、爆破、Shift后门、放大镜后门、输入法漏洞 |
   | 5900 | VNC        | 弱口令爆破                                         |
   | 5632 | PyAnywhere | 抓密码、代码执行                                      |
3. Web应用服务端口

   | 端口号                         | 端口说明                             | 攻击方向               |
   | --------------------------- | -------------------------------- | ------------------ |
   | 80/443/8080/80-89/8000-9090 | 常见Web服务端口                        | Web攻击、爆破、对应服务器版本漏洞 |
   | 7001/7002                   | WebLogic控制台                      | Java反序列化、弱口令       |
   | 8080/8089                   | Jboss/Resin/Jetty/Jenkins/Tomcat | 反序列化、弱口令           |
   | 9090                        | WebSphere控制台                     | Java反序列化、弱口令       |
   | 4848                        | GlassFish控制台                     | 弱口令                |
   | 1352                        | Lotus domino邮件服务                 | 弱口令、信息泄露、爆破        |
   | 10000                       | Webmin-Web控制面板                   | 弱口令                |
4. 数据库服务端口

   | 端口号         | 端口说明           | 攻击方向             |
   | ----------- | -------------- | ---------------- |
   | 3306        | MySQL          | 注入、提权、爆破         |
   | 1433        | MSSQL数据库       | 注入、提权、SA弱口令、爆破   |
   | 1521        | Oracle数据库      | TNS爆破、注入、反弹shell |
   | 5432        | PostgreSQL     | 爆破、注入、弱口令        |
   | 27017/27018 | MongoDB        | 爆破、未授权访问         |
   | 6379        | Redis数据库       | 未授权访问、弱口令爆破      |
   | 5000        | SysBase/DB2数据库 | 爆破注入             |
5. 邮件服务端口

   | 端口号 | 端口说明     | 攻击方向  |
   | --- | -------- | ----- |
   | 25  | SMTP邮件服务 | 邮件伪造  |
   | 110 | POP3协议   | 爆破、嗅探 |
   | 143 | IMAP协议   | 爆破    |
6. 网络常见协议端口

   | 端口号   | 端口说明    | 攻击方向               |
   | ----- | ------- | ------------------ |
   | 53    | DNS域名系统 | 区域传送、DNS劫持、缓存投毒、欺骗 |
   | 67/68 | DHCP服务  | 劫持、欺骗              |
   | 161   | SNMP协议  | 爆破、搜集目标内网信息        |
7. 特殊服务端口

   | 端口号         | 端口说明                   | 攻击方向        |
   | ----------- | ---------------------- | ----------- |
   | 2181        | Zookeeper服务            | 未授权访问       |
   | 8069        | Zabix服务                | 远程执行、SQL注入  |
   | 9200/9300   | Elasticsearch服务        | 远程执行        |
   | 11211       | Memcache服务             | 未授权访问       |
   | 512/513/514 | Linux Rexec服务          | 爆破、Rlogin登陆 |
   | 873         | Rsync服务                | 匿名访问、文件上传   |
   | 3690        | Svn服务                  | Svn泄露、未授权访问 |
   | 50000       | SAP Management Console | 远程执行        |
   | 443         | SSL                    | 心脏滴血        |
   | 5984        | CouchDB                | 未授权访问       |
   | 27017/27018 | Mongodb                | 未授权访问       |
   | 50070/50030 | Hadoop                 | 未授权访问       |
8. 其他端口

   | 端口号         | 端口说明         | 攻击方向        |
   | ----------- | ------------ | ----------- |
   | 2601/2604   | zebra路由      | 默认密码zebra   |
   | 512/513/514 | Rexec        | 爆破、rlogin登陆 |
   | 1194        | openvpn      | 弱口令         |
   | 1500        | ispmanager   | 主机控制面板、弱口令  |
   | 1723        | pptp         | 爆破、弱口令账号    |
   | 2082/2083   | cpanel主机管理面板 | 弱口令         |
   | 3128        | squid代理服务    | 弱口令         |
   | 3312/3311   | kangle主机管理   | 弱口令         |
   | 4848        | glassfish控制台 | 弱口令         |
   | 10000       | webmin       | 弱口令         |
   | 1099        | Java rmi     | 远程执行        |

### 常见收集方法

#### telnet探测端口

telnet 探测端口采用完整的三次握手连接，使用TCP三次握手建立连接： SYN -> SYN+ACK + ACK，探测不存在端口，发送SYN数据包，然后RST包丢弃，如果有返回值，则说明端口开放，否则则端口关闭。

`telnet ip port`

#### nc探测端口

nc探测端口采用完整的三次握手连接，使用命令`nc -v -w 1 -z ip port`，发包过程和telent 探测一样。

### 常见收集工具

#### 在线工具

1. [站长工具](http://tool.chinaz.com/port/)
2. [PostJson](http://coolaf.com/tool/port)
3. [toollu](https://tool.lu/portscan/)
4. [MaTools](http://www.matools.com/port)
5. [便民查询网](https://saomiao.51240.com/)

#### Nmap

是一款开源免费的网络发现（Network Discovery）和安全审计（Security Auditing）工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下，该工具逐渐成为最为流行安全必备工具之一。

一般情况下，Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。

Nmap的优点：

```
灵活。支持数十种不同的扫描方式，支持多种目标对象的扫描
强大。Nmap可以用于扫描互联网上大规模的计算机
可移植。支持主流操作系统：Windows/Linux/Unix/MacOS等等；源码开放，方便移植
简单。提供默认的操作能覆盖大部分功能，基本端口扫描nmap targetip，全面的扫描nmap –A targetip
自由。Nmap作为开源软件，在GPL License的范围内可以自由的使用
文档丰富。Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部Nmap参考书籍
社区支持。Nmap背后有强大的社区团队支持
```

Nmap包含四项基本功能：

```
主机发现 (Host Discovery)
端口扫描 (Port Scanning)
版本侦测 (Version Detection)
操作系统侦测 (Operating System Detection)
```

而这四项功能之间，又存在大致的依赖关系(通常情况下的顺序关系，但特殊应用另外考虑)，首先需要进行主机发现，随后确定端口状态，然后确定端口上运行的具体应用程序和版本信息，然后可以进行操作系统的侦测。而在这四项功能的基础上，nmap还提供防火墙和 IDS 的规避技巧，可以综合运用到四个基本功能的各个阶段。另外nmap还提供强大的NSE(Nmap Scripting Language)脚本引擎功能，脚本可以对基本功能进行补充和扩展。

**文档**

1. [中文文档](https://nmap.org/man/zh/)
2. [官网](https://app.gitbook.com/s/-LrgrGdGxHJRhY-L_jYq/trick-tree/pentest/information-leakage/information-collect/%20https://nmap.org)
3. [NSE脚本使用大全](https://nmap.org/nsedoc/%20%20%20)

**参数**

> nmap –iflist : 查看本地主机的接口信息和路由信息&#x20;
>
> -A ：选项用于使用进攻性方式扫描
>
> &#x20;-T4： 指定扫描过程使用的时序，总有6个级别（0-5），级别越高，扫描速度越快，但也容易被防火墙或IDS检测并屏蔽掉，在网络通讯状况较好的情况下推荐使用T4&#x20;
>
> -oX test.xml： 将扫描结果生成 test.xml 文件，如果中断，则结果打不开
>
> &#x20;-oA test.xml: 将扫描结果生成 test.xml 文件，中断后，结果也可保存&#x20;
>
> -oG test.txt: 将扫描结果生成 test.txt 文件&#x20;
>
> -sn : 只进行主机发现，不进行端口扫描 -O : 指定Nmap进行系统版本扫描&#x20;
>
> -sV: 指定让Nmap进行服务版本扫描
>
> &#x20;-p \<port ranges>: 扫描指定的端口&#x20;
>
> -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描&#x20;
>
> -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况&#x20;
>
> -script \<script name> : 指定扫描脚本
>
> &#x20;-Pn ： 不进行ping扫描&#x20;
>
> -sP : 用ping扫描判断主机是否存活，只有主机存活，nmap才会继续扫描，一般最好不加，因为有的主机会禁止ping&#x20;
>
> -PI : 设置这个选项，让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。&#x20;
>
> -iL 1.txt : 批量扫描1.txt中的目标地址

> -sL: List Scan 列表扫描，仅将指定的目标的IP列举出来，不进行主机发现&#x20;
>
> -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况
>
> &#x20;-sO: 使用IP protocol 扫描确定目标机支持的协议类型
>
> &#x20;-PO : 使用IP协议包探测对方主机是否开启&#x20;
>
> -PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机
>
> &#x20;-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现&#x20;
>
> -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态
>
> &#x20;-e eth0：指定使用eth0网卡进行探测
>
> &#x20;-f : --mtu \<val>: 指定使用分片、指定数据包的 MTU.
>
> &#x20;-b \<FTP relay host>: 使用FTP bounce scan扫描方式
>
> &#x20;-g： 指定发送的端口号
>
> &#x20;-r: 不进行端口随机打乱的操作（如无该参数，nmap会将要扫描的端口以随机顺序方式扫描，以让nmap的扫描不易被对方防火墙检测到）
>
> &#x20;-v 表示显示冗余信息，在扫描过程中显示扫描的细节，从而让用户了解当前的扫描状态
>
> &#x20;-n : 表示不进行DNS解析；
>
> &#x20;-D \<decoy1,decoy2\[,ME],...>: 用一组 IP 地址掩盖真实地址，其中 ME 填入自己的 IP 地址 -R ：表示总是进行DNS解析。
>
> &#x20;-F : 快速模式，仅扫描TOP 100的端口&#x20;
>
> -S \<IP\_Address>: 伪装成其他 IP 地址
>
> &#x20;\--ttl \<val>: 设置 time-to-live 时间 --badsum: 使用错误的 checksum 来发送数据包（正常情况下，该类数据包被抛弃，如果收到回复，说明回复来自防火墙或 IDS/IPS）&#x20;
>
> \--dns-servers : 指定DNS服务器&#x20;
>
> \--system-dns : 指定使用系统的DNS服务器
>
> &#x20;\--traceroute : 追踪每个路由节点
>
> &#x20;\--scanflags \<flags>: 定制TCP包的flags
>
> &#x20;\--top-ports \<number> :扫描开放概率最高的number个端口&#x20;
>
> \--port-ratio \<ratio>: 扫描指定频率以上的端口。与上述--top-ports类似，这里以概率作为参数&#x20;
>
> \--version-trace: 显示出详细的版本侦测过程信息
>
> &#x20;\--osscan-limit: 限制Nmap只对确定的主机的进行OS探测（至少需确知该主机分别有一个open和closed的端口）
>
> &#x20;\--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少，但会尽可能多为用户提供潜在的操作系统&#x20;
>
> \--data-length \<num>: 填充随机数据让数据包长度达到 Num
>
> &#x20;\--ip-options \<options>: 使用指定的 IP 选项来发送数据包&#x20;
>
> \--spoof-mac \<mac address/prefix/vendor name> : 伪装 MAC 地址&#x20;
>
> \--version-intensity \<level>: 指定版本侦测强度（0-9），默认为7。数值越高，探测出的服务越准确，但是运行时间会比较长。&#x20;
>
> \--version-light: 指定使用轻量侦测方式 (intensity 2)&#x20;
>
> \--version-all: 尝试使用所有的probes进行侦测 (intensity 9)&#x20;
>
> \--version-trace: 显示出详细的版本侦测过程信息

**最佳实践**

1. **获取远程主机开放的端口、端口的服务、服务的版本、操作系统类型及其版本**

   单个目标：

   `nmap -sV -T4 -O --open ip`

   ip段：

   `nmap -sV -T4 -O --open 192.168.1.0/24 -oX /root/192.168.1.0.xml`

   从文本中读取：

   `nmap -sV -T4 -O --open 192.168.1.0/24 -oX /root/192.168.1.0.xml`
2. **快速获取开放特定端口的主机**

   `nmap -T4 -F 192.168.1.0`
3. **一个简单的万能扫描**

   `nmap -T5 -A 192.168.1.0 &>/root/nmap_out.txt`
4. **确认主机是否有拒绝服务的问题**

   `nmap -T5 --max-parallelism 600 --script http-slowloris 192.168.1.0`
5. **绕过ACL的简单实例**

   `nmap -sX -p- -Pn 192.168.1.0`
6. **简单检测是否有漏洞问题**

   `nmap -T5 -O -A -v --script vuln 192.168.1.0`
7. **简单的暴力破解测试**

   `nmap --script=brute 192.168.1.0`

#### Masscan

Masscan是为了尽可能快地扫描整个互联网而创建的，根据其作者[robert graham](https://twitter.com/erratarob)，这可以在不到6分钟内完成，每秒大约1000万个数据包。异步传输意味着扫描仪在发送探测器之前不必等待回复。而且它有一个独特的功能是，我们可以暂停和恢复任务，如果我们想要暂停一个扫描任务，我们可以使用`ctrl + c` ，来暂停任务，这时候会创建一个paused.conf来记载所有扫描的设置和进度，下次我们想要开始时，可以继续扫描配置文件。

**文档**

[Github](https://github.com/robertdavidgraham/masscan)

**参数**

> 1. -iL filename：从文件读取输入。
> 2. ‐‐exclude filename：在命令行中排除网络。
> 3. ‐‐excludefile：从文件中排除网络。
> 4. -S：欺骗源IP。
> 5. -v interface：详细输出。
> 6. -vv interface：非常冗长的输出。
> 7. -e interface：使用指定的接口。
> 8. -e interface：使用指定的接口。

**初级使用**

1. **单端口扫描**

   `Masscan 10.11.0.0/16 -p443`
2. **多端口扫描**

   `Masscan 10.11.0.0/16 -p80,443`
3. **扫描一系列端口**

   `Masscan 10.11.0.0/16 -p22-25`
4. **快速扫描**

   `Masscan 10.11.0.0/16 --top-ports 100 -rate 100000`
5. **排除exclude.txt中的目标**

   `Masscan 10.11.0.0/16 --top-ports 100 --excludefile exclude.txt`
6. **结果保存**

   `Masscan 10.11.0.0/16 --top-ports 100 > results.txt`

   > ```
   > -oX filename：输出到filename的XML。
   > -oG filename：输出到filename在的grepable格式。
   > -oJ filename：输出到filename在JSON格式。
   > ```

**进阶使用**

1. &#x20;扫描网络的web端口

   `masscan 10.11.0.0/16 -p80,443,8080 - rate 1000000`
2. &#x20;扫描网络的十大端口

   `masscan 10.11.0.0/16 - top-ten- rate 1000000`
3. &#x20;扫描网络的所有端口

   `masscan 10.11.0.0/16 -p0-65535 - rate 1000000`
4. &#x20;扫描互联网的一个端口

   `masscan 0.0.0.0/0 -p443 - rate 10000000`
5. &#x20;扫描互联网的所有端口

   `masscan 0.0.0.0/0 -p0-65535 -rate 10000000`

#### Nmap + Masscan

Masscan在扫描速度上优于Nmap，然而在Banner识别上，由于Nmap具有丰富的服务识别指纹库，因此我们应该结合Nmap的banner识别以及Masscan的速度两者优点结合。

**流程**

利用Masscan进行1-65535全端口扫描，扫描结果入库，针对Masscan探测到的存活端口调用Nmap进行服务指纹识别，这样Nmap调用次数就减少了一个量级，提高整体的扫描速度。

**挖坑**

这里是想自己写一个相应工具的，算是给自己挖了一个坑，如果读者目前有需要可以参考

[Nmap配合Masscan实现高效率扫描资产](https://www.freebuf.com/sectool/204578.html)

#### 其他工具

其它还有一些Windows平台下的工具，由于其使用方法比较直观，这里不做介绍。

1. 御剑高速TCP端口扫描工具
2. Zmap
3. Routerscan

### 分布式端口扫描

如果我们任务量比较巨大，我们就需要找到一种方法来把任务傅在分发到多台主机上进行并行扫描，我们可以使用DNmap来创建一个Nmap集群，它可以创建并管理一个主机集群，集群中的每台主机使用各自的带宽进行端口扫描。

**地址**

```
http://downloads.sourceforge.net/project/dnmap/dnmap_v0.6.tgz
```

**用法**

1. 创建任务文件'target.txt'

   ```
   nmap -A -Pn -v -p1-1024 192.168.56.103 
   nmap -A -Pn -v -p1024-10000 192.168.56.103
   ```
2. 启动服务端

   `python dnmap_server.py -f ~/commands.txt`
3. 客户端连接

   `python dnmap_client.py -s 192.168.56.101 -a minion1`
4. 结果保存在\`nmap\_result'目录下

### Waf绕过

硬糖师傅在DC0531上说过这样一件事，就是现在有很多企业都部署了相应的安全设备，有可能我们在扫描的时候就会触发他们的告警机制，他们就会返回给我们大量其实没有开放的端口，从而扰乱我们的探测，我们在批量探测的时候可以写一个脚本，灵活设置服务的阈值，比如我们设定一个服务最多拥有80个端口，我们如果扫描到的结果中返回端口数量大于80，我们就可以认为已经被waf检测到，就可以选择跳过当前任务，节省流量与时间。

## 参考资料

1. 《PHP Web安全开发实战》
2. 《Web 安全攻防 渗透测试实战指南》
3. [Nmap详解](https://blog.csdn.net/qq_36119192/article/details/82079150)
4. [扫描神器nmap最佳实践使用](https://blog.csdn.net/qq_29277155/article/details/50971727)
5. [masscan教程和入门手册](https://www.4hou.com/tools/8251.html)
6. &#x20;[宜人贷安全建设之端口监控服务篇](https://mp.weixin.qq.com/s/jbgG66jHih7xKxKXwZE2Ew)
7. [分布式端口扫描利刃: 使用DNmap创建Nmap集群](https://www.secpulse.com/archives/4713.html)
