【悟剑堂】隐侠 研究与发展部,负责最新的网络安全技术研究和发展,跟踪国际安全趋势,开发内部使用的工具和技术。
一、设备资产指纹收集的重要性
-
准确识别网络中的应用程序,了解其类型、版本和功能。 -
发现潜在的安全漏洞和风险,针对性地进行安全防护。 -
对网络资产进行分类管理,提高企业网络安全资产管理能力。 以公安部第一研究所的网探D01产品为例,企业资产测绘完成后,可针对性管理:
二、操作梳理设备资产指纹收集的关键技术
1.端口扫描
端口扫描是一种常见的应用指纹收集技术。通过向目标设备的不同端口发送探测数据包,可以确定哪些端口是开放的。
根据开放端口的类型,可以推断出可能运行的应用程序,例如常见的 HTTP 服务通常运行在 80 或 443 端口,可能对应着各种 Web 应用程序,其余可参考如下:
端口号:21 服务:FTP(文件传输协议)
端口号:22 服务:SSH(安全外壳协议)
端口号:23 服务:Telnet(远程登录协议)
端口号:25 服务:SMTP(简单邮件传输协议)
端口号:53 服务:DNS(域名系统)
端口号:67/68 服务:DHCP(动态主机配置协议)
端口号:80 服务:HTTP(超文本传输协议)
端口号:110 服务:POP3(邮局协议版本3)
端口号:119 服务:NNTP(网络新闻传输协议)
端口号:123 服务:NTP(网络时间协议)
端口号:139/445 服务:SMB/CIFS(Server Message Block/通用Internet文件系统)
端口号:143 服务:IMAP(Internet消息访问协议)
端口号:161/162 服务:SNMP(简单网络管理协议)
端口号:389 服务:LDAP(轻型目录访问协议)
端口号:443 服务:HTTPS(安全超文本传输协议)
端口号:465 服务:SMTPS(SMTP安全协议)
端口号:514 服务:Syslog(系统日志)
端口号:873 服务:rsync(远程同步)
端口号:989/990 服务:FTPS(SSL/TLS加密FTP)
端口号:993 服务:IMAPS(IMAP安全协议)
端口号:995 服务:POP3S(POP3安全协议)
端口号:1080 服务:SSH隧道代理
端口号:1433 服务:MSSQL(Microsoft SQL Server)
端口号:1521 服务:Oracle数据库
端口号:3306 服务:MySQL数据库
端口号:3389 服务:RDP(远程桌面协议)
端口号:5060 服务:SIP(会话发起协议)
端口号:5432 服务:PostgreSQL数据库
端口号:5555 服务:FTP虚拟专用网络
端口号:5900 服务:VNC(虚拟网络计算机)
端口号:6379 服务:Redis数据库
端口号:7001/7002 服务:Oracle WebLogic
端口号:9418 服务:Git(分布式版本控制系统)
端口号:9200/9300 服务:Elasticsearch
端口号:11211 服务:Memcached(高速缓存服务器)
端口号:1434 服务:MS SQL Monitor
端口号:1883/8883 服务:MQTT协议
端口号:2375/2376 服务:Docker
端口号:4444 服务:Metasploit RPC服务
端口号:27017 服务:mongDB 利用: 未授权访问,爆破
端口号:27018 服务:mongDB 利用: 未授权访问,爆破
端口号:50000 服务:SAP 利用: 命令执行
端口号:50010 服务:hadhoop 利用: 未授权访问
端口号:50030 服务:hadhoop 利用: 未授权访问
端口号:50070 服务:hadhoop 利用: 未授权访问
2.服务识别
服务识别通过分析目标设备对特定探测数据包的响应,来确定设备上运行的服务类型和版本。对于应用程序来说,服务的 banner 信息、响应数据包的特征等可以提供关于应用的重要线索。比如,某些 Web 服务器在响应中会包含特定的服务器软件名称和版本号。
具体可参考如下:
Web 服务器相关
(1)Apache HTTP Server:常见的 banner 如 “Apache/2.4.xx (Unix) PHP/7.xx”,其中的版本号(2.4.xx 和 7.xx 等)会根据实际安装的版本有所不同,它表明了服务器使用的 Apache 版本以及相关联的 PHP 版本(如果有)。
(2)Nginx:例如 “nginx/1.18.xx”,这里的 1.18.xx 就是具体的 Nginx 版本号,通过这个 banner 可以知道服务器端使用的 Nginx 版本情况。
数据库相关
(1)MySQL:可能出现 “MySQL 8.0.xx Community Server - GPL”,8.0.xx 是 MySQL 的版本,通过 banner 能了解到数据库的版本及授权类型(如这里的社区版 - GPL)。
(2)Oracle Database:典型的 banner 有 “Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production”,其中明确显示了数据库版本(19c)、版本号(19.0.0.0.0)以及版本类型(企业版)等重要信息。
(3)Microsoft SQL Server:比如 “Microsoft SQL Server 2019 (RTM) - 15.0.xx”,这里的 2019 是版本年份,15.0.xx 是具体的版本标识,据此可判断服务器端使用的 SQL Server 版本。
邮件服务器相关
(1)Postfix:常见的 banner 为 “Postfix ESMTP service ready”,这表明服务器的邮件传输代理(MTA)是 Postfix 且已准备好接收 SMTP 连接进行邮件发送操作。
(2)Sendmail:可能出现 “Sendmail 8.15.xx ESMTP Sendmail-8.15.xx ready at...”,8.15.xx 是 Sendmail 的版本号,从 banner 能知晓服务器正在使用的 Sendmail 版本以及其准备好进行邮件传输服务的状态。
(3)Exim:例如 “Exim 4.92.xx daemon started: pid=xxxx”,其中 4.92.xx 是 Exim 的版本,通过这个 banner 可以知道 Exim 邮件服务器的启动情况及版本信息。
FTP 服务器相关
(1)vsFTPd:常见的 banner 如 “220 (vsFTPd 3.0.xx) ready”,这里的 3.0.xx 就是 vsFTPd 的版本号,通过 banner 可得知服务器使用的 vsFTPd 版本及它已准备好接受 FTP 连接的状态。
(2)ProFTPD:可能出现 “220 ProFTPD 1.3.xx Server (Debian) [::ffff:127.0.0.1] ready”,1.3.xx 是 ProFTPD 的版本,并且还能看到服务器运行的操作系统环境(如这里的 Debian)等相关信息。
SSH 服务器相关
(1)OpenSSH:典型的 banner 有 “SSH-2.0-OpenSSH_8.2.xx”,其中 8.2.xx 是 OpenSSH 的版本号,通过这个 banner 可以明确服务器端使用的 OpenSSH 版本。
(2)Dropbear:例如 “SSH-2.0-Dropbear_2020.81.xx”,这里的 2020.81.xx 是 Dropbear 的版本,从 banner 能了解到服务器正在使用的 Dropbear 版本用于 SSH 连接。
其他应用
Tomcat:常见的 banner 为 “Apache Tomcat/9.0.xx”,9.0.xx 是 Tomcat 的版本号,通过它可以知道服务器上运行的 Tomcat 版本情况。
Redis:可能出现 “Redis 6.0.xx (standalone)”,6.0.xx 是 Redis 的版本,表明服务器端使用的 Redis 版本以及其运行模式(这里是独立模式)。
Memcached:例如 “Memcached 1.6.xx (Ubuntu)”,1.6.xx 是 Memcached 的版本,并且还能看出其运行的操作系统环境(如这里的 Ubuntu)等相关信息。
Node.js:常见的 banner 有 “Node.js v14.17.xx”,14.17.xx 是 Node.js 的版本号,通过它可以了解到服务器端使用的 Node.js 版本。
Python (Flask 等 Web 框架):可能出现 “Python 3.8.xx | Flask 1.1.xx”,这里既显示了 Python 的版本(3.8.xx)又显示了所使用的 Web 框架 Flask 的版本(1.1.xx),能让我们了解到服务器端的开发环境相关信息。
Django:例如 “Django 3.2.xx (Python 3.9.xx)”,这里明确展示了 Django 的版本(3.2.xx)以及其所基于的 Python 版本(3.9.xx),有助于了解服务器端 Web 应用的开发框架及语言版本情况。
WordPress:常见的 banner 为 “WordPress 5.8.xx”,5.8.xx 是 WordPress 的版本号,通过它可以知道网站使用的 WordPress 版本用于内容管理。
Joomla:可能出现 “Joomla! 3.10.xx”,3.10.xx 是 Joomla 的版本,通过 banner 能了解到网站使用的 Joomla 版本进行内容管理。
Drupal:例如 “Drupal 9.3.xx”,9.3.xx 是 Drupal 的版本,表明网站使用的 Drupal 版本用于内容管理。
RabbitMQ:常见的 banner 有 “AMQP 0.9.1-compliant client (RabbitMQ 3.8.xx)”,3.8.xx 是 RabbitMQ 的版本,通过它可以了解到服务器端使用的 RabbitMQ 版本以及其遵循的 AMQP 协议版本(0.9.1)。
Elasticsearch:可能出现 “Elasticsearch 7.10.xx”,7.10.xx 是 Elasticsearch 的版本,通过 banner 能了解到服务器端使用的 Elasticsearch 版本用于数据搜索和分析。
Logstash:例如 “Logstash 7.10.xx”,7.10.xx 是 Logstash 的版本,表明服务器端使用的 Logstash 版本用于数据收集和处理。
Kibana:常见的 banner 为 “Kibana 7.10.xx”,7.10.xx 是 Kibana 的版本,通过它可以知道服务器端使用的 Kibana 版本用于数据可视化。
MongoDB:可能出现 “MongoDB 3.8.xx (Ubuntu)”,3.8.xx 是 MongoDB 的版本,并且还能看出其运行的操作系统环境(如这里的 Ubuntu)等相关信息。
Zookeeper:例如 “Apache Zookeeper 3.8.xx”,3.8.xx 是 Zookeeper 的版本,通过 banner 能了解到服务器端使用的 Zookeeper 版本用于分布式系统的协调。
Hadoop:常见的 banner 为 “Apache Hadoop 3.2.xx”,3.2.xx 是 Hadoop 的 3.2.xx 版本,通过它可以知道服务器端使用的 Hadoop 版本用于大数据处理。
Spark:可能出现 “Apache Spark 3.1.xx”,3.1.xx 是 Spark 的版本,通过 banner 能了解到服务器端使用的 Spark 版本用于大数据处理。
Flume:例如 “Apache Flume 3.1.xx”,3.1.xx 是 Flume 的版本,表明服务器端使用的 Flume 版本用于数据采集和传输。
Kafka:常见的 banner 为 “Apache Kafka 3.2.xx”,3.2.xx 是 Kafka 的版本,通过它可以知道服务器端使用的 Kafka 版本用于消息传递和数据存储。
Cassandra:可能出现 “Apache Cassandra 3.8.xx”,3.8.xx 是 Cassandra 的版本,通过 banner 能了解到服务器端使用的 Cassandra 版本用于分布式数据库管理。
Hyperledger Fabric:例如 “Hyperledger Fabric 2.2.xx”,2.2.xx 是 Hyperledger Fabric 的版本,通过 banner 能了解到服务器端使用的 Hyperledger Fabric 版本用于区块链相关业务。
Ethereum:常见的 banner 为 “Ethereum 1.10.xx”,1.10.xx 是 Ethereum 的版本,通过它可以知道服务器端使用的 Ethereum 版本用于区块链相关业务。
Solana:可能出现 “Solana 1.8.xx”,1.8.xx 是 Solana 的版本,通过 banner 能了解到服务器端使用的 Solana 版本用于区块链相关业务。
Stripe:例如 “Stripe API v2.0.xx”,2.0.xx 是 Stripe 的版本,表明服务器端使用的 Stripe 版本用于支付处理等业务。
PayPal:常见的 banner 为 “PayPal API v3.0.xx”,3.0.xx 是 PayPal 的版本,通过它可以知道服务器端使用的 PayPal 版本用于支付处理等业务。
AWS Lambda:可能出现 “AWS Lambda 3.1.xx”,3.1.xx 是 AWS Lambda 的版本,通过 banner 能了解到服务器端使用的 AWS Lambda 版本用于 serverless 计算。
Google Cloud Functions:例如 “Google Cloud Functions 3.1.xx”,3.1.xx 是 Google Cloud Functions 的版本,表明服务器端使用的 Google Cloud Functions 版本用于 serverless 计算。
Azure Functions:常见的 banner 为 “Azure Functions 3.1.xx”,3.1.xx 是 Azure Functions 的版本,通过它可以知道服务器端使用的 Azure Functions 版本用于 serverless 计算。
Docker:可能出现 “Docker version 20.10.xx”,20.10.xx 是 Docker 的版本,通过 banner 能了解到服务器端使用的 Docker 版本用于容器化技术。
Kubernetes:例如 “Kubernetes v1.18.xx”,1.18.xx 是 Kubernetes 的版本,表明服务器端使用的 Kubernetes 版本用于容器编排。
Jenkins:常见的 banner 为 “Jenkins 2.4.xx”,2.4.xx 是 Jenkins 的版本,通过它可以知道服务器端使用的 Jenkins 版本用于持续集成和持续交付。
GitLab CI/CD:可能出现 “GitLab CI/CD 1.10.xx”,1.10.xx 是 GitLab CI/CD 的版本,通过 banner 能了解到服务器端使用的 GitLab CI/CD 版本用于持续集成和持续交付。
Travis CI:例如 “Travis CI 1.10.xx”,1.10.xx 是 Travis CI 的版本,表明服务器端使用的 Travis CI 版本用于持续集成和持续交付。
CircleCI:常见的 banner 为 “CircleCI 1.10.xx”,1.10.xx 是 CircleCI 的版本,通过它可以知道服务器端使用的 CircleCI 版本用于持续集成和持续交付。
Ansible Tower:可能出现 “Ansible Tower 3.1.xx”,3.1.xx 是 Ansible Tower 的版本,通过 banner 能了解到服务器端使用的 Ansible Tower 版本用于 IT 基础设施管理。
Puppet Enterprise:例如 “Puppet Enterprise 3.1.xx”,3.1.xx 是 Puppet Enterprise 的版本,表明服务器端使用的 Puppet Enterprise 版本用于 IT 基础设施管理。
Chef Server:常见的 banner 为 “Chef Server 3.1.xx”,3.1.xx 是 Chef Server 的版本,通过它可以知道服务器端使用的 Chef Server 版本用于 IT 基础设施管理。
Splunk:可能出现 “Splunk 7.10.xx”,7.10.xx 是 Splunk 的版本,通过 banner 能了解到服务器端使用的 Splunk 版本用于 data logging and analytics.
Elastic APM:例如 “Elastic APM 7.10.xx”,7.10.xx 是 Elastic APM 的版本,表明服务器端使用的 Elastic APM 版本用于 application performance monitoring.
New Relic:常见的 banner 为 “New Relic 7.10.xx”,7.10.xx 是 New Relic 的版本,通过它可以知道服务器端使用的 New Relic 版本用于 application performance monitoring.
AppDynamics:可能出现 “AppDynamics 7.10.xx”,7.10.xx 是 AppDynamics 的版本,通过 banner 能了解到服务器端使用的 AppDynamics 版本用于 application performance monitoring.
Zabbix:例如 “Zabbix 3.10.xx”,3.10.xx 是 Zabbix 的版本,表明服务器端使用的 Zabbix 版本用于 system monitoring and management.
Nagios:常见的 banner 为 “Nagios 3.10.xx”,3.10.xx 是 Nagios 的版 本,通过它可以知道服务器端使用的 Nagios 版本用于 system monitoring and management.
Prometheus:可能出现 “Prometheus 3.10.xx”,3.10.xx 是 Prometheus 的版本,通过 banner 能了解到服务器端使用的 Prometheus 版本用于 system monitoring and management.
Grafana:例如 “Grafana 7.10.xx”,7.10.xx 是 Grafana 的版本,表明服务器端使用的 Grafana 版本用于 data visualization.
InfluxDB 2.0.xx,2.0.xx 是 InfluxDB 的版本,通过 banner 能了解到服务器端使用的 InfluxDB 版本用于 time series data storage and analysis.
ClickHouse:例如 “ClickHouse 20.10.xx”,20.10.xx 是 ClickHouse 的版本,表明服务器端使用的 ClickHouse 版本用于 high-speed data analysis.
Snowflake:常见的 banner 为 “Snowflake 3.10.xx”,3.10.xx 是 Snowflake 的版本,通过它可以知道服务器端使用的 Snowflake 版本用于 cloud data warehouse.
Databricks 2.0.xx,2.0.xx 是 Databricks 的版本,通过 banner 能了解到服务器端使用的 Databricks 版本用于 big data analytics.
Google BigQuery 3.10.xx,3.10.xx 是 Google BigQuery 的版本,通过 banner 能了解到服务器端使用的 Google BigQuery 版本用于 cloud data warehouse.
3.应用特征分析
分析应用程序的特定特征,如页面布局、特定文件的存在、特定的 URL 路径等。
例如,一些 CMS(内容管理系统)可能在页面的 HTML 代码中包含特定的标识信息,或者在特定目录下存在特定的文件。
以下是具体案例:
CMS(内容管理系统)相关
1.WordPress:
(1)页面布局特征:在网页源代码的 <head> 标签内,通常会有类似 <link rel="stylesheet" href="https://example.com/wp-content/themes/[theme_name]/style.css"> 的代码,通过 wp-content/themes/ 路径可以看出主题文件的存放位置,不同主题会有不同的 [theme_name]。
(2)特定文件存在:在网站根目录下有 wp-login.php 文件,用于用户登录到 WordPress 后台管理界面。还有 wp-config.php,该文件包含了数据库连接等重要配置信息,但通常会被设置权限以防止直接访问。
(3)特定 URL 路径:常见的管理后台路径是 /wp-admin/,用户通过访问该路径并登录后可对网站内容、插件、主题等进行管理。另外,文章、页面等内容的 URL 路径通常会类似 /category/[category_name]/[post_name]/ 或 /page/[page_name]/ 的形式,其中 [category_name] 是文章所属分类,[post_name] 是文章的别名,[page_name] 是页面名称。
2.Joomla:
(1)页面布局特征:在 HTML 代码中,可能会出现类似 <link rel="stylesheet" href="https://example.com/templates/[template_name]/css/template.css"> 的样式表引用,通过 templates/[template_name]/ 能知晓模板文件的大致位置,不同模板对应不同的 [template_name]。
(2)特定文件存在:根目录下有 administrator/ 文件夹,里面的 index.php 是进入 Joomla 后台管理的入口文件。还有 configuration.php,它保存着数据库连接等关键配置内容。
(3)特定 URL 路径:管理后台的标准路径是 /administrator/,通过此路径登录后可管理网站的各个方面。内容页面的 URL 路径可能呈现为 /[category_alias]/[article_alias]/ 的形式,其中 [category_alias] 是分类别名,[article_alias] 是文章别名。
3.Drupal:
(1)页面布局特征:在网页源代码里,能看到类似 <link rel="stylesheet" href="https://example.com/themes/[theme_name]/css/styles.css"> 的样式表链接,表明 themes/[theme_name]/ 是主题样式文件所在的大致区域,不同主题有不同 [theme_name]。
(2)特定文件存在:网站根目录下存在 sites/default/settings.php 文件,它包含了诸多重要的配置信息,如数据库连接设置等。同时,modules/ 文件夹用于存放各种模块文件,不同功能的模块会在这个文件夹下有对应的子文件夹或文件。
(3)特定 URL 路径:管理后台一般通过 /admin/ 路径访问,在这里可以对网站的内容、用户、模块等进行管理操作。内容页面的 URL 路径常见为 /node/[node_id]/ 的形式,其中 [node_id] 是内容节点的唯一标识。
电商平台相关
1.Shopify:
(1)页面布局特征:在页面 HTML 代码中,经常会有指向 https://cdn.shopify.com/ 域名下的资源引用,比如样式表、脚本等,这是 Shopify 用于提供各种通用资源的 CDN(内容分发网络)。
(2)特定文件存在:在店铺的后台管理界面中,有 themes/ 文件夹,里面存放着不同的主题文件,每个主题都有其独特的布局和设计文件。另外,还有 products/ 文件夹用于存放商品相关的数据文件等。
(3)特定 URL 路径:管理后台的登录路径通常是 /admin/,通过此路径进入后可对店铺的商品、订单、客户等进行全面管理。商品页面的 URL 路径一般会是 /products/[product_handle]/ 的形式,其中 [product_handle] 是商品的唯一标识(类似于别名)。
2.Magento:
(1)页面布局特征:HTML 代码中可能会出现指向 https://example.com/media/ 路径下的图片、视频等资源引用,这里的 media/ 是 Magento 用于存放各类媒体资源的区域。
(2)特定文件存在:根目录下有 app/ 文件夹,里面包含了众多核心的应用程序文件,用于实现各种电商功能,如订单处理、用户管理等。同时,var/ 文件夹用于存放临时数据、日志等文件。
(3)特定 URL 路径:管理后台的入口路径是 /admin/,进入后可对整个电商平台的运营进行管理。商品页面的 URL 路径可能呈现为 /catalog/product/view/id/[product_id]/ 的形式,其中 [product_id] 是商品的唯一标识。
论坛系统相关
1. phpBB:
页面布局特征:在网页源代码中,会有类似 <link rel="stylesheet" href="https://example.com/styles/[style_name]/theme/[theme_name]/stylesheet.css"> 的样式表引用,通过 styles/[style_name]/theme/[theme_name]/ 可以了解到风格和主题相关文件的存放位置,不同的风格和主题会有不同的 [style_name] 和 [theme_name]。
特定文件存在:根目录下有 admins/ 文件夹,里面的 index.php 是进入 phpBB 论坛管理后台的入口文件。还有 config.php,它保存着数据库连接等重要配置信息。
特定 URL 路径:管理后台的路径通常是 /admins/,通过此路径进入后可对论坛的板块、用户、帖子等进行管理。论坛帖子的 URL 路径一般会是 /viewtopic.php?f=[forum_id]&t=[topic_id] 的形式,其中 [forum_id] 是论坛板块的唯一标识,[topic_id] 是话题的唯一标识。
2.vBulletin:
页面布局特征:在 HTML 代码中,可能会出现指向 https://example.com/templates/[template_name]/css/stylesheet.css 的样式表引用,通过 templates/[template_name]/ 能知晓模板文件的存放位置,不同模板有不同的 [template_name]。
特定文件存在:根目录下有 admincp/ 文件夹,里面的 index.php 是进入 vBulletin 论坛管理后台的入口文件。还有 config.php,它保存着数据库连接等重要配置信息。
特定 URL 路径:管理后台的路径通常是 /admincp/,通过此路径进入后可对论坛的板块、用户、帖子等进行管理。论坛帖子的 URL 路径一般会是 /showthread.php?f=[forum_id]&t=[topic_id] 的形式,其中 [forum_id] 是论坛板块的唯一标识,[topic_id] 是话题的唯一标识。
博客平台相关
3.Blogger:
页面布局特征:在网页源代码的 <head> 标签内,会有指向 https://www.blogger.com/ 域名下的一些脚本和样式表引用,比如 <script src="https://www.blogger.com/static/js/blogger.js"></script>,这表明其部分功能依赖于 Blogger 平台自身提供的资源。
特定文件存在:虽然用户无法直接访问到服务器端的文件,但在后台管理界面中,有与博客文章、模板、设置等相关的各种数据存储和处理模块,这些模块会在后台数据库等地方以特定的格式和结构存在。
特定 URL 路径:管理后台的登录路径通常是 /admin/,通过此路径进入后可对博客的内容、模板、设置等进行管理。博客文章的 URL 路径一般会是 /[blog_id]/[post_id]/ 的形式,其中 [blog_id] 是博客的唯一标识,[post_id] 是文章的唯一标识。
4.Tumblr:
页面布局特征:在 HTML 代码中,经常会有指向 https://www.tumblr.com/ 域名下的资源引用,如样式表、脚本等,这表明其功能实现很大程度上依赖于 Tumblr 平台自身的资源。
特定文件存在:同样,在后台管理界面中,有针对博客文章、媒体、设置等的各种数据存储和处理机制,这些会以特定的格式和结构存在于后台系统中。
特定 URL 路径:管理后台的登录路径通常是 /dashboard/,通过此路径进入后可对博客的内容、媒体、设置等进行管理。博客文章的 URL 路径一般会是 /post/[post_id]/ 的形式,其中 [post_id] 是文章的唯一标识。
其他应用程序
1.GitHub:
页面布局特征:在网页源代码中,会有大量指向 https://github.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其丰富的代码托管、项目管理等功能。
特定文件存在:对于每个仓库,有 README.md 文件,它是对项目的一个简要介绍,通常位于仓库的根目录。还有 LICENSE 文件,用于说明项目的授权情况,也可能位于根目录或有特定的存放位置。
特定 URL 路径:项目的主页面路径通常是 /[owner]/[repository_name]/ 的形式,其中 [owner] 是项目所有者的用户名,[repository_name] 是项目的名称。另外,还有诸如 /[owner]/[repository_name]/issues/ 用于查看项目的问题列表, /[owner]/[repository_name]/pulls/ 用于查看项目的拉取请求等特定路径。
2.GitLab:
页面布局特征:HTML 代码中会有大量指向 https://gitlab.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其代码托管、项目管理等功能。
特定文件存在:每个项目有 README.md 文件,用于对项目进行简要介绍,通常位于仓库的根目录。And LICENSE 文件, which is used to indicate the license situation of the project, may also be located in the root directory or have a specific location.
特定 URL 路径:项目主页面的路径通常是 /[owner]/[repository_name]/ 的形式,其中 [owner] 是项目所有者的用户名,[repository_name] 是项目的名称。There are also specific paths such as /[owner]/[repository_name]/issues/ for viewing the issue list of the project, /[owner]/[repository_name]/pulls/ for viewing the pull requests of the project.
3.Dropbox:
页面布局特征:在网页源代码中,会有指向 https://www.dropbox.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其文件存储、同步等功能。
特定文件存在:用户在本地安装 Dropbox 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Dropbox 或 /home/[user_name]/Dropbox 等),用于存放与 Dropbox 服务器同步的文件。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的文件、文件夹等进行管理。And the URL path of a file or folder might be /files/[file_id]/ or /folders/[folder_id]/ in some cases, where [file_id] is the unique identifier of the file and [folder_id] is the unique identifier of the folder.
4.Google Drive:
页面布局特征:在网页源代码中,会有大量指向 https://drive.google.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其文件存储、共享等功能。
特定文件存在:用户在本地安装 Google Drive 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Google Drive 或 /home/[user_name]/Google Drive 等),用于存放与 Google Drive 服务器同步的文件。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的文件、文件夹等进行管理。And the URL path of a file or folder might be /file/d/[file_id]/ or /folder/d/[folder_id]/ in some cases, where [file_id] 是文件的唯一标识,[folder_id] 是文件夹的唯一标识。
5.Microsoft OneDrive:
页面布局特征:在网页源代码中,会有指向 https://onedrive.microsoft.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其文件存储、同步等功能。
特定文件存在:用户在本地安装 Microsoft OneDrive 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]OneDrive 或 /home/[user_name]OneDrive 等),用于存放与 Microsoft OneDrive 服务器同步的文件。
特定 URL 路径:登录页面的路 径通常是 /login/,通过此路径进入后可对自己的文件、文件夹等进行管理。And the URL path of a file or folder might be /file/[file_id]/ or /folder/[folder_id]/ in some cases, where [file_id] 是文件的唯一标识,[folder_id] 是文件夹的唯一标识。
6.Zoom:
页面布局特征:在网页源代码中,会有指向 https://zoom.us/ 域名下的资源引用,包括样式表、脚本等,用于实现其视频会议、音频会议等功能。
特定文件存在:用户在本地安装 Zoom 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Zoom 或 /home/[user_name]Zoom 等),用于存放相关的配置文件、日志文件等。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的会议、参会人员等进行管理。And the URL path of a meeting might be /j/[meeting_id]/ in some cases, where [meeting_id] 是会议的唯一标识。
7.Slack:
页面布局特征:在网页源代码中,会有指向 https://slack.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其团队沟通、协作等功能。
特定文件存在:用户在本地安装 Slack 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Slack 或 /home/[user_name]Slack 等),用于存放相关的配置文件、日志文件等。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的团队、频道、消息等进行管理。And the URL path of a channel might be /channel/[channel_id]/ in some cases, where [channel_id] 是频道的唯一标识。
8.Trello:
页面布局特征:在网页源代码中,会有指向 https://trello.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其项目管理、任务分配等功能。
特定文件存在:用户在本地安装 Trello 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Trello 或 /home/[user_name]Trello 等),用于存放相关的配置文件、日志文件等。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的项目、任务、卡片等进行管理。And the URL path of a task might be /task/[task_id]/ in some cases, where [task_id] 是任务的唯一标识。
9.Asana:
页面布局特征:在网页源代码中,会有指向 https://asana.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其项目管理、任务分配等功能。
特定文件存在:用户在本地安装 Asana 客户端后,在本地磁盘上会 3 有一个特定的文件夹(通常是 C:Users[user_name]Asana 或 /home/[user_name]Asana 等),用于存放相关的配置文件、日志文件等。
特定 URL 路径:登录页面的路径通常是 /login/,通过此路径进入后可对自己的项目、任务、卡片等进行管理。And theURL path of a task might be /task/[task_id]/ in some cases, where [task_id] 是任务的唯一标识。
10.Jira:
页面布局特征:在网页源代码中,会有指向 https://jira.com/ 域名下的资源引用,包括样式表、脚本等,用于实现其 issue tracking、project management 等功能。
特定文件存在:用户在本地安装 Jira 客户端后,在本地磁盘上会有一个特定的文件夹(通常是 C:Users[user_name]Jira 或 /home/[user_name]Jira 等)
三、团队收集的应用指纹集
我们的团队经过长时间的努力,收集了大量的应用指纹信息,形成了一个丰富的应用指纹集。这个指纹集包含了以下主要内容:
- 各种常见的 OA 应用指纹,如钉钉、企业微信、泛微 OA 等。这些应用通常具有特定的登录页面风格、功能模块布局以及特定的 URL 结构。
- 不同类型的 CMS 指纹,如 WordPress、Drupal、Joomla 等。我们通过分析这些 CMS 的页面代码特征、插件目录结构、数据库连接方式等方面,确定了它们的独特指纹。
- 电子商务平台指纹,如 Magento、Shopify 等。这些平台在页面设计、订单处理流程以及与支付网关的交互方式等方面具有特定的特征。
我们的应用指纹集不断更新和完善,以确保能够准确地识别各种新型应用程序。同时,我们也对指纹信息进行了分类和整理,方便用户快速查询和使用。当前已在知识大陆进行共享:
四、常见指纹探测工具
P1finger(https://github.com/P001water/P1finger)
- 工具介绍:P1finger 是一款用于红队行动下的重点资产指纹识别工具。
- 功能特性
- 支持多种探测方式:可进行单个目标探测(如
P1finger -u [target]
)和多目标探测(如P1finger -uf [target file]
)。 - 输出格式灵活:能够将探测结果输出到 Excel 表格文件(如
P1finger -uf [target file] -o
)。 - 可指定指纹目录:默认读取指定目录下
.yaml
后缀的文件,用户也可指定指纹目录进行指纹识别。 - 支持代理设置:包括 socks5 代理(如
P1finger.exe -uf [target file] -socks 127.0.0.1:4781
)和 http 代理(如P1finger.exe -uf [target file] -httpproxy 127.0.0.1:4781
)。
- 支持多种探测方式:可进行单个目标探测(如
- 指纹识别示例:在实际使用中,如探测
http://47.75.114.215
,可返回指纹特征数量、命中指纹数量、webTitle 等信息,如[INF]指纹特征数量{1}, 命中指纹数量[1 ], http://47.75.114.215 webTitle:[盈雋微信营銷平台][pigcms-小猪CMS]
。
Finger(https://github.com/EASY233/Finger)
- 工具介绍:Finger 是一款红队在大量资产中进行存活探测与重点攻击系统指纹探测的工具。
- 功能特性
- 资产探测与识别:可对单个 URL 或指定文件中的多个 URL 进行指纹识别,支持批量操作,快速查找出重点攻击系统。
- 自动更新指纹库:默认会在线更新指纹库,确保使用的是最新的指纹规则。
- 多种输出格式:支持 xlsx、json 等格式保存数据,默认使用 xlsx 格式,方便数据的整理与分析。
- 集成外部接口调用:能够调用 fofa、360quake 的 api 来搜集资产,并自动进行存活探测以及指纹识别(仅获取 web 资产)。
- 配置灵活:可在
config/config.py
中修改默认线程数(默认 30),并根据实际情况配置 Fofa 和 360quake 的 key 信息以及相关参数。
- 指纹识别示例:例如对一批 URL 进行批量扫描,可识别出 WordPress 等系统及其相关信息,如
[17:08:07][+] WordPress ngi #
、[17:08:07][+] WordPress ng 200
等;调用 fofa api 进行资产收集时,可根据输入的关键词(如 thinkphp)查询并展示相关资产信息,包括标题、cms、服务器、状态、大小、是否 CDN、地址等。
FingerprintHub(https://github.com/0x727/FingerprintHub)
- 工具介绍:该仓库为侦查守卫(observer_ward)的指纹库,是一个基于社区的指纹识别工具的指纹库项目,旨在让管理和使用指纹规则更加简单。
- 功能特性
- 基础信息详细:包含指纹的基本信息,如名称、作者、标签、严重程度等,同时
metadata
中存储了产品、厂商、是否验证等信息,用于关联 nuclei 漏洞验证插件。 - 多种探针类型:分为 http 和 tcp 两种探针,http 探针可自定义请求方法、路径、请求头等,tcp 探针使用 Nmap 服务指纹识别,可设置写入数据、读取长度、主机等。
- 灵活的匹配器:包括关键词、favicon 哈希、正则表达式等匹配方式,可设置匹配位置(header 或 body)、是否忽略大小写、匹配关系(or 和 and)等,提高指纹识别的准确性。
- 信息提取功能:通过提取器(正则表达式或 jsonpath)从响应中提取信息,如版本号等,并返回到结果中。
- 基础信息详细:包含指纹的基本信息,如名称、作者、标签、严重程度等,同时
-
- 规则自定义与更新:可自定义请求,使用 github actions 自动更新指纹库,确保指纹库的时效性。
- 丰富的规则组成
- 指纹规则示例:以识别 thinkphp 的规则为例,其规则中包含了基础信息(如
id: thinkphp
,info
中的各项信息),http 探针(如method: GET
,path
,matchers
中的各种匹配条件),通过这些规则可以准确识别目标是否为 thinkphp 系统及其相关特征。
observer_ward(https://github.com/emo-crab/observer_ward)
- 工具介绍:observer_ward 是一个服务和 Web 应用指纹识别工具,基于社区化指纹库,可识别多种应用和服务的指纹信息。
- 功能特性
- 指纹识别全面:能够识别服务和 Web 应用的指纹,包括版本信息,基于 yaml 编写探针、匹配规则和提取器,使用 nvd 标准通用平台枚举(CPE)命名规范,提高指纹识别的准确性和规范性。
- 多种输入输出方式:支持从文件、命令行参数、标准输入等多种方式读取目标,可将结果输出到文件(支持 json、csv、txt 格式),还可通过 webhook 将结果发送到指定服务器,方便与其他系统集成。
- 集成 nuclei 漏洞验证:可调用 nuclei 验证漏洞,通过指定
--plugin
参数开启该功能,根据识别到的指纹解析 cpe 后找到对应的 nuclei 插件进行漏洞验证。 - 可更新相关组件:能够更新指纹库(
-u
或--update-fingerprint
)和 nuclei 插件(--update-plugin
),保持工具的时效性和功能性。 - 提供 API 服务:可通过
--api-server
参数启动 Web 服务,设置监听地址和端口,并通过--token
进行认证,方便其他程序调用其指纹识别功能。
-
- 多平台支持与安装便捷:支持多种安装方式,包括源码安装、二进制安装(可通过 brew 在 Mac 系统安装)和 Docker 镜像安装,方便不同用户根据自身需求选择合适的安装方式。
- 功能丰富多样
- 指纹识别示例:在实际使用中,如对
http://httpbin.org/
进行探测,可返回目标的相关信息,如[INFO ] 📇probes loaded: 6183
、[INFO ] 🎯target loaded: 1
、[INFO ] 🚀optimized probes: 8
、🎯:[ http://httpbin.org/ [Oexample, swagger] <httpbin.org> (200 OK) ]
等,包括加载的探针数量、目标信息、优化后的探针数量以及目标的详细识别结果。
HFinger(https://github.com/HackAllSec/hfinger)
- 工具介绍:HFinger 是一个高性能、准确的命令行指纹识别工具,用于红队打点时快速准确识别指定目标的 Web 框架、CDN 和 CMS 等信息。
- 功能特性
- 主动模式多样:支持单个 URL 识别(如
hfinger -u https://www.hackall.cn
)、从文件中读取目标识别(如hfinger -f targets.txt
),还可指定代理(如hfinger -u https://www.hackall.cn -p http://127.0.0.1:8080
),并支持输出为 JSON、XML 和 XLSX 格式(如hfinger -u https://www.hackall.cn -j output.json
等)。 - 被动模式独特:用法类似 Xray,可启动监听(如
hfinger -l 127.0.0.1:8888 -s res.xlsx
),能识别主动模式无法识别的指纹,且比主动扫描更加全面,还可与其他工具联动(如Target -> Xray/Burp -> hfinger
或Target -> hfinger -> Xray
两种方式)。
- 主动模式多样:支持单个 URL 识别(如
-
- 高性能与精准识别:具备高性能的特点,能够精准地识别目标的相关信息,减少误报和漏报。
- 多种识别模式
- 其他实用功能:支持随机 UA 头,增加识别的隐蔽性;支持多线程(可通过
-t
参数调整线程数,默认 100),提高识别效率;实时输出匹配结果,方便用户及时获取信息;同时提供了更新指纹数据库(--update
)和升级到最新版本(--upgrade
)的功能。
- 指纹识别示例:在主动模式下对
https://www.hackall.cn
进行识别,可能会返回类似[07-18 01:24:44][*][https:/www.hackall.cn][Not Matched][200][cloudflare][Hack AL Sec]
的结果,包括识别时间、目标 URL、是否匹配、状态码、服务器信息等;在被动模式下监听时,可接收到各种请求并识别出相关指纹,如[07-25 13:32:54][https://133.242.147.149:8080/][Tomcat默认页面][200][None][ApacheTomcat/9.0.73]
等。
TideFinger(https://github.com/TideSec/TideFinger)
- 工具介绍:TideFinger 是一个开源的指纹识别小工具,采用传统和现代检测技术相结合的方法,使指纹检测更快捷、准确。
- 功能特性
- 多源整合:搜集了大量开源指纹识别工具的指纹库,进行统一格式化处理和去重,保留了 cms 指纹库(约 2078 条指纹,可通过关键字、md5、正则匹配)和 fofa 库(2119 指纹,主要对 Header、url 信息匹配),并对部分指纹进行了合并和优化。
- 命中率优化:对每个指纹标记命中率,优先使用命中率高的指纹,提高识别效率。同时通过爬取大量域名进行命中率测试,优化误报率较高的指纹,得到更高效的指纹库。
-
- 多版本支持与易用性:提供 python2 和 python3 两个版本,安装和使用相对简单。python3 版加入了 Wappalyzer 的调用,对结果进行去重,并增加了目录匹配式选项(默认不启用,可通过
-d
参数控制,0 为不启用,1 为启用),避免对目标系统发起过多请求。 - 指纹库整合优化
- 代理与超时设置:支持代理检测(通过
-p
参数指定,需确保代理文件名为proxys_ips.txt
,每行一条代理格式),避免被封 IP,但免费代理可能影响效率;可设置网站响应超时时间(-t
参数,默认为 5 秒),控制扫描时长。 - 额外功能与平台:不定期更新指纹库,关注公众号回复 “指纹库” 可获取最新指纹库;引入了 Wappalyzer 和 webanalyzer 指纹库;实现了一套在线指纹识别平台 “潮汐指纹”(http://finger.tidesec.com),提供网站信息、IP 地址信息、CDN 识别、中间件识别、更多 banner、操作系统识别等功能,但为提高速度和避免被封 IP,去掉了子域名发现、端口扫描和 waf 探测等功能。
- 多版本支持与易用性:提供 python2 和 python3 两个版本,安装和使用相对简单。python3 版加入了 Wappalyzer 的调用,对结果进行去重,并增加了目录匹配式选项(默认不启用,可通过
- 指纹识别示例:在 python3 版中,执行
python3 TideFinger.py -u http://www.tidesec.com
等命令,可返回如Current Task: http://www.tidesec.com
、Banner: baidu站长平台| X-UA-Compatible | Nginx |jquery| DedeCMS | Meta-Author|jQuery 1.3.2 Conn KeepAlive Plex-Media-Server织梦MS(DedeCMS) Script
、CMS_finger: DedeCMS
、Time Used:4秒
等信息,包括当前任务、banner 信息、识别到的 cms 指纹以及所用时间等。
fingerprint(https://github.com/r0eXpeR/fingerprint)
- 工具介绍:该项目主要是各种工具指纹以及作者自己整理的一些指纹分享仓库。
- 功能特性:目前主要功能为收集和分享各类工具的指纹,涵盖了 CMS 指纹、Dayu、Ehole3.0、Finger、FingerprintHub、Goby、ObserverWard_0x727、TideFinger、Webfinger、WhatWeb--Plus、cmsprint(CMS 和中间件指纹库)、dismap、nuclei-templates - 指纹、wappalyzer - 指纹等多种工具的指纹信息。
- 指纹资源示例:项目中的指纹资源丰富多样,例如在 CMS 指纹目录下可能包含各种不同 CMS 系统的特征信息,用户可以从中获取不同工具对于各类系统的指纹识别规则和特征,以便在相关安全检测、分析等工作中参考使用,但具体的指纹细节和使用方式可能需要进一步查看每个工具对应的指纹文件内容。同时,项目欢迎用户提交新的指纹资源,以持续丰富指纹库。
原文始发于微信公众号(东方隐侠安全团队):网络安全设备资产指纹收集:应用指纹的探索与实践
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论