Статья Что хранят в себе скрытые файлы и папки на веб-сервере? Часть II

Предыдущая часть

Так же много информации в себе хранят файлы проектов IDE:

IDE (интегрированные среды разработки) используется многими программистами, для хранения настройки проектов, куча дополнительной информации в их собственных файлах. Если такая папка лежит на веб-сервере — это уже другой источник информации о этом веб-сервере.

Например, возьмем приложения JetBrains IDEs : IntelliJ IDEA, WebStorm, PHPStorm, RubyMine

Каждый проект, в каждой продукции JetBrains, создает собственные скрытые директории - .idea/.
Эти директории содержат всю информацию о нынешних проектах, их файлов, другие директории и IDE настройки.

aaasqqasa1.png


Один из этих файлов, является очень важным с точки зрения безопасности — workspace.xml.
Этот файл содержит много ценной информации, которая позволяет перечислить все файлы и папки приложения, информацию о системе контроля версии и многое другое.

Давайте рассмотрим, что именно хранит этот файл:
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>
(...)
Все узлы в component name=”FileEditorManager” содержат все файлы и их пути. Проще говоря — это просто результат команды ls выполненной в основной папке проекта, и завернутой в XML.

Если присмотреться к каждому component’у узла, можно найти информацию про использование системы контроля версии, например:
XML:
<component name="Git.Settings">
    <option name="UPDATE_TYPE" value="MERGE" />
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
Так же, тут много информации про комиты и остальные задачи, которые выполняются в узле component name=”TaskManager”:
XML:
<task id="LOCAL-00211" summary="change WebSocket port to 1099">
      <created>1436206418000</created>
      <option name="number" value="00211" />
      <option name="project" value="LOCAL" />
      <updated>1436206418000</updated>
    </task>
Другая интересная информация может находиться в изменении истории, записана в узел component name=”ChangeListManager”:
XML:
<component name="ChangeListManager">
                (...)
                <change type="DELETED" beforePath="$PROJECT_DIR$/chat/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/Makefile" afterPath="" />
                (...)
        </component>
так же хорошо, как и в узле component name="editorHistoryManager":
XML:
<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>
Если программист управлял дата базой интегрированным менеджером DB, значит там находятся другие интересные файлы: dataSources.ids (в этом файле находиться структура базы данных), dataSource.xml, dataSources.xml, dataSources.local.xml и dbnavigator.xml содержат примерно такую информацию:
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="gh7sdQ==" />   <!-- Base64 encoded -->
        </database>
Или даже больше, как например файл dataSources.local.xml:
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>
      <user-name>root</user-name>
      <schema-pattern>mywebapp.*</schema-pattern>
      <default-schemas>mywebapp.*</default-schemas>
    </data-source>
  </component>
</project>
Все зависит от самого проекта, и использования определенных IDE плагинов (к примеру, дебагер, система контроля версии или менеджер базы данных). Как вывод, стоит тщательно осматривать каждый узел component.

Как вы можете заметить, это очень интересный кладезь информации. Я предлагаю вам скачать любую продукцию JetBrains IDE (не реклама :) ), далее создать проект и добавить пару папок и файлов, после этого попробуйте управлять Git или SVN. Так же создайте простую базу данных, и управляйте ею при помощи Database Manager. После всего этого, в .idea/ вы найдете очень много интересной информации.

NetBeans IDE
другая популярная и бесплатная IDE для JAVA, C/C++, PHP, HTML5 и JavaScript разработки.

NetBeans создает свою собственную скрытую папку в папке проекты, где содержит всю нужную информацию и настройки — nbprosect/ (стоит отметить, что папка имеет схожую функцию со скрытыми папками продукции JetBrains IDEs)

В скрытой папке, вы сможете найти project.xml. Данный файл является отличным стартом для постижения конфигурации NetBeans проекта.

qwqwqdwd112.png


Способ изучения информации в скрытой папке очень похож с раннее описанными методами. Поэтому, я не буду детально на этом останавливаться.

Разные файлы конфигурации

Спецификация файлов конфигурации NodeJS/JavaScript

Если вы сталкивались с современными постройками JavaScript проектов, скорее всего вы были удивлены, насколько много файлов имеют *.json и .rc* в папке/папках проекта.

В папках проекта храниться много файлов конфигурации которые похожи на эти, и содержать в себе много информации о использованных библиотеках. Некоторые директории не доступны прямо из веб-браузера или вообще невозможно их обнаружить инструментами для обнаружения скрытых папок и файлов, но все же, некоторые из этих файлов можно встретить повсюду.

Примерами являются файлы конфигурации npm (package.json, package-lock.json), которые содержат все зависимости приложения. Так же примером являются файлы linters для JavaScript, таких менеджеров как ESlint, JShint или Bower - bower.json.

Давайте взглянем на простой bower.json файл, который содержит конфигурации для Bower и имеет список пакетов использованных в веб-приложении (для фронтенда):
JSON:
{
  "name": "testapp",
  "version": "2.1.0",
  "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": "latest",
    "angular-translate": "~2.6.1"
  },
  "devDependencies": {}
}
Больше интересных вещей со стороны безопасности является файл Node.js или io.js бэкенд приложение - package.json.

Если вы сможете скачать package.json с сервера, то этот простой метод по идентифицированию любых потенциальных npm пакетов использованных в приложении вам поможет:
  • убедитесь, что у вас установлен NodeJS, с npm версии 6, или выше
  • сохраните скачанный пакет (package.json в нашем случае) и запустите следующей командой в той же директории, где вы сохранили данный пакет:
    $ npm install
  • в конце, вы получите подобную информацию:
Код:
audited 9307 packages in 8.417s
found 9 vulnerabilities (4 low, 1 moderate, 4 high)
run `npm audit fix` to fix them, or `npm audit` for details
  • теперь запустите команду npm аудита:
    $ npm audit
  • после этого, команда выдаст вам отчет, который содержит все уязвимости, найденные аудитом:
Код:
                       === npm audit security report ===                     
                                                                              
# Run  npm install gulp@4.0.0  to resolve 5 vulnerabilities
SEMVER WARNING: Recommended action is a potentially breaking change
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-stream > glob > minimatch             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/118                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

(...more dtails about every vulnerability...)


found 9 vulnerabilities (4 low, 1 moderate, 4 high) in 9307 scanned packages
  run `npm audit fix` to fix 1 of them.
  6 vulnerabilities require semver-major dependency updates.
  2 vulnerabilities require manual review. See the full report for details.
Хорошей идеей будет сохранить отчет в отдельном файле, так как иногда вы обнаружите сотни слабых мест в нескольких модулях npm. Важно не попасться в “кроличью нору” - некоторые из этих проблем носят скорее теоретический, нежели практический характер, иногда модули могут даже не использоваться проектом.

Вот к примеру простой файл package.json демонстрирует что, возможно в проекте используется база данных MySQL и несколько клиент-серверов связаны друг с другом при помощи WebSockets:
JSON:
{
  "name": "Test",
  "version": "1.0.0",
  "dependencies": {
    "socket.io": "^1.3.5",
    "mysql": "^2.9.0"
  }
}
Этот вид информации позволяет вам понять, что стараться внедрить популярные NoSQL инъекции - не лучшая идея, из-за того, что приложение использует стандартную базу данных SQL и может быть вам лучше проверить, поддается ли приложение к SQL инъекции.

Также есть файлы вроде .bowerrc, .eslintrc, .jshintrc и похожие. Даже если они не содержат много “чувствительной” информации, всегда есть шанс, что вы сможете найти описания об архитектуре веб-приложения, о использованных библиотеках или/и фреймворков. Всегда нужно заглянуть в файл, ведь мало что могут содержать в себе комментарии...

Вывод:

Под плохой защитой, скрытые файлы и папки на веб-сервере дают хакеру много полезной и ценной информации, которую он сможет использовать для атаки на тот же веб-сервер. Поэтому, всегда удаляйте скрытые папки от IDE, Git’a и прочих приложений перед загрузкой проекта на веб-сервер.

Спасибо за внимание!
 
Статья понравилась . Конечно стоит еще раз перечитать.
Подскажите какой инструмент использовать для поиска файлов в папках и скрытых папках.
С выводом содержания самих папок (Файлов).
 
Статья понравилась . Конечно стоит еще раз перечитать.
Подскажите какой инструмент использовать для поиска файлов в папках и скрытых папках.
С выводом содержания самих папок (Файлов).
DIRB
 
  • Нравится
Реакции: DjBRINE1 и g00db0y
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!