Программы поиска в базах данных и название баз данных

Об­лачная база дан­ных — удоб­ная вещь: вся работа по деп­лою и нас­трой­ке сервера за вас уже сде­лана, оста­ется толь­ко поль­зовать­ся! Системных администраторв это рас­слаб­ляет нас­толь­ко, что такие открытые находяться с помощью поис­ковых систем.

В статье я покажу, как автоматизировать поиск незащищенных баз данных с помощью поисковиков.

Поиск открытых баз данных с помощью поисковиков

Си­деть, менять поисковые системы и переби­рать все URL вруч­ную не очень увлекательно. Слиш­ком час­то видим «error : Permission denied». Зна­чит, пора переходить к автоматизации!

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

Прог­рамми­ровать, прав­да, не придется, потому что некоторые такие как Францеска Эрера — это уже сде­лали до нас. Возь­мем, к при­меру интересный скрипт, который сам под­бира­ет URL и ищет уяз­вимые базы дан­ных.

Индексы | Основы SQL

Скачиваем его и уста­нав­лива­ем зависи­мос­ти:

git clone https : //github.com/Turr0n/firebase.git
cd firebase
pip install — r requirements . txt

После этого запус­каем:

python3 firebase . py — p 4 — c 150 – dnsdumpster

  • p — ука­зыва­ет количес­тво потоков (по умол­чанию 1, мак­симум 4);
  • dnsdumpster — генери­рует URL самос­тоятель­но;
  • с — какое количес­тво доменов генери­ровать.

Да, скрипт уме­ет генери­ровать ссыл­ки самос­тоятель­но. Точ­нее, дела­ет это не сам, а обра­щает­ся за помощью к ути­лите DNSdumpster.

Ре­зуль­тат работы скрип­та по поиску базы данных

По резуль­тату вид­но, что из най­ден­ных баз:

  • 37 урлов «битые» или боль­ше не сущес­тву­ют;
  • 171 база име­ет аутен­тифика­цию при обра­щении к дан­ным и защище­на;
  • од­на база с подоз­рени­ем на уяз­вимость;
  • 25 баз не защище­ны или уяз­вимы.

Мож­но скор­мить скрип­ту и свой спи­сок. В нем дол­жны быть толь­ко под­домены треть­его уров­ня. Нап­ример, вы дела­ете вот такой вход­ной спи­сок:

Тог­да скрипт про­верит вот эти URL:

https : //xxx.firebaseio.com
https : //yyy.firebaseio.com
https : //zzz.firebaseio.com

Поиск поддоменов

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

python3 sublist3r . py — d firebaseio . com

И на выходе получа­ем око­ло 650 доменов. Работа­ет очень быс­тро.

По­иск доменов прог­раммой sublist3r

Еще одна ути­лита для генера­ции доменов — subbrute. Она выдала мне в рай­оне 100 под­доменов, но работа­ла 30–40 минут.

(Создание БД) 7. Организация поиска по записям базы данных

По­иск под­доменов прог­раммой subbrute

Censys-subdomain-finder, на который я воз­лагал боль­шие надеж­ды, выдал все­го семь доменов. К сло­ву, и сам сер­вис выдал нем­ного — 25 урлов.

Все перечис­ленные ути­литы не вхо­дят в сос­тав дис­три­бути­ва Kali Linux, их приш­лось качать отдель­но.

Из онлай­новых сер­висов мож­но вос­поль­зовать­ся nmmapper, DNSdumpster, Pentest-Tools.

Ес­ли все еще мало, мож­но задей­ство­вать зна­ния о том, что нас­трой­ки интегра­ции про­исхо­дят в фай­ле:

google — services . json

И поис­кать в гите зап­росом:

site : github . com google — services . json

Этот вари­ант идет враз­рез со сло­вом «авто­мати­зация», зато мож­но докопать­ся до уни­каль­ных баз.

Усовершенствуем скрипт для поиска баз данных

Те­перь мы воору­жены доб­ротным набором урлов и зна­ем, что какие‑то из них могут быть уяз­вимы. Даже можем запус­тить скрипт и про­верить количес­тво невер­но нас­тро­енных баз из нашего спис­ка. Но цель в таких слу­чаях — не соб­рать ста­тис­тику, а получить уяз­вимые цели. Поэто­му откро­ем код скрип­та и слег­ка поп­равим.

Пос­мотри вот на этот кусок кода:

with open ( args_ . list , ‘r’ ) as f :
[ urls . add ( ‘https://<>.firebaseio.com/.json’ . format ( line . rstrip ( ) ) ) for line in f ]

Из него понят­но, как фор­миру­ется пол­ный адрес. А в кон­це фор­миру­ется отчет:

print ( ‘404 DBs: <>’ . format ( l [ ‘-2’ ] ) )
print ( ‘Secure DBs: <>’ . format ( l [ ‘-1’ ] ) )
print ( ‘Possible vulnerable DBs: <>’ . format ( l [ ‘0’ ] ) )
print ( ‘Vulnerable DBs: <>’ . format ( l [ ‘1’ ] ) )

Ку­сок кода с про­вер­кой я при­водить не буду. Там нет ничего любопыт­ного, мне нуж­но было най­ти само прис­воение. И вот оно:

Читайте также:
Как подобрать ключ к любой программе

with open ( args_ . fn , ‘w’ ) as f :
json . dump ( loot , f )
for result in loot :
l [ str ( result [ ‘status’ ] ) ] += 1

Вот в этом мес­те я соз­даю свой мас­сив по ста­тусу 1. Так как я еще не понимаю, чем его запол­нять, записы­ваю все под­ряд. Получи­лось при­мер­но сле­дующее:

Vulnerable = [ ]
for result in loot :
l [ str ( result [ ‘status’ ] ) ] += 1
if str ( result [ ‘status’ ] ) == ‘1’ :
Vulnerable . append ( result )

И в кон­це добав­ляю вывод резуль­тата в кон­соль:

print ( ‘404 DBs: <>’ . format ( l [ ‘-2’ ] ) )
print ( ‘Secure DBs: <>’ . format ( l [ ‘-1’ ] ) )
print ( ‘Possible vulnerable DBs: <>’ . format ( l [ ‘0’ ] ) )
print ( ‘Vulnerable DBs: <>’ . format ( l [ ‘1’ ] ) )
print ( Vulnerable )

Пос­ле запус­ка вижу такую кар­тину.

Поиск открытых баз данных с помощью поисковиков

Мне высыпа­лось все, что хра­нилось в базах. Зато теперь я знаю, что записы­вать в Vulnerable. Пра­вим код, как надо:

Vulnerable = [ ]
for result in loot :
l [ str ( result [ ‘status’ ] ) ] += 1
if str ( result [ ‘status’ ] ) == ‘1’ :
Vulnerable . append ( result [ ‘url’ ] )
print ( ‘404 DBs: <>’ . format ( l [ ‘-2’ ] ) )
print ( ‘Secure DBs: <>’ . format ( l [ ‘-1’ ] ) )
print ( ‘Possible vulnerable DBs: <>’ . format ( l [ ‘0’ ] ) )
print ( ‘Vulnerable DBs: <>’ . format ( l [ ‘1’ ] ) )
print ( Vulnerable )

На этот раз при запус­ке видим то, что было нуж­но, — спи­сок уяз­вимых баз.

Ра­бота усовершенствованного скрип­та для поиска базы данных

Осо­бен­но меня заин­тересо­вала вот эта ссыл­ка:

https : //covid-19-tracker-e76ca.firebaseio.com/.json

В Малай­зии так спе­шили отсле­живать переме­щения боль­ных ковидом, что не пос­тавили пароль на базу дан­ных с их коор­дината­ми…

Как защитить базы данных

Наз­вать эту проб­лему уяз­вимостью — некото­рое пре­уве­личе­ние. Все сво­дит­ся к тому, что Google поз­воля­ет открыть дос­туп к содер­жимому базы всем неав­торизо­ван­ным поль­зовате­лям, и некото­рые раз­работ­чики так и пос­тупа­ют.

По­это­му, что­бы защитить­ся, дос­таточ­но про­писать полити­ки безопас­ности Firebase. Google пред­лага­ет при­дер­живать­ся сле­дующих пра­вил.

Да­же во вре­мя раз­работ­ки (на тес­те и на stage) не сто­ит откры­вать дос­туп ко всем дан­ным в Firebase неав­торизо­ван­ным поль­зовате­лям, но есть воз­можность открыть их при авто­риза­ции:

Источник: spy-soft.net

Поиск данных и объектов в базе данных MS SQL Server с помощью бесплатной утилиты dbForge Search

Описание общей потребности в поиске данных и объектов в базе данных

Поиск данных, а также хранимых процедур, таблиц и других объектов в базе данных является достаточно актуальным вопросом в том числе и для C#-разработчиков, а также и для .NET-разработки в целом.

Достаточно часто может возникнуть ситуация, при которой нужно найти:

  1. объект базы данных (таблицу, представление, хранимую процедуру, функцию и т д)
  2. данные (значение и в какой таблице располагается)
  3. фрагмент кода в определениях объектов базы данных

Сначала рассмотрим как можно осуществлять поиск данных и объектов в базе данных с помощью встроенных средств самой СУБД, а затем рассмотрим как это сделать с помощью бесплатной утилиты dbForge Search.

Поиск с помощью встроенных средств самой СУБД

Определить есть ли таблица Employee в базе данных можно с помощью следующего скрипта:

Поиск таблицы по имени

select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name]=’Employee’;

Результат может быть примерно такой:

  1. идентификаторы объекта и схемы, где располагается объект
  2. название этой схемы и название этого объекта
  3. тип объекта и описание этого типа объекта
  4. даты и время создания и последней модификации объекта

Поиск всех объектов по подстроке в имени

select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name] like ‘%Project%’;

Результат может быть примерно такой:

Как видно из результата, здесь подстроку “Project” содержат не только две таблицы Project и ProjectSkill, но и также некоторые первичные и внешние ключи.

Чтобы понять кому именно принадлежат данные ключи, добавим в вывод поле parent_object_id и его имя и схему, в которой он располагается следующим образом:

Поиск всех объектов по подстроке в имени с выводом родительских объектов

select ao.[object_id], ao.[schema_id], schema_name(ao.[schema_id]) as [schema_name], ao.parent_object_id, p.[schema_id] as [parent_schema_id], schema_name(p.[schema_id]) as [parent_schema_name], p.[name] as [parent_name], ao.[name], ao.[type], ao.[type_desc], ao.[create_date], ao.[modify_date] from sys.all_objects as ao left outer join sys.all_objects as p on ao.[parent_object_id]=p.[object_id] where ao.[name] like ‘%Project%’;

Результатом будет вывод таблицы с детальной информацией о родительских объектах, т е где определены первичные и внешние ключи:

Читайте также:
Что входит в окно программы

В запросах используются следующие системные объекты:

  • таблица sys.all_objects
  • скалярная функция schema_name

Чтобы найти строковое значение по всем таблицам базы данных, можно воспользоваться следующим решением. Упростим данное решение и покажем как можно найти например значение “Ramiro” с помощью следующего скрипта:

Поиск строковых значений по подстроке во всех таблицах базы данных

Результат выполнения может быть таким:

Здесь выводятся имена таблиц и в каких столбцах хранится значение, содержащие подстроку “Ramiro”. А также количество найденных входов данной подстроки для найденной пары таблица-колонка.

Чтобы найти объекты, в определениях которых есть заданный фрагмент кода, можно воспользоваться следующими системными представлениями:

  1. sys.sql_modules
  2. sys.all_sql_modules
  3. sys.syscomments

Поиск фрагмента кода в определениях объектов базы данных

select obj.[object_id], obj.[name], obj.[type_desc], sc.[text] from sys.syscomments as sc inner join sys.objects obj on sc.[id]=obj.[object_id] where sc.[text] like ‘%code snippet%’;

Здесь будет выведен идентификатор, название, описание и полное определение объекта.

Поиск с помощью бесплатной утилиты dbForge Search

Однако, более удобно поиск производить с помощью готовых хороших инструментов. Одним из таких инструментов является dbForge Search.

Для вызова этой утилиты в окне SSMS нажмите на кнопку .

Появится следующее окно поиска:

Обратите внимание на верхнюю панель (слева направо):

  1. можно переключать режим поиска (ищем DDL (объекты) или данные)
  2. непосредственно что ищем (какую подстроку)
  3. учитывать ли регистр, искать точное соответствие слову, искать вхождения:

  • группировать результат по типам объектов — кнопка
  • выбрать нужные типы объектов для поиска:
  • также можно задать несколько баз данных для поиска и выбрать экземпляр MS SQL Server
  • Это все в режиме поиска объектов, т е когда включен DDL:

    В режиме поиска данных изменится только выбор типов объектов:

    А именно будут доступны для выбора только таблицы, где и хранятся собственно сами данные:

    Теперь как и раньше найдем все вхождения подстроки “Project” в названиях объектов:

    Как видно, был выбран режим поиска по DDL-объектам, заполнено что ищем-строка “Project”, остальное все было по умолчанию.

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

    Также можно переместить навигацию на найденный объект, щелкнув на кнопку :

    Можно также сгруппировать найденные объекты по их типу:

    Обратите внимание, что выводятся даже те таблицы, в которых есть поля, в именах которых содержится подстрока “Project”. Однако, напомним, что режим поиска можно менять: искать полное соответствие/частичное/учитывать регистр или нет.

    Теперь найдем значение “Ramiro” по всем таблицам:

    Обратите внимание, что внизу отображаются все строки, в которых содержится подстрока “Ramiro” выбранной таблицы Employee.

    Также можно переместить навигацию к найденному объекту, нажав как и ранее на кнопку :

    Таким образом мы можем искать нужные объекты и данные в базе данных.

    Заключение

    Были рассмотрены способы поиска как самих данных, так и объектов в базе данных как с помощью встроенных средств самой СУБД MS SQL Server, так и с помощью бесплатной утилиты dbForge Search.

    Также от компании Devart есть и ряд других бесплатных готовых решений, полный список которых можно посмотреть здесь.

    Источники

    • Search_Script.sql
    • SSMS
    • dbForge Search
    • Документация по Microsoft SQL
    • Бесплатные решения от компании Devart

    Источник: habr.com

    Быстрый поиск объектов и данных в БД SQL Server

    Очень часто разработчики и администраторы БД сталкиваются с задачей поиска в базе данных всех упоминаний какого-либо объекта, столбца, переменной или поиск всех таблиц, где встречается искомое значение. Если вам приходилось решать подобную проблему, то вы знаете, что это ни самая тривиальная задача и Ctrl+F здесь не поможет.

    Готового решения нет ни в SQL Server Management Studio ни в Visual Studio, вот несколько сценариев, которые вы можете использовать:

    Поиск данных в таблицах и представлениях

    Есть много реализаций на T-SQL поиска данных по всем таблицам с просмотром всех столбцов и это не самая оптимальная реализация, так как везде используется перебор в курсоре системных представлений.

    У этого решения есть много недостатков:

    • Использование курсоров, а это, как правило неэффективный код
    • Сложный запрос, который медленно работает даже на небольших базах данных
    • Поиск работает только по текстовым данным, поэтому для поиска, например, даты потребуется доработка
    Читайте также:
    Целевая программа это в менеджменте

    Поиск объектов

    Поиск объектов в БД по имени или их упоминание в других объектах немного проще, чем поиск определённого текста. Есть так же несколько разных сценариев поиска, но все их объединяет одно: обращение к системным объектам.

    INFORMATION_SCHEMA.ROUTINES

    Системное представление INFORMATION_SCHEMA.ROUTINES позволяет найти любой параметр, встречающийся в процедурах или функциях. Колонка ROUTINE_DEFINITION содержит полный текст объекта, который был указан при его создании.

    Результат работы запроса:

    Не используйте представления INFORMATION_SCHEMA, чтобы определить схему объекта. Единственный надежный способ найти схему объекта — выполнить запрос к представлению каталога sys.objects.

    Представление sys.syscomments

    Содержит записи для всех представлений, правил, значений по умолчанию, триггеров, ограничений CHECK и DEFAULT, а также для всех хранимых процедур в базе данных. Столбец text содержит инструкции исходных определений SQL.

    Этот метод не желательно использовать, так как в будущих версиях SQL Server представление sys.syscomments будет удалено.

    Представление sys.sql_modules

    Содержит по одной строке для каждого объекта, являющегося модулем, определенным на языке SQL в SQL Server.

    Результат такой же, как в предыдущем способе:

    Другие представления информационной схемы

    Запрос к представлениям sys.syscomments, sys.schemas и sys.objects. Представление sys.schemas содержит информацию обо всех схемах внутри базы данных. В представление sys.objects содержится информация обо всех объектах базы данных. Обратите внимание, что для поиска информации о триггерах необходимо просматривать отдельное представление sys.triggers.

    Основным недостатком данных методов поиска является то, что для поиска каждого нового типа объектов необходимо вносить в скрипты изменения. Чтобы сделать это вы должны хорошо понимать внутреннюю организацию и структуру системных объектов SQL Server. Кроме того, нужно позаботиться об обработке различных ошибок и исключений, например, связанных с поиском строк, содержащих экранирующие символы.

    Если вы не являетесь опытным разработчиком, не знакомы с внутренним устройством хранения DDL информации объектов БД или предпочитаете использовать проверенное и безошибочное решение, то начните использовать ApexSQL Search.

    ApexSQL Search – это надстройка (ADD-IN) для SSMS и Visual Studio, которая позволяет искать любой текст в объектах базы данных (в том числе имена объектов), данные, хранящиеся в таблицах и представлениях (даже если они зашифрованы), осуществлять повторные поиски по истории в один клик.

    Для поиска данных в таблицах и представлениях:

    1. В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
    2. Выберите вариант Database text search…:
    3. В текстовом поле поиска Search text укажите искомый текст.
    4. В раскрывающемся меню Database выберите базу данных для поиска
    5. В дереве поиска Select objects to search укажите таблицы и представления для поиска или оставьте их все выделенными
    6. С помощью флажков укажите в каких типах данных необходимо осуществить поиск (numeric, text type, uniqueidentifier, date columns), искать ли в представлениях, необходимо ли строгое совпадение и, при поиске даты, укажите её формат.
      ApexSQL Search - Database text search
    7. После нажатия кнопки Find now, вы получите сводную таблицу со списком таблиц и представлений, которые содержат искомое значение: ApexSQL Search - Database text search
    8. Нажмите кнопку с многоточием в колонке Column value, чтобы получить детали:
      ApexSQL Search - Database search details

    Для поиска объектов:

    1. В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
    2. Выберите вариант Database object search…: ApexSQL Search - Database search details
    3. В поле поиска Search text укажите искомый объект, например, имя переменной.
    4. В раскрывающемся меню Database выберите базу данных для поиска
    5. В дереве поиска Objects укажите типы объектов для поиска или оставьте их все выделенными
    6. Флажками укажите детали поиска: искать ли в именах объектов, колонок, индексов или только в самих описания объектов. Просматривать ли системные объекты, нужно ли точное совпадение, а также можно указать экранирующий символ.
    7. После этого начинаем поиск Find now:
      ApexSQL Search - Database object search В таблице будет полный список объектов, которые содержат искомое значение.
    8. При двойном щелчке по объекту в таблице Database object search, можно увидеть его ссылку в Object Explorer
      ApexSQL Search - Database object search

    SQL Server Management Studio и Visual Studio не имеют встроенной возможности поиска объектов и данных в БД. Запросы, которые решают эту задачу неэффективны, медленные в работе и требуют глубоких знаний системных объектов SQL Server. Но зато с этой задачей прекрасно справляется ApexSQL Search

    Источник: solutioncenter.apexsql.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru