Web应用程序的敏感信息-隐藏目录和文件
Web应用程序的敏感信息-隐藏目录和文件
0x1、场景
Web应用程序根文件夹中可能存在大量隐藏信息:源代码版本系统文件夹和文件(.git,.gitignore,.svn),项目配置文件(.npmrc,package.json,.htaccess),自定义配置文件使用config.json,config.yml,config.xml等常见扩展以及许多其他扩展。
资源可以分为几个常见类别:
- 源代码版本控制系统
- IDE(集成开发环境)配置文件
- 项目和/或技术特定的配置和设置文件
1.1、GIT
Git是“(...)一个免费的开源分布式版本控制系统,新创建的Git存储库包含一些默认文件夹和文件,其中存储了所有信息。新创建的Git存储库包含一些默认文件夹和文件,其中存储了所有信息。

.git文件夹的基本结构
对象可以是以下三种类型之一:commit,tree和blob。
Commit是有关提交的信息,具有当前树(文件夹和文件结构)对象哈希。
tree包含有关文件夹和文件结构的信息 - 每个文件夹或文件都有自己的对象哈希存储在树对象中。
Blob是Git对象类型,保存文件内容。知道特定文件的对象哈希,则可以使用 git cat-file命令读取此文件的内容。
1.2、Subversion (SVN)
Subversion(或SVN)是由Apache Software Foundation创建的源代码版本控制系统,SVN文件夹和文件的示例结构如下所示:

.svn文件夹的基本结构
关键性的信息是SQLite数据库wc.db文件和pristine /目录的内容。在wc.db中存有pristine/*里相关文件名的哈希值。
http://server/path_to_vulnerable_site/.svn/wc.db
使用SQLite控制台客户端(或任何其他工具来管理SQLite数据库),阅读wc.db的内容
$ sqlite3 wc.db
SQLite版本3.8.10.2 2015-05-20 18:17:19
输入“.help”作为使用提示。
sqlite> .databases
seq名称文件
--- --------------- ------------------------- ---------------------------------
0 main /Users/bl4de/hacking/playground/wc.db
sqlite>。 dump
PRAGMA foreign_keys = OFF;
开始交易;
CREATE TABLE REPOSITORY(id INTEGER PRIMARY KEY AUTOINCREMENT,root TEXT UNIQUE NOT NULL,uuid TEXT NOT NULL);
插入“存储”值(1,'svn + ssh://192.168.1.4/var/svn-repos/project_wombat','88dcec91-39c3-4b86-8627-702dd82cfa09');
(......)
INSERT INTO“NODES”VALUES(1,'trunk',0,'',1,'trunk',1,'normal',NULL,NULL,'dir',X'2829','infinity',NULL,NULL ,1,1456055578790922, 'bl4de',NULL,NULL,NULL,NULL);
INSERT INTO“NODES”VALUES(1,'',0,NULL,1,'',1,'normal',NULL,NULL,'dir',X'2829','infinity',NULL,NULL,1, 1456055578790922 'bl4de',NULL,NULL,NULL,NULL);
INSERT INTO“NODES”VALUES(1,'trunk / test.txt',0,'trunk',1,'trunk / test.txt',2,'normal',NULL,NULL,'file',X'2829 ”,NULL, '$ SHA1 $ 945a60e68acc693fcb74abadb588aac1a9135f62',NULL,2,1456056344886288, 'bl4de',38,1456056261000000,NULL,NULL);
插入“NODES”值(1,'trunk / test2.txt',0,' 躯干”,1 '躯干/的test2.txt',3, '正常',NULL,NULL, '文件',NULL,NULL, '$ $ SHA1 6f3fb98418f14f293f7ad55e2cc468ba692b23ce',NULL,3,1456056740296578, 'bl4de',27, 14560566.96亿,NULL,NULL);
(......)
每一个都包含文件名和SHA1哈希,对应于pristine /文件夹中的条目:
$ ls -lA pristine / 94 /
total 8
-rw-r - r - @ 1 bl4de staff 38 Feb 21 12:05 945a60e68acc693fcb74abadb588aac1a9135f62.svn-base
REPOSITORIES表中的条目指向原始存储库路径,即:
svn+ssh://192.168.1.4/var/svn-repos/project_wombat
1.3、IDE项目文件
许多开发人员使用的IDE(集成开发环境)有一个共同点 - 它们将项目的设置和许多附加信息保存在自己的文件中,分别为每个项目创建。
JetBrains的产品(https://www.jetbrains.com/)。
JetBrains IDE - IntelliJ IDEA,WebStorm,PHPStorm,RubyMine
使用JetBrains产品开发的每个项目都会创建自己的隐藏目录 .idea /。此目录包含有关当前项目,其文件,目录和IDE设置的所有信息。

.idea JetBrains文件夹的基本结构
workspace.xml包含许多有用的信息,它们允许枚举应用程序的所有文件和文件夹,源版本控制系统信息和许多其他信息。
<?xml version =“1.0”encoding =“UTF-8”?>
(...)
<component name =“FileEditorManager”>
<leaf>
<file leaf-file-name =“README.md”pinned =“false “current-in-tab =”false“>
<entry file =”file://$PROJECT_DIR$/README.md“>
(...)
</ component>
(...)
组件名称中的所有节点=“FileEditorManager”包含所有文件及项目根目录的相对路径。
每个组件节点有版本系统的信息,如下例所示:
<component name =“Git.Settings”>
<option name =“UPDATE_TYPE”value =“MERGE”/>
<option name =“RECENT_GIT_ROOT_PATH”value =“$ PROJECT_DIR $”/>
</ component>
关于项目文件上执行的提交和其他任务的信息,在节点组件名称=“TaskManager”中:
(...)
<task id =“LOCAL-00211”summary =“将WebSocket端口更改为1099”>
<created> 1436206418000 </ created>
<option name =“number”value =“00211”/>
<option name = “project”value =“LOCAL”/>
<updated> 1436206418000 </ updated>
</ task>
(...)
更改历史记录,存储在组件名称=“ChangeListManager”节点中:
<component name =“ChangeListManager”>
(...)
<change type =“DELETED”beforePath =“$ PROJECT_DIR $ / chat / node_modules / socket.io / node_modules / socket.io-adapter / node_modules / debug / Makefile”afterPath = “”/>
(...)
</组分>
以及组件名称=“editorHistoryManager”节点:
(...)
<entry file =“file://$PROJECT_DIR$/public_html/vendor/angular/angular.js”>
<provider selected =“true”editor-type-id =“text-editor”>
<state vertical-scroll-proportion =“0.0”>
<caret line =“3233”column =“29”selection-start-line =“3233”selection-start-column =“29”selection-end-line =“3233”selection -end-column =“29”/>
</ state>
</ provider>
</ entry>
(...)
如果开发人员曾经使用集成数据库管理器管理数据库,那么还有另一个非常有趣的文件:dataSources.ids,可以在其中找到数据库结构,dataSource.xml,dataSources.xml,dataSources.local.xml和dbnavigator.xml包含示例信息:
<database>
<name value =“database_name”/>
<description value =“”/>
<database-type value =“MYSQL”/>
<config-type value =“BASIC”/>
<database-version value =“5.7 “/>
<driver-source value =”BUILTIN“/>
<driver-library value =”“/>
<driver value =”“/>
<host value =”localhost“/>
<port value =”3306“/>
<database value =“mywebapp”/>
<url-type value =“DATABASE”/>
<os-authentication value =“false“/>
<empty-password value =”false“/>
<user value =”root“/>
<password value =“cm9vdA ==”/> <! - Base64 encoded - >
</ database>
甚至更多,比如dataSources.local.xml:
<?xml version =“1.0”encoding =“UTF-8”?>
<project version =“4”>
<component name =“dataSourceStorageLocal”>
<data-source name =“MySQL - mywebapp @ localhost”uuid =“8681098b -fc96-4258-8b4f-bfbd00012e2b“>
<secret-storage> master_key </ secret-storage>
<用户名> root </ user-name>
<schema-pattern> mywebapp。* </ schema-pattern>
<default -schemas> mywebapp。* </ default-schemas>
</ data-source>
</ component>
</ project>
一切都取决于项目本身,使用IDE插件(如调试器,源版本控制或数据库管理器)。
NetBeans IDE
NetBeans(https://netbeans.org/)是另一个非常流行的免费IDE,适用于Java,C / C ++,PHP,HTML5和JavaScript开发。
NetBeans在项目的根文件夹中创建自己的文件夹,包含所有项目设置 - nbproject /(类似于 .idea文件夹创建dby JetBrains IDE)
project.xml是NetBeans项目配置的一个文件,可以从这个文件入手查看敏感点。

.nbproject文件夹的基本结构
1.4、其他配置文件
NodeJS / JavaScript特定的配置文件
示例是npm配置文件(package.json,package-lock.json),其中包含所有应用程序依赖项; 用于JavaScript的linters配置文件,如ESlint或JShint或Bower包管理器bower.json等等。
示例bower.json文件,其中包含Bower的配置,并包含Web应用程序(前端端)中使用的包列表:
{
“name”:“testapp”,
“version”:“2.1.0”,
“authors”:[
“Rafal'bl4de'Janicki <email@gmail.com>”
],
“description”:“test application”,
“ main“:”index.html“,
”moduleType“:[
”globals“
],
”license“:”MIT“,
”dependencies“:{
”angular“:”1.4“,
”pure“:”~0.5.0“ ,
“angular-route”:“~1.2.26”,
“angular-ui-router”:“~0.2.11”,
“angular-bootstrap-datetimepicker”:“最新”,
“angular-translate”:“~2.6.1”
},
“devDependencies”:{}
}
由于是服务器端详细信息的列表 - 使用的包,如数据库连接器,中间件组件等 - 此文件可能包含许多有关潜在易受攻击软件的信息。
示例package.json,显示可能使用了MySQL数据库,并通过WebSockets进行了一些客户端 - 服务器通信:
{
“name”:“Test application server dependencies”,
“version”:“1.0.0”,
“author”:“bl4de”,
“dependencies”:{
“socket.io”:“^ 1.3.5”,
“mysql “:”^ 2.9.0“
}
}
.bowerrc, .eslintrc, .jshintrc等文件 。即使它们不包含非常敏感的信息,也有可能找到有关Web应用程序体系结构,使用的库和/或框架的一些详细信息,甚至是评论中的一些有价值的信息。
GitLab CI / CD .gitlab-ci.yml配置文件
当项目使用GitLab连续集成(GitLab CI / CD)时,项目根文件夹中存在一个非常特殊的脆弱文件: .gitlab-ci.yml。此文件可能包含大量非常敏感的信息:有关测试和构建过程的详细信息,详细命令在此类过程的每个步骤和许多其他关键信息上运行。
Ruby on Rails database.yml文件
主数据库配置文件,包含连接到数据库所需的一切:用户名,密码和其他配置详细信息。
macOS .DS_Store文件
关于macOS系统的一个特殊之处是一个名为的文件。.DS_Store。此文件由macOS文件资源管理器应用程序Finder创建,并且经常被错误地提交到源版本控制存储库中。
使.DS_Store文件非常有用的原因在于它们保存有关Finder窗口配置的信息,包括代表在特定Finder窗口中显示的文件和文件夹的图标布局。
如果在Web服务器上找到.DS_Store文件,则有可能找到很多敏感信息资源。

.DS_Store文件的基本结构
.DS_Store文件。我们可以识别config,LICENSE,loader或package.json文件,还有node_modules /,pages /,utils /和wrappers / folders - NodeJS应用程序的典型结构
.DS_Store文件的主要问题是Apple特定的格式并且不易读取,这种格式的最佳资源之一(以及用于解析的Python库)是由Sebastian Neef解析.DS_Store文件格式。
0x2、工具
枚举工具(DirBuster,Dirb、wfuzz,仅举几例),字典包含数十万个最受欢迎的文件夹和文件名,robots.txt常用条目等。
字典资源:
https://github.com/danielmiessler/SecLists
https://github.com/danielmiessler/RobotsDisallowed
0x3、参考
Web应用程序的敏感信息-隐藏目录和文件的更多相关文章
- 发布Web应用程序时发生的“xx.aspx.cs文件不存在”错误
(注意:这里说的Web应用程序并不是Web网站) 在VS里调试.IIS里浏览含.CS源码的项目都是没有问题的.但是发布后,所有的.CS文件都被编译到bin文件夹里去了.在IIS里浏览,发生“分析器错误 ...
- vs 发布web应用程序时,找不到cs文件错误
将*.aspx.*.ascx.*.master所有出错页面文件中的 CodeFile="******.aspx.cs" 批量替换成 Codebehind="******. ...
- Qt给应用程序添加版本信息(对rc文件的设置,可利用QT内置变量)
作者:daodaoliang 时间:2016年7月11日16:12:09 版本:V 0.0.4 邮箱:daodaoliang@yeah.net 0. 环境说明 系统环境: win10 64位 Qt环境 ...
- WEB服务器4--IIS中网站、Web应用程序和虚拟目录
网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示. ...
- 常见Web应用程序漏洞
不完善的身份验证措施 .这类漏洞包括应用程序登录机制中的各种缺陷,可能会使攻击者破解保密性不强的密码.发动蛮力攻击或完全避开登录. 不完善的访问控制措施.这一问题涉及的情况包括:应用程序无法为数据和功 ...
- 阅读笔记——Web应用程序
Web应用程序与DD文件 Web应用程序 web应用程序是一种可以通过Web访问的应用程序.Web应用程序最大的好处是永和很容易访问应用程序.用户只需要有浏览器即可,不需要安装其他任何软件.一个Web ...
- 在 Visual Studio 2013 中创建 ASP.NET Web 项目(1):概述 - 创建 Web 应用程序项目
注:本文是“在 Visual Studio 2013 中创建 ASP.NET Web 项目”专题的一部分,详情参见 专题导航 . 预备知识 本专题适用于 Visual Studio 2013 及以上版 ...
- QT5删除隐藏目录+隐藏文件(使用Process::start函数调用系统命令,且等待到结束)
1.功能需求 删除一个目录(包括目录本身),同时删除该目录中所有文件及目录(含隐藏的) 2.遇到的问题 qt5中已经有了递归删除目录的函数--->bool QDir::removeRecursi ...
- QT5删除隐藏目录+隐藏文件
1.功能需求 删除一个目录(包括目录本身),同时删除该目录中所有文件及目录(含隐藏的) 2.遇到的问题 qt5中已经有了递归删除目录的函数--->bool QDir::removeRecursi ...
随机推荐
- SpringBoot中使用Servlet,Filter,Listener
项目最近在替换之前陈旧的框架,改用SpringBoot进行重构,初接触,暂时还没有用到Servlet,Filter,Listener的地方,但在之前回顾Servlet的生命周期时,https://ww ...
- Linux+Shell常用命令总结
因为自己不经常使用linux的命令行工具,但是mac的终端还是经常使用的,有些命令总是要想一会或者百度一下才知道怎么用,抽时间整理了一下常用的命令,作为笔记. 常用命令 查看文件操作: ls :列出当 ...
- Linux内存管理 (21)OOM
专题:Linux内存管理专题 关键词:OOM.oom_adj.oom_score.badness. Linux内核为了提高内存的使用效率采用过度分配内存(over-commit memory)的办法, ...
- iOS开发基础-九宫格坐标(1)
一.功能分析 1)以九宫格展示图片信息,每一个 UIView 包含一个 UIImageView .一个 UILabel 和一个 UIButton . 2)加载App数据,根据数据长度创建对应的格子数: ...
- vue style标签中使用less
只需要下载相应的包即可:(前提是使用vue-cli搭建的项目) 1.安装less依赖,npm install less less-loader --save 2.即可在相应的vue文件中使用less操 ...
- Elasticsearch通关教程(五):如何通过SQL查询Elasticsearch
前言 这篇博文本来是想放在全系列的大概第五.六篇的时候再讲的,毕竟查询是在索引创建.索引文档数据生成和一些基本概念介绍完之后才需要的.当前面的一些知识概念全都讲解完之后再讲解查询是最好的,但是最近公司 ...
- C#直接使用DllImport调用C/C++动态库(dll文件)
1.C/C++动态库的编写 下面是我编写的一个比较简单的C++dll文件用来测试,关于如何编写dll文件,我这里便不再赘述,不懂得自行查询, (1).h文件 #ifdef MYDLL_EXPORTS ...
- python dlib opencv 人脸68点特征检测
不得不感慨,现在现成的东西太多了,直接拿来用就行了 dlib安装(指定版本安装,避免踩坑) pip dlib中训练好的文件http://dlib.net/files/shape_predictor_6 ...
- Android艺术——深看Activity的生命周期
探究Activity的生命周期 1.典型情况下的生命周期分析:onCreate 初始化工作,加载布局资源和数据:onStart ac正在启动但是无法交互,后台:onResume ac可见,显示在前台: ...
- Shell命令-文件及目录操作之chattr、lsattr
文件及目录操作 - chattr.lsattr 1. chattr:改变文件属性 chattr命令的功能说明 chattr命令用于改变文件属性.这项指令可改变存放在ext2文件系统上的文件或目录属性, ...