端口信息收集

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

端口扫描

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

原理

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

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

  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 探测一样。

常见收集工具

在线工具

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)脚本引擎功能,脚本可以对基本功能进行补充和扩展。

文档

参数

nmap –iflist : 查看本地主机的接口信息和路由信息

-A :选项用于使用进攻性方式扫描

-T4: 指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4

-oX test.xml: 将扫描结果生成 test.xml 文件,如果中断,则结果打不开

-oA test.xml: 将扫描结果生成 test.xml 文件,中断后,结果也可保存

-oG test.txt: 将扫描结果生成 test.txt 文件

-sn : 只进行主机发现,不进行端口扫描 -O : 指定Nmap进行系统版本扫描

-sV: 指定让Nmap进行服务版本扫描

-p <port ranges>: 扫描指定的端口

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描

-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况

-script <script name> : 指定扫描脚本

-Pn : 不进行ping扫描

-sP : 用ping扫描判断主机是否存活,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping

-PI : 设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。

-iL 1.txt : 批量扫描1.txt中的目标地址

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现

-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况

-sO: 使用IP protocol 扫描确定目标机支持的协议类型

-PO : 使用IP协议包探测对方主机是否开启

-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 请求包发现主机

-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式进行发现

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态

-e eth0:指定使用eth0网卡进行探测

-f : --mtu <val>: 指定使用分片、指定数据包的 MTU.

-b <FTP relay host>: 使用FTP bounce scan扫描方式

-g: 指定发送的端口号

-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)

-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态

-n : 表示不进行DNS解析;

-D <decoy1,decoy2[,ME],...>: 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址 -R :表示总是进行DNS解析。

-F : 快速模式,仅扫描TOP 100的端口

-S <IP_Address>: 伪装成其他 IP 地址

--ttl <val>: 设置 time-to-live 时间 --badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或 IDS/IPS)

--dns-servers : 指定DNS服务器

--system-dns : 指定使用系统的DNS服务器

--traceroute : 追踪每个路由节点

--scanflags <flags>: 定制TCP包的flags

--top-ports <number> :扫描开放概率最高的number个端口

--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数

--version-trace: 显示出详细的版本侦测过程信息

--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)

--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统

--data-length <num>: 填充随机数据让数据包长度达到 Num

--ip-options <options>: 使用指定的 IP 选项来发送数据包

--spoof-mac <mac address/prefix/vendor name> : 伪装 MAC 地址

--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

--version-light: 指定使用轻量侦测方式 (intensity 2)

--version-all: 尝试使用所有的probes进行侦测 (intensity 9)

--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,这可以在不到6分钟内完成,每秒大约1000万个数据包。异步传输意味着扫描仪在发送探测器之前不必等待回复。而且它有一个独特的功能是,我们可以暂停和恢复任务,如果我们想要暂停一个扫描任务,我们可以使用ctrl + c ,来暂停任务,这时候会创建一个paused.conf来记载所有扫描的设置和进度,下次我们想要开始时,可以继续扫描配置文件。

文档

Github

参数

  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. 扫描网络的web端口

    masscan 10.11.0.0/16 -p80,443,8080 - rate 1000000

  2. 扫描网络的十大端口

    masscan 10.11.0.0/16 - top-ten- rate 1000000

  3. 扫描网络的所有端口

    masscan 10.11.0.0/16 -p0-65535 - rate 1000000

  4. 扫描互联网的一个端口

    masscan 0.0.0.0/0 -p443 - rate 10000000

  5. 扫描互联网的所有端口

    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实现高效率扫描资产

其他工具

其它还有一些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 安全攻防 渗透测试实战指南》

Last updated