Post

浅谈Web应用指纹识别

浅谈Web应用指纹识别

浅谈Web应用指纹识别

Web应用指纹识别是指通过分析Web应用公开暴露的技术特征,识别出该应用所使用的技术栈、框架、服务器类型、版本信息等关键组件。这种技术在渗透测试中非常重要,因为它有助于安全测试人员选择最合适的攻击向量和漏洞利用方式,同时在实战中也有助我们寻找相关站点,扩大攻击面,增加攻击容错。

本文主要出于寻找同源/同框架站点的目的分析Web应用指纹,所以与常规红队行动信息收集侧重点有所不同。接下来将从两部分分析web应用指纹识别。

P1: 如何寻找网站特征?


提取Web应用指纹的思路非常清晰,找到关键特征即可。例如张三是一位长头发的男生,在茫茫人群中,我们要如何快速地跟别人描述,让他一眼就可以找到张三呢?显而易见,“长头发的男生”就是一个区别于其他人的明显特征。同理,对于网站,我们也可以使用这样的方法。例如一个wordpress站点

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

这是他的首页,我们对其进行目录扫描,就可以发现一些独特的目录,例如 wp-contentwp-admin 等…….

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

由此我们就可以判断这是一个wordpress站点,这是一个略微复杂的案例,针对不同的站点,我们可以选用不同的办法来帮助我们快速判断。

P2: 识别当前网站指纹


常见的指纹识别方法

在梳理识别方法之前,我们可以回忆一下对于一个网站,我们能得到什么信息,header,body…….这些我们能得到的信息都可以成为特征的出处。我们将介绍几个常见的特征思路,并且附上相应的搜索语法,本文主要以FofaGoogle语法为例,因为搜索语法的相关篇幅较长,详细介绍附在文末,同时出于学习目的,关于自动化识别的部分将会比较省略。

1. 网站图标

网站图标是一个重要的标志,大部分同源的网站,尤其是品牌、框架这一类比较有辨识度的都会选择使用同一个icon,在一些攻防演练中,网站中出现的icon也是判断靶标归属的重要规则之一。

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

  • Fofa: icon_hash=""

2. 网站标题

在实际运营中,标题往往是代表站点信息,这往往是不会改变的,我们只需要获得 title 的内容即可。

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

  • Fofa: title=""

3. 网站响应头信息

一些应用会在请求头/响应头中加入字段,这可以作为我们判断的依据。

| No.1 | X-Powered-By:Jboss | jboss的指纹 | | —- | ———————- | ———— | | No.2 | X-Drupal-Cache: | drupal的指纹 | | No.3 | Server:nginx | nginx的指纹 | | No.4 | Set-Cookie:PHPSESSID | php的指纹 |

  • Fofa: header=""

4. 特殊文件

因为开发或者开源需要,开发者往往会添加一些其他人可能想知道的信息,这些信息往往会存在特定文件中,比如 README.md,LICENCE等,顺着这个思路,我们也可以发现 robots.txt或者 sitemap.xml文件也会暴露网站的路径,帮助我们识别目标站点。

robots.txt

robots.txt

  • Google: inurl:""

6. 前端技术

  1. 最直接的方法就是查看网站源代码,查找明显的关键词,如:React, Vue, Angular, Next.js, Bootstrap, Tailwind, jQuery 等。 查找 <script> 标签引入的外部 JS 文件路径,比如:cdn.jsdelivr.net/npm/vue@3。 查找 <link> 标签中是否包含 BootstrapTailwind 等常用 CSS 框架。
  2. 使用开发者工具 加载的 JavaScript 文件名称和路径(例如:main.[hash].js 是 Webpack 的典型产物)。 React DevToolsVue DevTools 插件也能识别出目标页面是否用了对应框架。
  3. 观察 HTTP 响应头

    某些框架或工具会在响应头中暴露线索,比如:

    • x-powered-by: Next.js
    • server: Netlify
    • x-generator: WordPress.com

7. CDN信息

一些网站使用了CDN会在header字段里出现,可以查看是否使用CDN,如cloudflare360cdn365cydyunjiasu

  • Fofa: header=""

8. WAF信息

是否使用waf,如TopsecJiasuleYundun等;

9. IP及域名信息

ip与域名也是一种收集的思路,单个ip绑定多个域名,多个域名绑定单个ip,都是可以去思考的点。

  • Fofa: ip="", domain=""

10. 端口与服务信息

  1. 可以搜集网站开启的端口,例如tomcat默认端口8080,宝塔中间件默认端口888。
  2. 服务也是可以关注的点,同一个开发团队往往会选用同样的中间件或者技术栈
    • Fofa: port="" ,server=""

11. 特定文件的MD5

一些网站的特定图片文件、js文件、CSS等静态文件,如 favicon.icocsslogo.icojs等文件一般不会修改,通过爬虫对这些文件进行抓取并比对md5值,如果和规则库中的Md5一致则说明是同一CMS。这种方式速度比较快,误报率相对低一些,但也不排除有些二次开发的CMS会修改这些文件。

  • Fofa:js_md5=""

12. 正常页面或错误网页中包含的内容

网页包含的特殊内容,比如一段特别的介绍文字

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

  • Fofabody=""

13. URL包含的信息

  1. 许多应用有自己独特的路径命名,例如wordpress的路径往往是wp-XXXmybbcms的路径往往是bb-XXX
  2. 部分国人自开发的应用会使用拼音命名路径,这也可以提取为特征。
  3. 前端项目的组件排列也可以作为判断,例如#home/home/index这样有明显特征的情况
    • Googleinurl:""

14. 中间件信息

  1. 查看响应头
  2. 通过页面特征识别(默认页面/错误页面)
    • Fofa:header="" ,title=""
    • Google: intitle:"Apache2 Ubuntu Default Page”inurl:"/manager/html" intitle:"Apache Tomcat"

15. 开发语言

  1. url后缀判断

    后缀推测语言
    .phpPHP
    .jsp, .jspx, .do, .actionJava
    .aspx, .ashxASP.NET
    .py, .cgiPython(Flask/Django)
    .rb, .erbRuby on Rails
    .js + API 结构Node.js 可能
  2. 响应头判断Server 字段,X-Powered-By 字段
  3. 页面内容特征识别

    | jsessionid= | Java | | ———————– | —————- | | _VIEWSTATE= | ASP.NET | | .php?参数结构或报错页 | PHP | | csrfmiddlewaretoken | Django(Python) | | express-session | cookie → Node.js | - Google:

    查找 PHP 报错页面 intext:"Warning: include()" filetype:php 查找 ASP.NET 报错页 intitle:"Server Error in '/' Application" 查找 Java 报错页 intext:"java.lang.NullPointerException" 查找 Flask 应用(Python) intext:"Werkzeug powered traceback"

16. COOKIE信息

Cookie 名称推测后端语言/框架
PHPSESSIDPHP
JSESSIONIDJava (Tomcat, Spring)
ASP.NET_SessionIdASP.NET
connect.sidNode.js (Express/Connect)
sessionidDjango(Python)
_rails_sessionRuby on Rails
laravel_sessionLaravel (PHP框架)

17. HTML源码信息

html源代码中包含注释、js、css等信息,通过访问这些信息来判断和确认cms系统框架。

在源代码中常常会包含 powered bybulit uponrunning等特征,可以判断特征以及版本号等信息。

HTML也会包含一些其他信息,例如 authorcopyright

1
2
3
4
5
6
7
8
9
10
title
meta
    - keyword
    - description
    - generator
    - author
    - copyright
script
html
real_url (真实跳转链接)
  • Fofa: body=""js_name=""

18. 操作系统信息

  1. 基于 TCP/IP 协议栈的指纹识别(TTL / Window Size)

    操作系统TTL 典型值窗口大小(Window Size)
    Linux645840/14600
    Windows1288192/65535
    FreeBSD6465535
    Cisco / Router2554128

    ping -c 1 [target.com](http://target.com/) traceroute [target.com](http://target.com/)

  2. 分析 HTTP 响应头和页面内容

    • Server 字段可能泄漏 OS 或 Web 服务平台
    • .asp, .aspx → Windows Server + IIS
    • .php, .cgi, .pl → 常见于 Linux + Apache/Nginx - port="445" && protocol="smb"

应用指纹识别自动化工具

参考这篇文章,给出了许多实用工具。

TideFinger/Web指纹识别技术研究与优化实现.md at master · TideSec/TideFinger

P3. 寻找同源站点


Google Hack

etc…

https://cloud.tencent.com/developer/article/2150789

FOFA

FOFA的资产是以IP和端口为单位,不是以IP为单位。所以存在同IP不同端口的数据。

主要分为检索字段以及运算符,所有的查询语句都是由这两种元素组成的。

| 逻辑运算符 | | | ———- | ———————————————– | | = | 匹配,=”“时,可查询不存在字段或者值为空的情况。 | | == | 完全匹配,==”“时,可查询存在且值为空的情况。 | | && | 与 | | != | 不匹配,!=”“时,可查询值不为空的情况。 | | *= | 确认查询优先级,括号内容优先级最高。 |


P4. 实战演练


../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

https://www.2i1i.com/

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

判断是wordpress站点

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

判断中间件为nginx

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

对iconhash进行搜索得到更多内容

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

对网站内容进行搜索,搜出来了其他的域名

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

可以发现,网站的结构,内容都有所不同,但是title都一样,所以可以利用这个title继续搜索

../assets/img/2025-04-23-浅谈Web应用指纹识别/image.png

这里可以看到有很多证书绑定的域名是一致的,也可以反向查询证书绑定的域名。

cert="[www.0do.cn](http://www.0do.cn/)"

cert=”www.0do.cn

P5. 参考文章

This post is licensed under CC BY 4.0 by the author.