信息收集-架构源码识别指南

架构源码识别

当我们初次接触网站,需对其进行初步识别,核心包括域名数量、旁段地址、C段地址等信息收集——多数企业会重点防护主站点,可能忽略子域名或C段的安全,因此需从网站框架、前后端库、开源属性、流量特征切入,结合前端引入的JS文件、开发者面板加载项等细节,实现精准识别。

1. 从框架切入识别

1.1 开源框架识别

不同企业因预算差异会选择不同开源框架(如预算有限选Z-blog,追求稳定选ThinkPHP、Webman或WordPress),识别核心围绕“指纹匹配+信息延伸收集”,以下以kong.college为例展开。

1.1.1 开源CMS指纹识别工具

通过专业工具直接匹配网站的开源框架特征,是最高效的初步识别方式,常用工具如下表:

工具类型 工具名称 地址/仓库链接
指纹识别 Wappalyzer https://github.com/AliasIO/wappalyzer
指纹识别 TideFinger(潮汐) http://finger.tidesec.net/
指纹识别 云悉指纹 https://www.yunsee.cn/
指纹识别 WhatWeb https://github.com/urbanadventurer/WhatWeb
指纹识别 数字观星Finger-P https://fp.shuziguanxing.com/#/
子域名收集 JSFinder (注:常用子域名&JS提取工具,需通过GitHub获取最新版本)

1.1.2 典型工具识别效果演示

  1. TideFinger(潮汐)
    局限性:未获取到语言相关信息,识别维度较浅。

  2. Wappalyzer
    优势:覆盖维度全面,可识别前端框架、后端语言、服务器中间件等杂项信息。

  3. JSFinder
    核心价值:不仅能收集子域名,还能提取网站引入的JS文件,通过目录结构辅助框架识别。

28.7分享 JSFinderhttps://cloud.kong.college/s/AVfb

  1. WhatWeb
    特点:命令行工具,支持批量扫描,可识别Web框架、CMS、中间件、编程语言等。

1.1.3 开源框架信息延伸收集

通过指纹工具识别出框架后(如kong.college为Hexo静态博客),可进一步通过代码托管平台收集敏感信息——开源代码作者常在版本控制文件(如composer.json)中留下邮箱、姓名等,可用于关联搜索。

1.1.3.1 GitHub资源搜索语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
in:name test                # 仓库标题含"test"
in:description test # 仓库描述含"test"
in:readme test # Readme文件含"test"
stars:>3000 test # Stars>3000且含"test"
stars:1000…3000 test # Stars在1000-3000且含"test"
forks:>1000 test # Forks>1000且含"test"
forks:1000…3000 test # Forks在1000-3000且含"test"
size:>=5000 test # 仓库大小≥5000KB(5M)且含"test"
pushed:>2019-02-12 test # 最后提交时间>2019-02-12且含"test"
created:>2019-02-12 test # 仓库创建时间>2019-02-12且含"test"
user:test # 用户名"test"的仓库
license:apache-2.0 test # 许可证为Apache-2.0且含"test"
language:java test # 语言为Java且含"test"
user:test in:name test # 组合:用户名"test"且仓库标题含"test"
1.1.3.2 谷歌搜索语法(针对敏感配置)
1
2
3
4
5
6
7
site:Github.com smtp                # GitHub上含"smtp"的内容
site:Github.com smtp @qq.com # GitHub上含"smtp"和"@qq.com"的内容
site:Github.com smtp @126.com # GitHub上含"smtp"和"@126.com"的内容
site:Github.com smtp @163.com # GitHub上含"smtp"和"@163.com"的内容
site:Github.com smtp @sina.com.cn # GitHub上含"smtp"和"@sina.com.cn"的内容
site:Github.com smtp password # GitHub上含"smtp"和"password"的内容
site:Github.com String password smtp# GitHub上含"String"、"password"、"smtp"的内容
1.1.3.3 源码关联操作
  1. 获取源码(工具识别/抓包)后,在源码文件夹中搜索目标特征(如qq.com、企业域名);
  2. 提取到作者邮箱、姓名等信息后,用上述语法在GitHub/谷歌中二次搜索,定位更多关联源码。

2. 闭源框架与源码泄露识别

闭源框架无公开指纹可匹配,需通过“习惯特征+配置信息+流量分析”辅助识别,核心突破口是源码泄露——管理员操作不当可能暴露网站源码,常见泄露类型如下。

1、从源码本身的特性入口
2、从管理员不好的习惯入口
3、从管理员不好的配置入口
4、从管理员不好的意识入口
5、从管理员资源信息搜集入口

2.1 闭源框架识别思路

  • 核心维度:资源托管平台痕迹(如自定义CDN、私有服务器路径)、前端接口格式(如统一的API前缀、参数命名风格)、错误页面特征(如自定义404/500页面的开发标识)。
  • 关键动作:分析开发者工具的“Network”面板,提取接口响应头、Cookie字段(如自定义Session名称),推断后端技术栈。

2.2 常见源码泄露类型与利用

2.2.1 Git源码泄露

  • 原理:Git初始化目录时生成.git文件夹(记录代码变更),若未删除直接部署到服务器,攻击者可恢复源码。
  • 利用工具:GitHack(仓库地址:https://github.com/lijiejie/GitHack)
  • 用法示例:GitHack.py http://www.openssl.org/.git/
  • 工具下载:

28.7分享链接GiHackhttps://cloud.kong.college/s/6jFE

2.2.2 Mac目录结构(.DS_Store)泄露

  • 原理:macOS的Finder生成.DS_Store文件(记录文件夹展示配置),若上传到服务器,会暴露文件目录结构(如备份文件、源码路径)。
  • 工具下载:

28.7分享链接 https://cloud.kong.college/s/lWi3

2.2.3 SVN源码泄露

2.2.4 Vim临时文件泄露

  • 原理:Linux的Vim编辑文件时生成隐藏临时文件(如.文件名.swp),若非正常关闭Vim,临时文件会保留,可恢复原始文件内容。
  • 识别特征:访问http://目标域名/.文件名.swp,若返回文件下载,即存在泄露。
  • 示例截图:

2.2.5 备份文件泄露

  • 原理:管理员将源码备份在Web目录下(如backup.rarsource.bak),攻击者通过猜解路径下载备份文件。
  • 常见备份后缀:.rar.zip.7z.tar.gz.bak.txt.old.temp
  • 利用工具:御剑、dirsearch(目录扫描工具)
  • 工具下载:
    28.7分享链接 https://cloud.kong.college/s/vNIb

2.2.6 PHP特性(.phps)源码泄露

  • 原理:.phps是PHP源代码文件,配置不当会允许浏览器直接查看PHP脚本的原始代码(而非执行结果)。
  • 识别方式:访问http://目标域名/关键文件.phps(如index.phps),若显示PHP源码,即存在泄露。
  • 示例截图:

2.2.7 GitHub(私有)源码泄露

  • 原理:开发者误将企业闭源项目上传到GitHub公开仓库,或私有仓库权限配置错误(如允许匿名访问)。
  • 识别技巧:用目标企业域名、项目名称、开发者邮箱作为关键词,通过1.1.3的搜索语法定位泄露源码。
  • 核心提醒:“人”是最大漏洞,需重点关注企业员工的代码托管习惯。

2.2.8 PHP Composer.json泄露

  • 原理:composer.json是PHP项目的依赖配置文件,含项目名称、版本、作者、依赖库等信息,可辅助推断技术栈及敏感信息。
  • 常见属性说明:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    "name": "包名称",
    "description": "包描述",
    "version": "包版本",
    "type": "包类型(如library、project)",
    "keywords": "搜索关键字数组",
    "homepage": "项目官网URL",
    "readme": "README文档绝对路径",
    "time": "版本发布时间",
    "license": "许可证类型(如MIT)",
    "authors": "作者信息数组(含name、email)",
    "support": "项目支持信息(如issues链接)",
    "require": "必须安装的依赖包列表",
    "autoload": "PHP自动加载映射配置",
    "minimum-stability": "依赖包稳定性过滤默认值",
    "repositories": "自定义依赖安装源",
    "config": "Composer配置选项",
    "script": "安装过程执行的脚本",
    "extra": "脚本扩展数据"
    }
  • 示例截图: