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文件夹的基本结构

对象可以是以下三种类型之一:committreeblob

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.xmldataSources.xmldataSources.local.xmldbnavigator.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.jsonpackage-lock.json),其中包含所有应用程序依赖项; 用于JavaScript的linters配置文件,如ESlintJShintBower包管理器bower.json等等。

示例bower.json文件,其中包含Bower的配置,并包含Web应用程序(前端端)中使用的包列表:

{
  “name”:“testapp”,
  “version”:“2.1.0”,
  “authors”:[
    “Rafal'bl4de'Janicki <[email protected]>”
  ],
  “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此文件可能包含大量非常敏感的信息:有关测试和构建过程的详细信息,详细命令在此类过程的每个步骤和许多其他关键信息上运行。

可以在此处找到.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、工具

枚举工具(DirBusterDirbwfuzz,仅举几例),字典包含数十万个最受欢迎的文件夹和文件名,robots.txt常用条目等。

字典资源:

https://github.com/danielmiessler/SecLists

https://github.com/danielmiessler/RobotsDisallowed

0x3、参考

https://medium.com/@_bl4de/hidden-directories-and-files-as-a-source-of-sensitive-information-about-web-application-84e5c534e5ad

原文地址:https://www.cnblogs.com/17bdw/p/10703808.html

时间: 2024-08-10 23:30:03

Web应用程序的敏感信息-隐藏目录和文件的相关文章

微信小程序开发1--项目工程目录及文件简介

小程序的文件类型: HTML+CSS+JS组合,静态加动态 微信是WXML(结构),WXSS(表现),JS(行为),json(配置) 区别: 标签基本统一为<view> 不使用js 控制页面变化,使用一些特有的标签来控制 WXSS 具备CSS的大部分属性,新增尺寸单位,适应设备,分为全局样式和局部样式 js可以直接用 json: 工具配置----project.config.json 项目配置----app.json 页面配置 ----<page name >.json 目录说明

Qt给应用程序添加版本信息(对rc文件的设置,可利用QT内置变量)

作者:daodaoliang 时间:2016年7月11日16:12:09 版本:V 0.0.4 邮箱:[email protected] 0. 环境说明 系统环境: win10 64位 Qt环境: Qt-lib 5.6.0 QCreat0r 3.6.1 1. 使用.rc文件 1.1 在工程项目下创建 .rc 文件 例如 version.rc: # if defined(UNDER_CE) # include <winbase.h> # else # include <windows.h&

WEB服务器4--IIS中网站、Web应用程序和虚拟目录

网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8?1所示. 一个“网站(Web Site)”包含一个或多个“ Web 应用程序(Web Application)” 一个Web 应用程序包含一个或多个“虚拟目录(Virtual Directory)” 虚拟目录则映射到 Web 服务器或远程计算机上的物理目录. 图中可以清楚地看到此Web服务器上有两个“网站”:

开发Web应用程序的方式

开发应用程序的方式包括:文件系统.HTTP和FTP. 一.文件系统: 该方式是默认的.其可以把网站创建到当前物理文件系统上任何可以访问的地方,它可以是本机或网络上的机器.当选择文件系统时,VS将使用内置的Web服务器,而不是使用IIS运行Web应用程序,也不为Web应用程序创建持久的虚拟目录,IIS不再是该过程的一部分.实际上,甚至不需要在开发机器上安装IIS.当然,IIS对于部署服务器来说是必需的. 使用文件系统作为项目存储位置的缺点是,通过该方式创建的Web页面不能在浏览器中运行,而只能通过

将网站转换为Web应用程序

1.新建web应用程序,清除应用程序中默认生成的文件 2.将网站中的文件复制到web应用程序中 3.将网站的App_Code文件重命名 4.右键web应用程序,点击将转换为应用程序项目 5.添加引用 6.添加命名空间 搜索并添加名字空间 static ArrayList ReplaceClassFile(DirectoryInfo dir)//搜索文件夹中的文件 { ArrayList FileList = new ArrayList(); FileInfo[] allFile = dir.Ge

nagios_自定义宏变量隐藏发送邮件账号的敏感信息

需求: Nagios在邮件告警的时候使用sendemail来发送邮件. 默认web管理界面下Configuration -->  Object Type: Commands --> notify-host-by-email  notify-service-by-email 会显示 发送邮件账户的登录密码 通过:nagios的宏变量来隐藏掉显示出来的密码(自定义宏变量) vi /usr/local/nagios/etc/resource.cfg 加上 [email protected] $USE

Web应用程序的目录结构

一个Web应用程序基本上由以下项目组成: 1.静态资源(HTML,CSS,图片,声音等) 2.Servlet 3.JSP 4.自定义类 5.工具类 6.部署描述文件(web.xml等).设置信息(Annotation等) Web应用程序目录结构必须符合规范.例如,如果一个应用程序的环境路径(Context path)是/HelloServlet,则所有的资源项目必须以/HelloServlet为根目录依规定结构摆放.基本上根目录中的资源可以直接下载,若index.html位于/HelloServ

如何配置任意目录下Web应用程序

1,首先创建一个Web项目,tomcat 7, JDK 1.8 2,创建Web项目并部署到tomcat服务器下运行的步骤和方法: 在Eclipse下创建一个JAVA project 在JAVA项目下创建Web开发的目录结构 -WEB-INF -classes(编译后的class文件必须放在该目录下,如何修改Eclipse项目的class文件输出目录请参考:http://www.cnblogs.com/revel171226/p/8690792.html) -lib(这个目录主要是房web项目需要

Pikachu:目录遍历、敏感信息泄漏及URL重定向

目录遍历: 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件. 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件. 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞. 看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的