Как составить дорки

Вступление

Google Dorks или Google Hacking — техника, используемая СМИ, следственными органами, инженерами по безопасности и любыми пользователями для создания запросов в различных поисковых системах для обнаружения скрытой информации и уязвимостях, которые можно обнаружить на общедоступных серверах. Это метод, в котором обычные запросы на поиск веб-сайтов используются в полную меру для определения информации, скрытой на поверхности.

Как работает Google Dorking?

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

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

Однако самое интересное в Google Dorking, так это огромный объем информации, который может помочь каждому в процессе изучения поискового процесса Google. Может помочь новичкам в поиске пропавших родственников, а может научить каким образом можно извлечь информацию для собственной выгоды. В общем, каждый ресурс интересен и удивителен по своему и может помочь каждому в том, что именно он ищет.

Какую информацию можно найти через Dorks?

Начиная, от контроллеров удаленного доступа различных заводских механизмов до конфигурационных интерфейсов важных систем. Есть предположение о том, что огромное количество информации, выложенной в сети, никто и никогда не найдет.

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

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

И к сожалению, Google безжалостно эффективен в поиске любых устройств в Интернете, работающих на серверах HTTP и HTTPS. И поскольку большинство этих устройств содержат определенную веб платформу для их настройки, это означает, что многие вещи, не предназначенные быть в Google, в конечном итоге оказываются там.

Безусловно, самый серьезный тип файлов, это тот, который несет в себе учетные данные пользователей или же всей компании. Обычно это происходит двумя способами. В первом, сервер настроен неправильно и выставляет свои административные логи или журналы в открытом доступе в Интернете. Когда пароли меняются или пользователь не может войти в систему, эти архивы могут утечь вместе с учетными данными.

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

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

Разбор операторов поиска

Dorking можно использовать в различных поисковых системах, не только в Google. В повседневном использовании поисковые системы, такие как Google, Bing, Yahoo и DuckDuckGo, принимают поисковый запрос или строку поисковых запросов и возвращают соответствующие результаты. Также эти же системы запрограммированы принимать более продвинутые и сложные операторы, которые значительно сужают эти условия поиска. Оператор — это ключевое слово или фраза, несущее особое значение для поисковой системы. Вот примеры часто используемых операторов: «inurl», «intext», «site», «feed», «language». За каждым оператором следует двоеточие, за которым следует соответствующий ключевая фраза или фразы.

Эти операторы позволяют выполнять поиск более конкретной информации, например: определенные строки текста внутри страниц веб-сайта или файлы, размещенные по конкретному URL-адресу. Помимо прочего, Google Dorking может также находить скрытые страницы для входа в систему, сообщения об ошибках, выдающие информации о доступных уязвимостях и файлы общего доступа. В основном причина заключается в том, что администратор веб-сайта мог просто забыть исключить из открытого доступа.

Наиболее практичным и в то же время интересным сервисом Google, является возможность поиска удаленных или архивных страниц. Это можно сделать с помощью оператора «cache:». Оператор работает таким образом, что показывает сохраненную (удаленную) версию веб-страницы, хранящейся в кеше Google. Синтаксис данного оператора показан здесь:

cache:www.youtube.com

После произведения вышеуказанного запроса в Google, предоставляется доступ к предыдущей или устаревшей версии веб-страницы Youtube. Команда позволяет вызвать полную версию страницы, текстовую версию или сам источник страницы (целостный код). Также указывается точное время (дата, час, минута, секунда) индексации, сделанной пауком Google. Страница отображается в виде графического файла, хоть и поиск по самой странице осуществляется точно так же как в обычной странице HTML (сочетание клавиш CTRL + F). Результаты выполнения команды «cache:» зависят от того, как часто веб-страница индексировалась роботом Google. Если разработчик сам устанавливает индикатор с определенной частотой посещений в заголовке HTML-документа, то Google распознает страницу как второстепенную и обычно игнорирует ее в пользу коэффициента PageRank, являющийся основным фактором частоты индексации страницы. Поэтому, если конкретная веб-страница была изменена, между посещениями робота Google, она не будет проиндексирована и не будет прочитана с помощью команды «cache:». Примеры, которые особенно хорошо работают при тестировании данной функции, являются часто обновляемые блоги, учетные записи социальных сетей и интернет-порталы.

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

Информация о пользователях

Поиск информации о пользователях используется при помощи расширенных операторов, которые делают результаты поиска точными и подробными. Оператор «@» используется для поиска индексации пользователей в социальных сетях: Twitter, Facebook, Instagram. На примере того же самого польского вуза, можно найти его официального представителя, на одной из социальных платформ, при помощи этого оператора следующим образом:

inurl: twitter @minregion_ua

Данный запрос в Twitter находит пользователя «minregion_ua». Предполагая, что место или наименование работы пользователя, которого ищем (Министерство по развитию общин и территорий Украины) и его имя известны, можно задать более конкретный запрос. И вместо утомительного поиска по всей веб-странице учреждения, можно задать правильный запрос на основе адреса электронной почты и предположить, что в названии адреса должно быть указано хотя бы имя запрашиваемого пользователя или учреждения. Например:

site: www.minregion.gov.ua «@minregion.ua»

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

email.xlsx

filetype: xls + email

Вдобавок можно попытаться получить адреса электронных почт с веб-страницы по следующему запросу:

site:www.minregion.gov.ua intext:e-mail

Показанный выше запрос, будет производить поиск по ключевому слову «email» на веб-странице Министерства по развитию общин и территорий Украины. Поиск адресов электронной почты имеет ограниченное использование и в основном требует небольшой подготовки и сборе информации о пользователях заранее.

К сожалению, поиск индексированных телефонных номеров через «phonebook» Google ограничен только на территории США. Например:

phonebook:Arthur Mobile AL

Поиск информации о пользователях также возможен через Google «image search» или обратного поиска изображений. Это позволяет находить идентичные или похожие фотографии на сайтах, проиндексированными Google.

Информация веб-ресурсов

Google имеет несколько полезных операторов, в частности «related:», который отображает список «похожих» веб-сайтов на нужный. Сходство основано на функциональных ссылках, а не на логических или содержательных связях.

related:minregion.gov.ua

В этом примере отображаются страницы других Министерств Украины. Этот оператор работает как кнопка “Похожие страницы” в расширенном поиске Google. Точно таким же образом работает запрос “info:”, который отображает информацию на определенной веб-странице. Это конкретная информация веб-страницы, представленная в заголовке веб-сайта (), а именно в мета-тегах описания (<meta name = “Description”). Пример:

info:minregion.gov.ua

Другой запрос, «define:» весьма полезен в поиске научной работе. Он позволяет получить определения слов из таких источников, как энциклопедий и онлайн-словарей. Пример его применения:

define:ukraine territories

Универсальный оператор — тильда (»~»), позволяет искать похожие слова или слова синонимы:

~громад ~розвитку

Приведенный выше запрос отображает, как веб-сайты со словами «громад» (территорий) и «розвитку» (развитие), так и сайты с синонимом «общины». Оператор «link:», модифицирующий запрос, ограничивает диапазон поиска ссылками, указанными для определенной страницы.

link:www.minregion.gov.ua

Однако этот оператор не отображает все результаты и не расширяет критерии поиска.

Хештеги являются своего рода идентификационными номерами, позволяющие группировать информацию. В настоящее время они используются в Instagram, VK, Facebook, Tumblr и TikTok. Google позволяет выполнять поиск во многих социальных сетях одновременно или только в рекомендуемых. Пример типичного запроса к любой поисковой системе является:

#політикавукраїні

Оператор «AROUND(n)» позволяет искать два слова, расположенные на расстоянии определенного количества слов, друг от друга. Пример:

Міністерство AROUND(4) України

Результатом вышеупомянутого запроса является отображение веб-сайтов, которые содержат эти два слова (»министерство» и «Украины»), но они отделены друг от друга четырьмя другими словами.

Поиск по типам файлов также чрезвычайно полезен, поскольку Google индексирует материалы в соответствии с их форматами, в котором они были записаны. Для этого используется оператор «filetype:». В настоящее время используется очень широкий диапазон поиска файлов. Среди всех доступных поисковых систем, Google предоставляет самый сложный набор операторов для поиска открытых исходных кодов.

В качестве альтернативы вышеупомянутых операторов, рекомендуются такие инструменты, как Maltego и Oryon OSINT Browser. Они обеспечивают автоматический поиск данных и не требуют знания специальных операторов. Механизм программ очень прост: с помощью правильного запроса, направленного в Google или Bing, находятся документы, опубликованные интересующим вас учреждением и анализируются метаданные из этих документов. Потенциальным информационным ресурсом для таких программ является каждый файл с любым расширением, к примеру: «.doc», «.pdf», «.ppt», «.odt», «.xls» или «.jpg».

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

Информация, неосознанно оставленная владельцами сайтов

Ресурсы, индексируемые Google, остаются публичными (например внутренние документы и материалы компании, оставшиеся на сервере), или они оставляются для удобства использования теми же людьми (например музыкальные файлы или файлы фильмов). Поиск такого контента может быть сделан при помощи Google через множество различных способов и самый простой из них, это просто угадать. Если например в определенном каталоге есть файлы 5.jpg, 8.jpg и 9.jpg, можно предугадать, что есть и файлы от 1 до 4, от 6 до 7 и даже более 9. Поэтому можно получить доступ к материалам, которые не должны были быть в публичном виде. Другой способ — поиск по определенным типам контента на веб-сайтах. Можно искать музыкальные файлы, фотографии, фильмы и книги (электронные книги, аудиокниги).

В другом случае это могут быть файлы, которые пользователь оставил бессознательно в публичном доступе (например — музыка на FTP сервере для собственного использования). Такую информацию можно получить двумя способами: используя оператор «filetype:» или оператор «inurl:». Например:

filetype:doc site:gov.ua

site:www.minregion.gov.ua filetype:pdf

site:www.minregion.gov.ua inurl:doc

Также можно искать программные файлы, используя поисковый запрос и фильтруя искомый файл по его расширению:

filetype:iso

Информация о структуре веб-страниц

Для того чтобы просмотреть структуру определенной веб-страницы и раскрыть всю ее конструкцию, которая поможет в дальнейшем сервера и его уязвимостей, можно проделать это, используя только оператор «site:». Давайте проанализируем следующую фразу:

site: www.minregion.gov.ua minregion

Мы начинаем поиск слова «minregion» в домене «www.minregion.gov.ua». Каждый сайт из этого домена (Google ищет как в тексте, в заголовках и в заголовке сайта) содержит данное слово. Таким образом, получая полную структуру всех сайтов этого конкретного домена. Как только структура каталогов станет доступной, более точный результат (хотя это не всегда может произойти) можно получить с помощью следующего запроса:

site:minregion.gov.ua intitle:index.of «parent directory»

Он показывает наименее защищенные субдомены «minregion.gov.ua», иногда с возможностью поиска по всему каталога, вместе с возможной загрузкой файлов. Поэтому, естественно, такой запрос не применим ко всем доменам, поскольку они могут быть защищены или работать под управлением какого-либо другого сервера.

site:gov inurl:robots.txt intext:Disallow: /web.config

Данный оператор позволяет получить доступ к параметрам конфигураций различных серверов. После проведения запроса, переходим в файл robots.txt, ищем путь к «web.config» и переход по заданному пути файла. Чтобы получить имя сервера, его версию и другие параметры (например, порты), делается следующий запрос:

site:gosstandart.gov.by intitle:index.of server.at

Каждый сервер имеет какие-то свои уникальные фразы на заглавных страницах, например, Internet Information Service (IIS):

intitle:welcome.to intitle:internet IIS

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

site:gov.ua inurl:manual apache directives modules (Apache)

Доступ может быть более расширенным, например, благодаря файлу с ошибками SQL:

«#mysql dump» filetype:SQL

Ошибки в базе данных SQL могут в частности, предоставить информацию о структуре и содержании баз данных. В свою очередь, вся веб-страница, ее оригинал и (или) ее обновленные версии могут быть доступны по следующему запросу:

site:gov.ua inurl:backup

site:gov.ua inurl:backup intitle:index.of inurl:admin

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

Также с помощью программы FOCA можно найти такой же контент, как и при поиске вышеупомянутых операторов. Для начала работы, программе нужно название доменного имени, после чего она проанализирует структуру всего домена и всех других поддоменов, подключенных к серверам конкретного учреждения. Такую информацию можно найти в диалоговом окне на вкладке «Сеть»:

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

Если вы захотите узнать еще больше информации о всех возможных операторов индексирования вы можете ознакомиться с целевой базой данных всех операторов Google Dorking вот здесь. Также можно ознакомиться с одним интересным проектом на GitHub, который собрал в себя все самые распространенные и уязвимые URL ссылки и попробовать поискать для себя что-то интересное, его можно посмотреть вот по этой ссылке.

Комбинируем и получаем результаты

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

Поиск бюджетов на веб-сайте Министерства национальной безопасности и кибербезопасности США.

Следующая комбинация предоставляет все общедоступные проиндексированные таблицы Excel, содержащие слово «бюджет»:

budget filetype:xls

Так как оператор «filetype:» автоматически не распознает различные версии одинаковых форматов файлов (например, doc против odt или xlsx против csv), каждый из этих форматов должен быть разбит отдельно:

budget filetype:xlsx OR budget filetype:csv

Последующий dork вернет файлы PDF на веб-сайте NASA:

site:nasa.gov filetype:pdf

Еще один интересный пример использования дорка с ключевым словом «бюджет» — это поиск документов по кибербезопасности США в формате «pdf» на официальной сайте Министерства внутренней обороны.

budget cybersecurity site:dhs.gov filetype:pdf

То же самое применение дорка, но в этот раз поисковик вернет электронные таблицы .xlsx, содержащие слово «бюджет» на веб-сайте Министерства внутренней безопасности США:

budget site: dhs.gov filetype: xls

Поиск паролей

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

password filetype:doc / docx / pdf / xls

password filetype:doc / docx / pdf / xls site:[Наименование сайта]

Если попробовать ввести такой запрос в другой поисковой системе, то можно получить совершенно разные результаты. Например, если выполнить этот запрос без термина «site: [Наименование сайта]«, Google вернет результаты документов, содержащие реальные имена пользователей и пароли некоторых американских средних школ. Другие поисковые системы не показывают эту информацию на первых страницах результатов. Как это можно увидеть ниже, Yahoo и DuckDuckGo являются таковыми примерами.

Цены на жилье в Лондоне

Другой интересный пример касается информации о цене на жилье в Лондоне. Ниже приведены результаты запроса, который был введен в четырех разных поисковых системах:

filetype:xls «house prices» and «London»

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

Альтернативные инструменты поиска индексаций

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

Google Hacking Online

Google Hacking Online — это онлайн интеграция поиска Google Dorking различных данных через веб страницу при помощи установленных операторов, с которыми вы можете ознакомиться здесь. Инструмент представляет из себя обычное поле ввода для поиска желаемого IP адреса или URL ссылки на интересующий ресурс, вместе с предлагаемыми опциями поиска.

Как видно из картинки выше, поиск по нескольким параметрам предоставляется в виде нескольких вариантов:

  1. Поиск публичных и уязвимых каталогов
  2. Файлы конфигурации
  3. Файлы баз данных
  4. Логи
  5. Старые данные и данные резервного копирования
  6. Страницы аутентификации
  7. Ошибки SQL
  8. Документы, хранящиеся в общем доступе
  9. Информация о конфигурации php на сервере («phpinfo»)
  10. Файлы общего интерфейса шлюза (CGI)

Все работает на ванильном JS, который прописан в самом файл веб страницы. В начале берется введенная информация пользователя, а именно наименование хоста или IP адрес веб страницы. И потом составляется запрос с операторами на введенную информацию. Ссылка на поиск определенного ресурса, открывается в новом всплывающем окне, с предоставленными результатами.

BinGoo

BinGoo — это универсальной инструмент, написанный на чистом bash. Он использует поисковые операторы Google и Bing для фильтрации большого количества ссылок на основе приведенных поисковых терминов. Можно выбрать поиск по одному оператору за раз или составить списки по одному оператору на строку и выполнить массовое сканирование. Как только заканчивается процесс с изначальным сбором информации или у вас появятся ссылки, собранные другими способами, можно перейти к инструментам анализа, чтобы проверить общие признаки уязвимостей.

Результаты аккуратно отсортированы в соответствующих файлах на основе полученных результатов. Но и здесь анализ не останавливается, можно пойти еще дальше и запустить их с помощью дополнительных функционалов SQL или LFI или можно использовать инструменты-оболочки SQLMAP и FIMAP, которые работают намного лучше, с точными результатами.

Также включено несколько удобных функций, чтобы упростить жизнь, таких как «геодоркинг» на основе типа домена, кодов стран в домене и проверка общего хостинга, которая использует предварительно сконфигурированный поиск Bing и список дорков для поиска возможных уязвимостей на других сайтах. Также включен простой поиск страниц администраторов, работающий на основе предоставленного списка и кодов ответа сервера для подтверждения. В целом — это очень интересный и компактный пакет инструментов, осуществляющий основной сбор и анализ заданной информации! Ознакомиться с ним можно вот здесь.

Pagodo

Цель инструмента Pagodo — это пассивное индексирование операторов Google Dorking для сбора потенциально уязвимых веб-страниц и приложений через Интернет. Программа состоит из двух частей. Первая — это ghdb_scraper.py, которая запрашивает и собирает операторы Google Dorks, а вторая — pagodo.py, использует операторы и информацию, собранную через ghdb_scraper.py и анализирует ее через запросы Google.

Для начала файлу pagodo.py требуется список операторов Google Dorks. Подобный файл предоставляется либо в репозитории самого проекта или можно просто запросить всю базу данных через один GET-запрос, используя ghdb_scraper.py. А затем просто скопировать отдельные операторы dorks в текстовый файл или поместить в json, если требуются дополнительные контекстные данные.

Для того чтобы произвести данную операцию, нужно ввести следующую команду:

python3 ghdb_scraper.py -j -s

Теперь, когда есть файл со всеми нужными операторами, его можно перенаправить в pagodo.py с помощью опции «-g», для того чтобы начать сбор потенциально уязвимых и общедоступных приложений. Файл pagodo.py использует библиотеку «google» для поиска таких сайтов с помощью подобных операторов:

intitle: «ListMail Login» admin -demo

site: example.com

К сожалению, процесс столь огромного количества запросов (а именно ~ 4600) через Google, просто не будет работать. Google сразу же определит вас как бота и заблокирует IP адрес на определенный период. Для того чтобы поисковые запросы выглядели более органичными, было добавлено несколько улучшений.

Для модуля Python «google» сделали специальные поправки, чтобы обеспечить рандомизацию агента пользователя через поисковые запросы Google. Эта функция доступна в версии модуля 1.9.3 и позволяет рандомизировать различные пользовательские агенты, используемые для каждого поискового запроса. Данная возможность позволяет эмулировать различные браузеры, используемые в большой корпоративной среде.

Второе усовершенствование фокусируется на рандомизации времени между поисковыми запросами. Минимальная задержка указывается с помощью параметра «-e», а коэффициент джиттера используется для добавления времени к минимальному числу задержек. Создается список из 50 джиттеров и один из них случайным образом добавляется к минимальному времени задержки для каждого процесса поиска в Google.

self.jitter = numpy.random.uniform(low=self.delay, high=jitter * self.delay, size=(50,))

Далее в скрипте выбирается случайное время из массива джиттера и добавляется к задержке создания запросов:

pause_time = self.delay + random.choice (self.jitter)

Можно самостоятельно поэкспериментировать со значениями, но настройки по умолчанию работают итак успешно. Обратите внимание, что процесс работы инструмента может занять несколько дней (в среднем 3; в зависимости от количества заданных операторов и интервала запроса), поэтому убедитесь, что у вас есть на это время.

Чтобы запустить сам инструмент, достаточно следующей команды, где «example.com» это ссылка на интересуемый веб сайт, а «dorks.txt» это текстовый файл который создал ghdb_scraper.py:

python3 pagodo.py -d example.com -g dorks.txt -l 50 -s -e 35.0 -j 1.1

А сам инструмент вы можете пощупать и ознакомиться перейдя вот по этой ссылочке.

Методы защиты от Google Dorking

Основные рекомендации

Google Dorking, как и любой другой инструмент свободного доступа, имеет свои техники для защиты и предотвращения сбора конфиденциальной информации злоумышленниками. Последующие рекомендации пяти протоколов следует придерживаться администраторам любых веб платформ и серверов, чтобы избежать угроз от «Google Dorking»:

  1. Систематическое обновление операционных систем, сервисов и приложений.
  2. Внедрение и обслуживание анти-хакерских систем.
  3. Осведомленность о Google роботах и ​​различных процедурах поисковых систем, а также способы проверки таких процессов.
  4. Удаление конфиденциального содержимого из общедоступных источников.
  5. Разделение общедоступного контента, частного контента и блокировка доступа к контенту для пользователей общего доступа.

Конфигурация файлов .htaccess и robots.txt

В основном все уязвимости и угрозы, связанные с «Dorking», генерируются из-за невнимательности или небрежности пользователей различных программ, серверов или других веб-устройств. Поэтому правила самозащиты и защиты данных не вызывают каких-либо затруднений или осложнений.

Для того чтобы тщательно подойти к предотвращению индексаций со стороны любых поисковых систем стоит обратить внимание на два основных файла конфигураций любого сетевого ресурса: «.htaccess» и «robots.txt». Первый — защищает обозначенные пути и директории при помощи паролей. Второй — исключает директории из индексирования поисковиков.

В случае, если на вашем собственном ресурсе содержатся определенные виды данных или директорий, которым не следует быть индексированным на Google, то в первую очередь следует настроить доступ к папкам через пароли. На примере ниже, можно наглядно посмотреть как правильно и что именно следует прописать в файл «.htaccess», находящийся в корневой директории любого веб сайта.

Для начала следует добавить несколько строк, показанные ниже:

AuthUserFile /your/directory/here/.htpasswd

AuthGroupFile /dev/null

AuthName «Secure Document»

AuthType Basic

require user username1

require user username2

require user username3

В строке AuthUserFile указываем путь к местоположению файла .htaccess, который находится в вашем каталоге. А в трех последних строках, нужно указать соответствующее имя пользователя, к которому будет предоставлен доступ. Затем нужно создать «.htpasswd» в той же самой папке, что и «.htaccess» и выполнив следующую команду:

htpasswd -c .htpasswd username1

Дважды ввести пароль для пользователя username1 и после этого, будет создан абсолютно чистый файл «.htpasswd» в текущем каталоге и будет содержать зашифрованную версию пароля.

Если есть несколько пользователей, следует назначить каждому из них пароль. Чтобы добавить дополнительных пользователей, не нужно создавать новый файл, можно просто добавить их в существующий файл, не используя опцию -c, при помощи этой команды:

htpasswd .htpasswd username2

В остальных случаях рекомендуется настраивать файл robots.txt, который отвечает за индексацию страниц любого веб ресурса. Он служит проводником для любой поисковой системы, которая ссылается на определенные адреса страниц. И прежде чем перейти непосредственно к искомому источнику, robots.txt будет либо блокировать подобные запросы, либо пропускать их.

Сам файл расположен в корневом каталоге любой веб платформы, запущенной в Интернете. Конфигурация осуществляется всего лишь изменением двух главных параметров: «User-agent» и «Disallow». Первый выделяет и отмечает либо все, либо какие-то определенные поисковые системы. В то время как второй отмечает, что именно нужно заблокировать (файлы, каталоги, файлы с определенными расширениями и т.д.). Ниже приведено несколько примеров: исключения каталога, файла и определенной поисковой системы, исключенные из процесса индексирования.

User-agent: *

Disallow: /cgi-bin/

User-agent: *

Disallow: /~joe/junk.html

User-agent: Bing

Disallow: /

Использование мета-тегов

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

<meta name=“Robots” content=“none” >

<meta name=“Robots” content=“noindex, nofollow” >

При добавлении такой записи в хедере страницы, роботы Google не будут индексировать ни второстепенные, ни главную страницу. Данная строка может быть введена на страницах, которым не следуют индексироваться. Однако это решение, основано на обоюдном соглашении между поисковыми системами и самим пользователем. Хоть Google и другие сетевые пауки соблюдают вышеупомянутые ограничения, есть определенные сетевые роботы «охотятся» за такими фразами для получения данных, изначально настроенных без индексации.

Из более продвинутых вариантов по безопасности индексирования, можно воспользоваться системой CAPTCHA. Это компьютерный тест, позволяющий получить доступ к контенту страницы только людям, а не автоматическим ботам. Однако этот вариант имеет, небольшой недостаток. Он не слишком удобен для самих пользователей.

Другим простым защитным методом от Google Dorks может быть, например, кодирование знаков в административных файлах кодировкой ASCII, затрудняющий использование Google Dorking.

Практика пентестинга

Практика пентестинга — это тесты на выявления уязвимостей в сети и на веб платформах. Они важны по своему, потому что такие тесты однозначно определяют уровень уязвимости веб-страниц или серверов, включая Google Dorking. Существуют специальные инструменты для пентестов, которые можно найти в Интернете. Одним из них является Site Digger, сайт, позволяющий автоматически проверять базу данных Google Hacking на любой выбранной веб-странице. Также, есть еще такие инструменты, как сканер Wikto, SUCURI и различные другие онлайн-сканеры. Они работают аналогичным образом.

Есть более серьезные инструменты, имитирующие среду веб-страницы, вместе с ошибками и уязвимостями для того, чтобы заманить злоумышленника, а затем получить конфиденциальную информацию о нем, как например Google Hack Honeypot. Стандартному пользователю, у которого мало знаний и недостаточно опыта в защите от Google Dorking, следует в первую очередь проверить свой сетевой ресурс на выявление уязвимостей Google Dorking и проверить какие конфиденциальные данные являются общедоступными. Стоит регулярно проверять такие базы данных, haveibeenpwned.com и dehashed.com, чтобы выяснить, не была ли нарушена и опубликована безопасность ваших учетных записей в сети.

https://haveibeenpwned.com/, касается плохо защищенных веб-страниц, где были собраны данные учетных записей (адреса электронных почт, логины, пароли и другие данные). В настоящее время база данных содержит более 5 миллиардов учетных записей. Более продвинутый инструмент доступен на https://dehashed.com, позволяющий искать информацию по именам пользователей, адресов электронных почт, паролей и их хешу, IP адресам, именам и номерам телефонов. В дополнении, счета, по которым произошла утечка данных, можно купить в сети. Стоимость однодневного доступа составляет всего 2 доллара США.

Заключение

Google Dorking является неотъемлемой частью процесса сбора конфиденциальной информации и процесса ее анализа. Его по праву можно считать одним из самых корневых и главных инструментов OSINT. Операторы Google Dorking помогают как в тестировании своего собственного сервера, так и в поиске всей возможной информации о потенциальной жертве. Это действительно очень яркий пример корректного использования поисковых механизмов в целях разведки конкретной информации. Однако являются ли намерения использования данной технологии благими (проверка уязвимостей собственного интернет ресурса) или недобрыми (поиск и сбор информации с разнообразных ресурсов и использование ее в незаконных целях), остается решать только самим пользователям.

Альтернативные методы и инструменты автоматизации дают еще больше возможностей и удобств для проведения анализа веб ресурсов. Некоторые из них, как например BinGoo, расширяет обычный индексированный поиск на Bing и анализирует всю полученную информацию через дополнительные инструменты (SqlMap, Fimap). Они в свою очередь преподносят более точную и конкретную информацию о безопасности выбранного веб ресурса.

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

  • #2

Перезалейте пожалуйста картинки на форум

explorer


  • #3

Перезалейте пожалуйста картинки на форум

Я их всегда заливаю на форум. Если откроете картинку в новом окне то в строке браузера увидите что они находятся на форуме. Что-то на форуме не так… Окно редактирования в несколько раз больше экрана и собственно даже кнопки сохранения отредактированного текста не наблюдаю.

А в этом сообщении кстати всё корректно. А в том кнопку нашёл где-то в дибунах :( Вот как это выглядит

Безымянный.png

Последнее редактирование: 01.12.2018

explorer


  • #4

Может тему пересоздать? А то глюки какие-то.

  • #5

Может тему пересоздать? А то глюки какие-то.

Ссылка скрыта от гостей

та все норм) закинул в notepad сохранил с расширениям py и в бой) красава нет слов !

explorer


  • #6

Ссылка скрыта от гостей

та все норм) закинул в notepad сохранил с расширениям py и в бой) красава нет слов !

Админ просто увидел что на картинках нет логотипа codeby. Значит плагин просто глюканул.

  • #7

Админ просто увидел что на картинках нет логотипа codeby. Значит плагин просто глюканул.

софт шикарен . работает быстро еще и рандомизирует) еще б операторы прикрутить чтоб можно было свои добавлять и запрос и вообще огонь!

Ссылка скрыта от гостей

explorer


  • #8

софт шикарен . работает быстро еще и рандомизирует) еще б операторы прикрутить чтоб можно было свои добавлять и запрос и вообще огонь!

Ссылка скрыта от гостей

Уже скоро )

explorer


  • #9

К сожалению в связи с откатом форума часть материалов и обсуждений пропала. Ну что ж, мочало – начинаем всё сначала! :)

Представляю версию 1.1

Что нового:

* Изменена немного сама оболочка
* Добавлен оператор inurl
* Добавлен оператор intext
* Добавлен оператор intitle

Внешний вид программы в Windows

gendorks1.png

Внешний вид программы в Kali Linux

gendorks_linux.png

Теперь вы можете сохранять дорки не в 1 варианте а в восьми! Вместо ***** читайте – ваш запрос добавленный в поле.

Примеры:

1 FlashGames.php?kat=
2 inurl:FlashGames.php?kat=
3 FlashGames.php?kat= intext:*****
4 FlashGames.php?kat= intitle:*****
5 inurl:FlashGames.php?kat= intext:*****
6 inurl:FlashGames.php?kat= intitle:*****
7 inurl:FlashGames.php?kat= intitle:***** intext:*****
8 FlashGames.php?kat= intitle:***** intext:*****

Для того чтобы получить разные варианты дорок, программу перезагружать не надо! Просто отметьте/снимите отметку с нужного чекбаттона или несколько, и нажмите кнопку генерации.

По

Ссылка скрыта от гостей

скачать программы в формате py для Windows и Linux +файл справки

  • #10

Возможно, не так важно, но нет в теме отметки, что генератор заводится от python3, пришлось смотреть исходники почему Tkinter дал осечку на python – кто только начинает изучать питон, могут растроится на этом участке. :)

explorer


  • #11

Возможно, не так важно, но нет в теме отметки, что генератор заводится от python3, пришлось смотреть исходники почему Tkinter дал осечку на python – кто только начинает изучать питон, могут растроится на этом участке. :)

Всё было написано в самом конце статьи, но с откатом пропало. Придётся по новой дописать.

P.S. Сделано

Скоро в прокате v 1.2 ;)

Последнее редактирование: 05.12.2018

explorer


  • #12

Встречайте V 1.2

Что нового:

* Добавлен оператор site
* Изменён способ подсчёта элементов в колонках ‘Name’, ‘Type’, ‘Parameter’
* При использовании оператора inurl дорки заключаются в двойные кавычки
* Кнопка Clean теперь убирает и отметки с checkbutton

Теперь вы можете сохранять дорки в 16-ти вариантах!

Примеры генерации:

1 FlashGames.asp?kat=
2 inurl:“FlashGames.asp?kat=”
3 inurl:“FlashGames.asp?kat=” intext:game
4 inurl:“FlashGames.asp?kat=” intitle:game
5 FlashGames.asp?kat= intext:game
6 FlashGames.asp?kat= intitle:game
7 FlashGames.asp?kat= intitle:game intext:game
8 inurl:“FlashGames.asp?kat=” intitle:game intext:game
9 site:com FlashGames.asp?kat=
10 site:com inurl:“FlashGames.asp?kat=”
11 site:com inurl:“FlashGames.asp?kat=” intext:game
12 site:com inurl:“FlashGames.asp?kat=” intitle:game
13 site:com FlashGames.asp?kat= intext:game
14 site:com FlashGames.asp?kat= intitle:game
15 site:com FlashGames.asp?kat= intitle:game intext:game
16 site:com inurl:”FlashGames.asp?kat=” intitle:game intext:game

На самом деле вариантов ещё больше – в полях для intitle и intext вы вольны сами свой запрос писать в кавычках или без ;)

Внешний вид программы в Windows

gendorks.png

Внешний вид программы в Kali Linux

gendorks_linux.png

Проделана большая работа, код программы вырос до 460 строк с 276 первоначальных.
Спасибо всем кто принимает участие в обсуждении программы. Ваши отзывы и пожелания помогают сделать программу лучше :)

Python:

import random
import subprocess
from tkinter import *
from tkinter import filedialog as fd


icon = '''
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
'''
icons = '''
R0lGODlhEAAQALMJAABdAA6fBhmqETW1GlLFKQBHAP//AABIAEy1Kf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAARHMMlJq70SAFyB2VxmECDnEUJ5nUKgdmM7gBrFBkOREZ+I4roEICDgaWLACWBA5CFzlQKz+INapERZ8HJABJKhw8AaShS2lggAOw==
'''
mix = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAxODoxMToxOCAxNjo1MToxNBYGYWAAAANvSURBVDhPjZJNbBtFGIbfnR2v98eOnfVvfprEQNKEuDGRCEkLBFSoVNTgokoVKIUILhVcqLiEggQI9QLqkUMj4AKInxuiogokagtqlULaJpSqdUMdkpQmwcTe2PE69nq9u0xoL1wQ72hGc/i+d0bP93LRw6f7//zwiZ9xVw1vzNwXCknJlkbvy4roamoKinbFtHnNRupmyT5BCPf5xSG1fLccnG/4lEMd63juy+Ro45Gp1xvbAu+1dQXQ3qLALxAIlCAqEtTzQM2w8cn8ppYuWAdmk+qP/xh4XrtgUH+9QFPzlUjfvWI4HoEicADhoEoUqkxBWbPEc+ioc2GnDxi7vokzt41dM/vVC5x7ZLIoPtLtqavVEAi4oUgEnVEJO/w8FjMVLKwZCERltDcpcNiqY8Z7gwRHpzeqq7pdz/O9I2+67gkJisyDI8COBgn12QLef3fiq0snpw8v/LJy7MbFP8gtwx1PbPcLFsehAg59XspPrBqLxLJtlMoOMkUTuukgna+h5JfRNXh/q9zbkymdeX5p45sDRwzLfnjics7wywSaA4R8PLrr+WMchsf1yP4HlYGgCz1NbkQcB17LxFS64IzPalMSpXvn3orrW8Daj887HdujsB0RIgO8mGYQW1897Qw9+xC8moHr17Qbv+WMsZvr+auM45XyR4/mthr/Swz3/9BnwQD0bAIdUk+fp/PFmNqWeK71SXyqnQfHvRP/GvG/onzYNeASJCAT/aL8zPlDW33+2T2efCr93e5tsV0vdR7kimIZjR4fe1WEws7R5bESAc31O7HigBPQ4TSboCF5WBofSmwZ5HsndV4QRy6vrfx0tjqNq2IWk8Yczhm/YglZ1KrE4bGvpQC3kXTCgFVjiQlVQTT+BWdQjZCDzSlRlBvKptXZJYTjajSIhXKWjZExpRauZZaqHD5+QIamrePpDQGiG+AFuCjbeS9okY1TbcZjkRhmyCpWKxoINbBZySKmhpG6sqLfgXgisRPS+hQeNwCR/cIg4HkXi7AAznbBAkUduwu0huJcEfr3a5XwPq9o80qVVTOdytzG7m0/4JaQhI9I8Nhw3BVYJsscMUBtCxYLmH7JgPk7d9QeXX6qEnMr1aw5+O8xftAtwS0egsd8BZuFLtCqhSIhPMgy1ugYKDlpvT3P4nNH8rd9/X8DGwdOt57oFosAAAAASUVORK5CYII=
'''
broom = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArBJREFUeNqkk19I01EUx793zj9tOrc2nK7pXPNP5nDT5UTFylk0XVJEIUT0UEI+1EP0EIhUhA+9FAglFdVDQQWaEW2oGWhRGulkEToqTVamiC6nLt3/2/3lfAop8AcfzuH8u+d37rmEUoqNfPzWeh64ElwdDkJWHZw8fZdiv4HAUrTqizB8Too4PszhCJoDQTTx/uOQUpZ3h4PpO1kh87IPzWXVhwy/VtDM/0dyltVOC1puXTnJtWC90ShlSelG0y5D2/0Oeyi8fgdiFn+Gyb1jY+M3O98lwj8zg5r6iweTtGTqyeNX9slZNEUi6OI6iGUkM2SMNJZYnCAUF2fqyvQjdQVqm82KqiozOrv9qFR9wb5j52oDoas2luzj5sJng7mQIJQUxwtFAkGSVCRLz5ZL5EpZcCnAX5p0o9ooQIf1KUwmC2zdy6hSj8N04ISlu/3eAivQx2OVerwL8/5cY01Fmsag83lo6sSAk++dnYdAKcHP0e+oLVqE1dqGigoLno+kYdG1iFAIPAZizDri6rdTT3/vYF4ihUKYLERKthIxcbGYdnyFRJOKkNePPPEyHr50ICenBHVnLz8q17CboZhYu4WuQi1ZmXMPn88t1VaPDTvBpzxkFGTBO+cB9YUhVslxPN8DY0NdO4tvZb//hluZGMI2ZsELaBTE5Ril7sG3H/JKynWKLdszMeV0IeQPQqSUYf7TFNqePXhtSMe1oW+kL2Mz8PEHW7i1e1OnEKiEFOVaUsnm0pidU7onwhSNPhdzLLmrt2eAbd8l9wpeWEcI1n0CKinBbjXMR/Ix1Hn9ML19agc9qsd701aY5Ul/x3MdcMskZIgYXMgmzqZXoHCbFA3c/n92o8UxjV5mDzD8jGBUD5NokThGfBR+1Mb1GIkSZoSico0/PrLR5/xbgAEAmn8aHZdeMI4AAAAASUVORK5CYII=
'''
help = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNqUk02rEmEUx8+MjZp6Jw03InlXiVYELpyQAne6yY2ug8BaRItc9B3atM0Whdt2lz5AS0VUMKgs8aogIbrRhYr5Mvr0P8MYF5l7oQM/npfzMuec54xE1hIDz8Ed8/wTfABfjw0lC+dHLpfrbTwevx0IBFS+GI1Gs0ajcb5cLl/jWL5obLMI8OYhxO/3e7GX9/u9fB3i8/nUwWBwA3dnF43lI+c4iHi93pPNZkPMdrs1QIAT1pk2l8p3TdMW6XRaTKfTf5TLZZFKpQTr2OaqEh4Eg8G7brdbabfbBEfa7XYUi8Wo1WrRcDjUwRfYfb6shKf1er0qSZLe7/ep1+vRbDaj8XhMk8lEZx3bXNUDlmKn05nwJhKJUDKZpFKpRLVaje+Kx8ZWAc663e5CURTK5/PEpSBtzmZx/AIs1yzOLw+9KRQKhHIIr3jo1yvwDuhWL6CBT+A8l8uJTCYjMECiUqkY+2w2K1hn2mjHr/AE01cMhUL3E4lEQNd1kmWZotEoN4+azaYxE+Fw+CYGK7Rerx9jNqbw+3YY5R9wjMJJttvtRsq8zudzQ+nxeIwAq9XKGCo87b5arf6C6h7X7AKnTqeT/cnhcBgBeFVVlYQQxBnZbDajH2yDO27+KftK5p/3AjwDf8DCZAk2ZoYO80Me4Abc1Y/gPQdQwC1z/R/Zgt9/BRgANHrYMn3ClUIAAAAASUVORK5CYII=
'''

root = Tk()
__version__ = 'Version: 1.2'
root.resizable(False, False)
root.title("** GenDorks by explorer **    " + __version__)
root.geometry("664x454")


def insert_url():
    file_name = fd.askopenfilename()
    try:
        f = open(file_name)
        s = f.read()
        url_name.insert(1.0, s)
        count_url.delete('0', END)
        y = url_name.get(1.0, END)
        line = (len(y.split()))
        count_url.insert(END, line)
        f.close()
    except FileNotFoundError:
        pass


def normal():
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    pattern = r"bw+="
    pattern2 = r".w+?"
    pattern3 = r"/w+."

    x = url_name.get(1.0, END)
    host = x.rstrip('n').replace('n', ',').split(',')

    one = []
    two = []
    trio = []
    for item in host:
        string = item.replace('://', '')
        result3 = re.findall(pattern3, string)
        result2 = re.findall(pattern2, string)
        result = re.findall(pattern, string)
        one += result3
        two += result2
        trio += result
    a = set(one)
    b = set(two)
    c = set(trio)
    for n in a:
        name.insert(END, n[1:-1] + 'n')
    for p in b:
        type.insert(END, p + 'n')
    for r in c:
        para.insert(END, r + 'n')

    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_url.delete('0', END)

    s = name.get(1.0, END)
    line = s.count('n') - 1
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = s.count('n') - 1
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = s.count('n') - 1
    count_para.insert(END, line)

    y = url_name.get(1.0, END)
    line = (len(y.split()))
    count_url.insert(END, line)


def gen():
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    dorks_name.delete(1.0, END)

    s = name.get(1.0, END)
    line = len(s.split())
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = len(s.split())
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = len(s.split())
    count_para.insert(END, line)

    one = name.get(1.0, END)
    a = one.rstrip('n').replace('n', ',').split(',')
    two = type.get(1.0, END)
    b = two.rstrip('n').replace('n', ',').split(',')
    trio = para.get(1.0, END)
    c = trio.rstrip('n').replace('n', ',').split(',')

    if site.get() == 1 and intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and inurl.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif inurl.get() == 1:
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    else:
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z)
                    dorks_name.insert(END, dork + 'n')

    count_dork.delete('0', END)
    s = dorks_name.get(1.0, END)
    line = s.count('n') - 1
    count_dork.insert(END, line)


def helpmy():
    subprocess.call(['notepad.exe', 'help.txt'])


def clean():
    count_url.delete('0', END)
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    intext_entry.delete('0', END)
    intitle_entry.delete('0', END)
    site_entry.delete('0', END)
    url_name.delete(1.0, END)
    dorks_name.delete(1.0, END)
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    site.set(False)
    inurl.set(False)
    intext.set(False)
    intitle.set(False)


def ran():
    s = dorks_name.get(1.0, END)
    mix = s[0:-2].replace('n', ',').split(',')
    random.shuffle(mix)
    dorks_name.delete(1.0, END)
    for z in mix:
        a = z + 'n'
        dorks_name.insert(END, a)


def save():
    file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
                                    ("HTML files", "*.html;*.htm"),
                                    ("All files", "*.*")), defaultextension='')
    try:
        f = open(file_name, 'w')
        s = dorks_name.get(1.0, END)
        f.write(s)
        f.close()
    except FileNotFoundError:
        pass


savebtn = PhotoImage(data=icons)
mixbtn = PhotoImage(data=mix)
broombtn = PhotoImage(data=broom)
helpbtn = PhotoImage(data=help)
img = PhotoImage(data=icon)

name_label = Label(text="Name :")
name_label.grid(row=5, column=1, pady=5, sticky="sw")

type_label = Label(text="Type :")
type_label.grid(row=5, column=3, pady=5, sticky="sw")

para_label = Label(text="Parameter :")
para_label.grid(row=5, column=5, pady=5, sticky="sw")

dork_label = Label(text="Dorks :")
dork_label.grid(row=8, column=7, pady=5, sticky="sw")

open_button = Button(text="Open URLs", width=10, command=insert_url)
open_button.grid(row=1, column=0, padx=10, pady=5, sticky="n")

norm_button = Button(text="Normal", width=10, command=normal)
norm_button.grid(row=2, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="Generate", width=10, command=gen)
gens_button.grid(row=3, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="  Clean    ", width=10, image=broombtn, compound="left", command=clean)
gens_button.grid(row=6, column=0, padx=10, pady=12, sticky="swe")

help_button = Button(text="   Help     ", width=10, image=helpbtn, compound="left", command=helpmy)
help_button.grid(row=6, column=0, padx=10, pady=47, sticky="swe")

open_button = Button(text="  Random  ", width=10, image=mixbtn, compound="left", command=ran)
open_button.grid(row=9, column=7, padx=32, sticky="swe")

save_button = Button(text="    Save       ", width=10, image=savebtn, compound="left", command=save)
save_button.grid(row=10, column=7, padx=32, sticky="swe")

count_url = Entry(width=12, justify=CENTER)
count_url.grid(row=0, column=0, padx=10, pady=5, sticky="n")

count_name = Entry(width=4, justify=CENTER)
count_name.grid(row=5, column=1, pady=5, sticky="se")

count_type = Entry(width=4, justify=CENTER)
count_type.grid(row=5, column=3, pady=5, sticky="se")

count_para = Entry(width=4, justify=CENTER)
count_para.grid(row=5, column=5, pady=5, sticky="se")

count_dork = Entry(width=8, justify=CENTER)
count_dork.grid(row=8, column=7, pady=5, sticky="s")

site_entry = Entry()
site_entry.grid(row=9, column=1, pady=5, columnspan=5, sticky="we")

intext_entry = Entry()
intext_entry.grid(row=10, column=1, pady=5, columnspan=5, sticky="we")

intitle_entry = Entry()
intitle_entry.grid(row=11, column=1, pady=5, columnspan=5, sticky="we")

url_name = Text(root, wrap=NONE, font="Courier 9", width=52, height=1)
url_name.grid(row=0, column=1, columnspan=5, rowspan=4, sticky='nswe')
scrollb = Scrollbar(root, orient=VERTICAL, command=url_name.yview)
scrollb.grid(row=0, column=6, rowspan=4, sticky='nse')
url_name.configure(yscrollcommand=scrollb.set)
sc = Scrollbar(root, orient=HORIZONTAL, command=url_name.xview)
sc.grid(row=4, columnspan=5, column=1, sticky='sew')
url_name.configure(xscrollcommand=sc.set)

dorks_name = Text(root, wrap=NONE, font="Courier 9", width=22, height=1)
dorks_name.grid(row=0, column=7, rowspan=7, sticky='nswe')
scroll = Scrollbar(root, orient=VERTICAL, command=dorks_name.yview)
scroll.grid(row=0, column=8, rowspan=7, sticky='nse')
dorks_name.configure(yscrollcommand=scroll.set)
scroli = Scrollbar(root, orient=HORIZONTAL, command=dorks_name.xview)
scroli.grid(row=7, column=7, sticky='sew')
dorks_name.configure(xscrollcommand=scroli.set)

name = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
name.grid(row=6, column=1, sticky='nswe')
scrols = Scrollbar(root, command=name.yview)
scrols.grid(row=6, column=2, sticky='nsw')
name.configure(yscrollcommand=scrols.set)
scrolt = Scrollbar(root, orient=HORIZONTAL, command=name.xview)
scrolt.grid(row=7, column=1, sticky='sew')
name.configure(xscrollcommand=scrolt.set)

type = Text(root, wrap=NONE, font="Courier 9", width=10, height=8)
type.grid(row=6, column=3, sticky='nswe')
scro = Scrollbar(root, command=type.yview)
scro.grid(row=6, column=4, sticky='nsw')
type.configure(yscrollcommand=scro.set)
scroltt = Scrollbar(root, orient=HORIZONTAL, command=type.xview)
scroltt.grid(row=7, column=3, sticky='sew')
type.configure(xscrollcommand=scroltt.set)

para = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
para.grid(row=6, column=5, sticky='nswe')
scr = Scrollbar(root, command=para.yview)
scr.grid(row=6, column=6, sticky='nse')
para.configure(yscrollcommand=scr.set)
scroltz = Scrollbar(root, orient=HORIZONTAL, command=para.xview)
scroltz.grid(row=7, column=5, sticky='sew')
para.configure(xscrollcommand=scroltz.set)

inurl = BooleanVar()
site = BooleanVar()
intext = BooleanVar()
intitle = BooleanVar()
inurls = Checkbutton(root, text='inurl:', pady=5, variable=inurl)
sites = Checkbutton(root, text='site:', variable=site)
intexts = Checkbutton(root, text='intext:', variable=intext)
intitles = Checkbutton(root, text='intitle:', variable=intitle)
inurls.grid(row=8, column=0, padx=10, sticky='nw')
sites.grid(row=9, column=0, padx=10, sticky='nw')
intexts.grid(row=10, column=0, padx=10, sticky='nw')
intitles.grid(row=11, column=0, padx=10, sticky='nw')

root.tk.call('wm', 'iconphoto', root._w, img)
root.mainloop()

Python:

import random
import subprocess as sp
from tkinter import *
from tkinter import filedialog as fd


icon = '''
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYtSURBVHjanJdLrF11FcZ/a/3/e+97bgGl8hhYaaLE1IhG1MQEMGJVfEFggIPGYJw5UOLAgQkafCQYE4kjp0YngkCCBmI0wWeY6AAwkqJpbNVUkCZepaW95+79f3wOzpO7b5Ne9+SenHvWt9fjW+tby+65/n6A6uzrkYHkXz8R7r4/4ZmlveZ/7SKW1UAVp1a3fPQF256UkKMuarDHk6a9zPtJbtNV2STrO4b2Uq2rU/qMZ1eTCJdZCkbfuGxXCFwkFNnaxxK2TX1r0HcL40sLRcLpO1JjOVBCaqpfIoBkBpCjLEe2Tcjmfgmg7HI97AWC8Oqg3JigBErITo1Un71BhuQgI1lk8WX1shvQqmULVGdoc75w+szWua3/vHKhmHxy8NrD1x+6siOpserTCUOb425vTEP0Uputl589fuLEi+c8Y0YFzCmEyXtv+tA7rqZSY984TCe7EbKkHQ2PzKjY4B6btokRC2078/eN9/72FamXVFS060HqpR3pLjYnwQJhTupm5qC30QN88vHzGgZp0AggKxWp7jxzBQRowNyDg4UFlnUBjv55UB47INRLNanWzzXEzndz0HEHQkPzgEqvPAaoKlIpeooARMzB5yyYccbAaRruPje2F4sPdXgXYZ2HHR0EcMMgQmc3ny9VVVJKY4CiL02MZsmTgBGcsAGxCRACbbxFVVlJUhoBTPUY4TU0m3d44wARb2j5vDRIuaiOAJSPh2ad+k4bu0iE1uehWWuPaUacPUKYnrkcX/DMbGP26hYH3MyMFsI7z864sIcHevVwsyqhc+Ovfvjl266iw3xW0kjXYo+oJGlFiDWAs28zD8EWDDxaLkh/efTODS6DzRkznfDRqcpaCtbKmPN13PuVWbTmzgdznRZJxz/j3tAQPeINGy8NZa0IawA6dfOTeoiZCxa4oxSVWlKuTx5i0cUe+JmK6opQvurrg4/fzr9WTDIDM4sabv/523Ow+X/8ZL2Ahbwq1tKgu2a7ulZpNDCM0E1v+PF1ZTHk6r/tACnFEUCpG6nzrdc4AKDEpNzwrRW/Qv1bik0ZAQRoxD8uW2tGCbCWbefYnbOmkuIz93wiWWUE0AOFV8+vaaQADeo3OV1vm8em/MTDW0q+ZGxcNZ+sy+fXx4EBaukox/7YIhOIYPn1wwHlZrcHFVHs1EjWiuijT19diF6Rlw2GZlwFPNkrZ6lzoZYhwB08WV2WLZZ6XVu6cQ4cRXvpvyMVslSa5uXVnMgTPxJ8YA8PMvb3uoeSBU5spVXap+F9xXwMUAkDJ8dSWFvSc1u2JFgwbio1jgEMhz+Rxh6cbX6yLJZZndxwZH0bWQEkuvL82Nz1uhd+GtKyR2z7i+tLxnovwMunGC9rfX2gr9EXv7Ejn5pWW24BrA0UDb+f/wYscPes6bf1o6XcYWb8oGbtNVCkqb5HXCiScZeykqb69RURAw/gtHw45TTsBZBV9FlrF4PAuaMkqeoXV2KzeRYCxM0/aJDqaqKsPKjafos5mJmZBz6i7TTd+c4BNghABzSRh1X69ZG4BjDV8YWwmLlzS5J+836LMDEDPBg8mLOU1obyGsCOvk8zJ5KZ+a39Q7cZbnETIESi8bW6I5WqusdQTaqfXvLQDK69hm5e5s15bb6rXlU7GvbShawXDxtzZTdwDtgscsCt6/zwU5rOgu/XVpUVQH6a4MQwy+NMSzFwo6GBY/+sRUUaalUd9grhvhhmb7wcDsyTBuYWA5Mbn95RqlUXXzDUv4eWg0e/8ejx574wq5yF2LSAbX7sCZ1X30ulXhQg/bJ5932/29KgqvLsV9/cuoUA+KGPP/iClKRBKuMla9XoJ0/fqhKKmqJg9KdOnzwzTK4++Ka3vgFK7vrWqHv02hKgmJMjOSo3XAgbFAJUs2pKrZUAtTSMd+XVgdG3li3Mb4ocs5yKzdUWqiMbn0ZLgPn+X72YIYXVZZDKBjsbtUYgNRcNAYExtPPzYaHb1ZfnBCn4+DpcPzjY9+kowwtWyNT9mlcyxSgeegWa3vcL4H1DUB9GZ9+lB1BTh4pH6Dsf9p0EG7zrIf4/p++8aJZjCdPQfaAQs+07B6YSSw3fDoeeP+q41f16UN3x8M2//m8AG+b8mQv60TAAAAAASUVORK5CYII=
'''
icons = '''
R0lGODlhEAAQALMJAABdAA6fBhmqETW1GlLFKQBHAP//AABIAEy1Kf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAARHMMlJq70SAFyB2VxmECDnEUJ5nUKgdmM7gBrFBkOREZ+I4roEICDgaWLACWBA5CFzlQKz+INapERZ8HJABJKhw8AaShS2lggAOw==
'''
mix = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAxODoxMToxOCAxNjo1MToxNBYGYWAAAANvSURBVDhPjZJNbBtFGIbfnR2v98eOnfVvfprEQNKEuDGRCEkLBFSoVNTgokoVKIUILhVcqLiEggQI9QLqkUMj4AKInxuiogokagtqlULaJpSqdUMdkpQmwcTe2PE69nq9u0xoL1wQ72hGc/i+d0bP93LRw6f7//zwiZ9xVw1vzNwXCknJlkbvy4roamoKinbFtHnNRupmyT5BCPf5xSG1fLccnG/4lEMd63juy+Ro45Gp1xvbAu+1dQXQ3qLALxAIlCAqEtTzQM2w8cn8ppYuWAdmk+qP/xh4XrtgUH+9QFPzlUjfvWI4HoEicADhoEoUqkxBWbPEc+ioc2GnDxi7vokzt41dM/vVC5x7ZLIoPtLtqavVEAi4oUgEnVEJO/w8FjMVLKwZCERltDcpcNiqY8Z7gwRHpzeqq7pdz/O9I2+67gkJisyDI8COBgn12QLef3fiq0snpw8v/LJy7MbFP8gtwx1PbPcLFsehAg59XspPrBqLxLJtlMoOMkUTuukgna+h5JfRNXh/q9zbkymdeX5p45sDRwzLfnjics7wywSaA4R8PLrr+WMchsf1yP4HlYGgCz1NbkQcB17LxFS64IzPalMSpXvn3orrW8Daj887HdujsB0RIgO8mGYQW1897Qw9+xC8moHr17Qbv+WMsZvr+auM45XyR4/mthr/Swz3/9BnwQD0bAIdUk+fp/PFmNqWeK71SXyqnQfHvRP/GvG/onzYNeASJCAT/aL8zPlDW33+2T2efCr93e5tsV0vdR7kimIZjR4fe1WEws7R5bESAc31O7HigBPQ4TSboCF5WBofSmwZ5HsndV4QRy6vrfx0tjqNq2IWk8Yczhm/YglZ1KrE4bGvpQC3kXTCgFVjiQlVQTT+BWdQjZCDzSlRlBvKptXZJYTjajSIhXKWjZExpRauZZaqHD5+QIamrePpDQGiG+AFuCjbeS9okY1TbcZjkRhmyCpWKxoINbBZySKmhpG6sqLfgXgisRPS+hQeNwCR/cIg4HkXi7AAznbBAkUduwu0huJcEfr3a5XwPq9o80qVVTOdytzG7m0/4JaQhI9I8Nhw3BVYJsscMUBtCxYLmH7JgPk7d9QeXX6qEnMr1aw5+O8xftAtwS0egsd8BZuFLtCqhSIhPMgy1ugYKDlpvT3P4nNH8rd9/X8DGwdOt57oFosAAAAASUVORK5CYII=
'''
broom = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArBJREFUeNqkk19I01EUx793zj9tOrc2nK7pXPNP5nDT5UTFylk0XVJEIUT0UEI+1EP0EIhUhA+9FAglFdVDQQWaEW2oGWhRGulkEToqTVamiC6nLt3/2/3lfAop8AcfzuH8u+d37rmEUoqNfPzWeh64ElwdDkJWHZw8fZdiv4HAUrTqizB8Too4PszhCJoDQTTx/uOQUpZ3h4PpO1kh87IPzWXVhwy/VtDM/0dyltVOC1puXTnJtWC90ShlSelG0y5D2/0Oeyi8fgdiFn+Gyb1jY+M3O98lwj8zg5r6iweTtGTqyeNX9slZNEUi6OI6iGUkM2SMNJZYnCAUF2fqyvQjdQVqm82KqiozOrv9qFR9wb5j52oDoas2luzj5sJng7mQIJQUxwtFAkGSVCRLz5ZL5EpZcCnAX5p0o9ooQIf1KUwmC2zdy6hSj8N04ISlu/3eAivQx2OVerwL8/5cY01Fmsag83lo6sSAk++dnYdAKcHP0e+oLVqE1dqGigoLno+kYdG1iFAIPAZizDri6rdTT3/vYF4ihUKYLERKthIxcbGYdnyFRJOKkNePPPEyHr50ICenBHVnLz8q17CboZhYu4WuQi1ZmXMPn88t1VaPDTvBpzxkFGTBO+cB9YUhVslxPN8DY0NdO4tvZb//hluZGMI2ZsELaBTE5Ril7sG3H/JKynWKLdszMeV0IeQPQqSUYf7TFNqePXhtSMe1oW+kL2Mz8PEHW7i1e1OnEKiEFOVaUsnm0pidU7onwhSNPhdzLLmrt2eAbd8l9wpeWEcI1n0CKinBbjXMR/Ix1Hn9ML19agc9qsd701aY5Ul/x3MdcMskZIgYXMgmzqZXoHCbFA3c/n92o8UxjV5mDzD8jGBUD5NokThGfBR+1Mb1GIkSZoSico0/PrLR5/xbgAEAmn8aHZdeMI4AAAAASUVORK5CYII=
'''
help = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNqUk02rEmEUx8+MjZp6Jw03InlXiVYELpyQAne6yY2ug8BaRItc9B3atM0Whdt2lz5AS0VUMKgs8aogIbrRhYr5Mvr0P8MYF5l7oQM/npfzMuec54xE1hIDz8Ed8/wTfABfjw0lC+dHLpfrbTwevx0IBFS+GI1Gs0ajcb5cLl/jWL5obLMI8OYhxO/3e7GX9/u9fB3i8/nUwWBwA3dnF43lI+c4iHi93pPNZkPMdrs1QIAT1pk2l8p3TdMW6XRaTKfTf5TLZZFKpQTr2OaqEh4Eg8G7brdbabfbBEfa7XYUi8Wo1WrRcDjUwRfYfb6shKf1er0qSZLe7/ep1+vRbDaj8XhMk8lEZx3bXNUDlmKn05nwJhKJUDKZpFKpRLVaje+Kx8ZWAc663e5CURTK5/PEpSBtzmZx/AIs1yzOLw+9KRQKhHIIr3jo1yvwDuhWL6CBT+A8l8uJTCYjMECiUqkY+2w2K1hn2mjHr/AE01cMhUL3E4lEQNd1kmWZotEoN4+azaYxE+Fw+CYGK7Rerx9jNqbw+3YY5R9wjMJJttvtRsq8zudzQ+nxeIwAq9XKGCo87b5arf6C6h7X7AKnTqeT/cnhcBgBeFVVlYQQxBnZbDajH2yDO27+KftK5p/3AjwDf8DCZAk2ZoYO80Me4Abc1Y/gPQdQwC1z/R/Zgt9/BRgANHrYMn3ClUIAAAAASUVORK5CYII=
'''

root = Tk()
__version__ = 'Version: 1.2'
root.resizable(False, False)
root.title("** GenDorks by explorer **    " + __version__)
root.geometry("674x454")



def insert_url():
    file_name = fd.askopenfilename()
    try:
        f = open(file_name)
        s = f.read()
        url_name.insert(1.0, s)
        count_url.delete('0', END)
        y = url_name.get(1.0, END)
        line = (len(y.split()))
        count_url.insert(END, line)
        f.close()
    except FileNotFoundError:
        pass


def normal():
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    pattern = r"bw+="
    pattern2 = r".w+?"
    pattern3 = r"/w+."

    x = url_name.get(1.0, END)
    host = x.rstrip('n').replace('n', ',').split(',')

    one = []
    two = []
    trio = []
    for item in host:
        string = item.replace('://', '')
        result3 = re.findall(pattern3, string)
        result2 = re.findall(pattern2, string)
        result = re.findall(pattern, string)
        one += result3
        two += result2
        trio += result
    a = set(one)
    b = set(two)
    c = set(trio)
    for n in a:
        name.insert(END, n[1:-1] + 'n')
    for p in b:
        type.insert(END, p + 'n')
    for r in c:
        para.insert(END, r + 'n')

    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_url.delete('0', END)

    s = name.get(1.0, END)
    line = s.count('n') - 1
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = s.count('n') - 1
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = s.count('n') - 1
    count_para.insert(END, line)

    y = url_name.get(1.0, END)
    line = (len(y.split()))
    count_url.insert(END, line)


def gen():
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    dorks_name.delete(1.0, END)

    s = name.get(1.0, END)
    line = len(s.split())
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = len(s.split())
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = len(s.split())
    count_para.insert(END, line)

    one = name.get(1.0, END)
    a = one.rstrip('n').replace('n', ',').split(',')
    two = type.get(1.0, END)
    b = two.rstrip('n').replace('n', ',').split(',')
    trio = para.get(1.0, END)
    c = trio.rstrip('n').replace('n', ',').split(',')

    if site.get() == 1 and intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and inurl.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif inurl.get() == 1:
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    else:
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z)
                    dorks_name.insert(END, dork + 'n')

    count_dork.delete('0', END)
    s = dorks_name.get(1.0, END)
    line = s.count('n') - 1
    count_dork.insert(END, line)


def helpmy(): 
    programName = "leafpad"
    fileName = "help.txt"
    sp.Popen([programName, fileName])


def clean():
    count_url.delete('0', END)
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    intext_entry.delete('0', END)
    intitle_entry.delete('0', END)
    site_entry.delete('0', END)
    url_name.delete(1.0, END)
    dorks_name.delete(1.0, END)
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    site.set(False)
    inurl.set(False)
    intext.set(False)
    intitle.set(False)


def ran():
    s = dorks_name.get(1.0, END)
    mix = s[0:-2].replace('n', ',').split(',')
    random.shuffle(mix)
    dorks_name.delete(1.0, END)
    for z in mix:
        a = z + 'n'
        dorks_name.insert(END, a)


def save():
    file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
                                    ("HTML files", "*.html;*.htm"),
                                    ("All files", "*.*")), defaultextension='')
    try:
        f = open(file_name, 'w')
        s = dorks_name.get(1.0, END)
        f.write(s)
        f.close()
    except FileNotFoundError:
        pass


savebtn = PhotoImage(data=icons)
mixbtn = PhotoImage(data=mix)
broombtn = PhotoImage(data=broom)
helpbtn = PhotoImage(data=help)
img = PhotoImage(data=icon)

name_label = Label(text="Name:", font="Courier 9")
name_label.grid(row=5, column=1, pady=5, sticky="sw")

type_label = Label(text="Type:", font="Courier 9")
type_label.grid(row=5, column=3, pady=5, sticky="sw")

para_label = Label(text="Parameter:", font="Courier 9")
para_label.grid(row=5, column=5, pady=5, sticky="sw")

dork_label = Label(text="Dorks:", font="Courier 9")
dork_label.grid(row=8, column=7, pady=5, sticky="sw")

open_button = Button(text="Open URLs", width=10, command=insert_url, font="Courier 9")
open_button.grid(row=1, column=0, padx=10, pady=5, sticky="n")

norm_button = Button(text="Normal", width=10, command=normal, font="Courier 9")
norm_button.grid(row=2, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="Generate", width=10, command=gen, font="Courier 9")
gens_button.grid(row=3, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text=" Clean ", width=10, image=broombtn, compound="left", command=clean, font="Courier 9")
gens_button.grid(row=6, column=0, padx=10, pady=12, sticky="swe")

help_button = Button(text=" Help ", width=10, image=helpbtn, compound="left", command=helpmy, font="Courier 9")
help_button.grid(row=6, column=0, padx=10, pady=47, sticky="swe")

open_button = Button(text="Random", width=10, image=mixbtn, compound="left", command=ran, font="Courier 9")
open_button.grid(row=9, column=7, padx=32, sticky="swe")

save_button = Button(text=" Save ", width=10, image=savebtn, compound="left", command=save, font="Courier 9")
save_button.grid(row=10, column=7, padx=32, sticky="swe")

count_url = Entry(width=12, justify=CENTER, font="Courier 9")
count_url.grid(row=0, column=0, padx=10, pady=5, sticky="n")

count_name = Entry(width=4, justify=CENTER, font="Courier 9")
count_name.grid(row=5, column=1, pady=5, sticky="se")

count_type = Entry(width=4, justify=CENTER, font="Courier 9")
count_type.grid(row=5, column=3, pady=5, sticky="se")

count_para = Entry(width=4, justify=CENTER, font="Courier 9")
count_para.grid(row=5, column=5, pady=5, sticky="se")

count_dork = Entry(width=8, justify=CENTER, font="Courier 9")
count_dork.grid(row=8, column=7, pady=5, sticky="s")

site_entry = Entry()
site_entry.grid(row=9, column=1, pady=5, columnspan=5, sticky="we")

intext_entry = Entry()
intext_entry.grid(row=10, column=1, pady=5, columnspan=5, sticky="we")

intitle_entry = Entry()
intitle_entry.grid(row=11, column=1, pady=5, columnspan=5, sticky="we")

url_name = Text(root, wrap=NONE, font="Courier 9", width=52, height=1)
url_name.grid(row=0, column=1, columnspan=5, rowspan=4, sticky='nswe')
scrollb = Scrollbar(root, orient=VERTICAL, command=url_name.yview)
scrollb.grid(row=0, column=6, rowspan=4, sticky='nse')
url_name.configure(yscrollcommand=scrollb.set)
sc = Scrollbar(root, orient=HORIZONTAL, command=url_name.xview)
sc.grid(row=4, columnspan=5, column=1, sticky='sew')
url_name.configure(xscrollcommand=sc.set)

dorks_name = Text(root, wrap=NONE, font="Courier 9", width=22, height=1)
dorks_name.grid(row=0, column=7, rowspan=7, sticky='nswe')
scroll = Scrollbar(root, orient=VERTICAL, command=dorks_name.yview)
scroll.grid(row=0, column=8, rowspan=7, sticky='nse')
dorks_name.configure(yscrollcommand=scroll.set)
scroli = Scrollbar(root, orient=HORIZONTAL, command=dorks_name.xview)
scroli.grid(row=7, column=7, sticky='sew')
dorks_name.configure(xscrollcommand=scroli.set)

name = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
name.grid(row=6, column=1, sticky='nswe')
scrols = Scrollbar(root, command=name.yview)
scrols.grid(row=6, column=2, sticky='nsw')
name.configure(yscrollcommand=scrols.set)
scrolt = Scrollbar(root, orient=HORIZONTAL, command=name.xview)
scrolt.grid(row=7, column=1, sticky='sew')
name.configure(xscrollcommand=scrolt.set)

type = Text(root, wrap=NONE, font="Courier 9", width=10, height=8)
type.grid(row=6, column=3, sticky='nswe')
scro = Scrollbar(root, command=type.yview)
scro.grid(row=6, column=4, sticky='nsw')
type.configure(yscrollcommand=scro.set)
scroltt = Scrollbar(root, orient=HORIZONTAL, command=type.xview)
scroltt.grid(row=7, column=3, sticky='sew')
type.configure(xscrollcommand=scroltt.set)

para = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
para.grid(row=6, column=5, sticky='nswe')
scr = Scrollbar(root, command=para.yview)
scr.grid(row=6, column=6, sticky='nse')
para.configure(yscrollcommand=scr.set)
scroltz = Scrollbar(root, orient=HORIZONTAL, command=para.xview)
scroltz.grid(row=7, column=5, sticky='sew')
para.configure(xscrollcommand=scroltz.set)

inurl = BooleanVar()
site = BooleanVar()
intext = BooleanVar()
intitle = BooleanVar()
inurls = Checkbutton(root, text='inurl:', variable=inurl, font="Courier 9")
sites = Checkbutton(root, text='site:', variable=site, font="Courier 9")
intexts = Checkbutton(root, text='intext:', variable=intext, font="Courier 9")
intitles = Checkbutton(root, text='intitle:', variable=intitle, font="Courier 9")
inurls.grid(row=8, column=0, padx=10, sticky='nw')
sites.grid(row=9, column=0, padx=10, sticky='nw')
intexts.grid(row=10, column=0, padx=10, sticky='nw')
intitles.grid(row=11, column=0, padx=10, sticky='nw')

root.tk.call('wm', 'iconphoto', root._w, img)
root.mainloop()

Ссылка скрыта от гостей

Файл справки + оба варианта программы в формате py

explorer


  • #13

Обновлённая версия – 1.3

Что нового:

* В версии 1.3 добавлена возможность вписать любые операторы в поле free
* Внесены небольшие изменения в оболочку под Windows – закругленные кнопки, подсветка кнопок и чекбоксов при наведении мышки

Внимание: Если выбран чекбокс free, то другие отмеченные чекбоксы игнорируются!

В версии 1.2 при выборе чекбокса inurl было сделано принудительное заключение дорок в кавычки. Если вам не нужен строгий запрос, но оператор inurl нужен, просто впишите его в поле free.

Теперь разнообразие дорок ограничено только вашей фантазией и знанием операторов поисковых машин. В поле free можно например вбить allinurl: allintitle: allintext: lang:it filetype:txt и другое. Можно писать сразу несколько операторов, не забывая ставить пробелы, чтобы всё склеилось корректно.

Внешний вид программы в Windows

gendorks.png

Внешний вид программы в Kali Linux

gendorks_linux.png

Python:

import random
import subprocess
from tkinter import *
from tkinter.ttk import Button, Entry, Checkbutton
from tkinter import filedialog as fd


icon = '''
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
'''
icons = '''
R0lGODlhEAAQALMJAABdAA6fBhmqETW1GlLFKQBHAP//AABIAEy1Kf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAARHMMlJq70SAFyB2VxmECDnEUJ5nUKgdmM7gBrFBkOREZ+I4roEICDgaWLACWBA5CFzlQKz+INapERZ8HJABJKhw8AaShS2lggAOw==
'''
mix = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAxODoxMToxOCAxNjo1MToxNBYGYWAAAANvSURBVDhPjZJNbBtFGIbfnR2v98eOnfVvfprEQNKEuDGRCEkLBFSoVNTgokoVKIUILhVcqLiEggQI9QLqkUMj4AKInxuiogokagtqlULaJpSqdUMdkpQmwcTe2PE69nq9u0xoL1wQ72hGc/i+d0bP93LRw6f7//zwiZ9xVw1vzNwXCknJlkbvy4roamoKinbFtHnNRupmyT5BCPf5xSG1fLccnG/4lEMd63juy+Ro45Gp1xvbAu+1dQXQ3qLALxAIlCAqEtTzQM2w8cn8ppYuWAdmk+qP/xh4XrtgUH+9QFPzlUjfvWI4HoEicADhoEoUqkxBWbPEc+ioc2GnDxi7vokzt41dM/vVC5x7ZLIoPtLtqavVEAi4oUgEnVEJO/w8FjMVLKwZCERltDcpcNiqY8Z7gwRHpzeqq7pdz/O9I2+67gkJisyDI8COBgn12QLef3fiq0snpw8v/LJy7MbFP8gtwx1PbPcLFsehAg59XspPrBqLxLJtlMoOMkUTuukgna+h5JfRNXh/q9zbkymdeX5p45sDRwzLfnjics7wywSaA4R8PLrr+WMchsf1yP4HlYGgCz1NbkQcB17LxFS64IzPalMSpXvn3orrW8Daj887HdujsB0RIgO8mGYQW1897Qw9+xC8moHr17Qbv+WMsZvr+auM45XyR4/mthr/Swz3/9BnwQD0bAIdUk+fp/PFmNqWeK71SXyqnQfHvRP/GvG/onzYNeASJCAT/aL8zPlDW33+2T2efCr93e5tsV0vdR7kimIZjR4fe1WEws7R5bESAc31O7HigBPQ4TSboCF5WBofSmwZ5HsndV4QRy6vrfx0tjqNq2IWk8Yczhm/YglZ1KrE4bGvpQC3kXTCgFVjiQlVQTT+BWdQjZCDzSlRlBvKptXZJYTjajSIhXKWjZExpRauZZaqHD5+QIamrePpDQGiG+AFuCjbeS9okY1TbcZjkRhmyCpWKxoINbBZySKmhpG6sqLfgXgisRPS+hQeNwCR/cIg4HkXi7AAznbBAkUduwu0huJcEfr3a5XwPq9o80qVVTOdytzG7m0/4JaQhI9I8Nhw3BVYJsscMUBtCxYLmH7JgPk7d9QeXX6qEnMr1aw5+O8xftAtwS0egsd8BZuFLtCqhSIhPMgy1ugYKDlpvT3P4nNH8rd9/X8DGwdOt57oFosAAAAASUVORK5CYII=
'''
broom = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArBJREFUeNqkk19I01EUx793zj9tOrc2nK7pXPNP5nDT5UTFylk0XVJEIUT0UEI+1EP0EIhUhA+9FAglFdVDQQWaEW2oGWhRGulkEToqTVamiC6nLt3/2/3lfAop8AcfzuH8u+d37rmEUoqNfPzWeh64ElwdDkJWHZw8fZdiv4HAUrTqizB8Too4PszhCJoDQTTx/uOQUpZ3h4PpO1kh87IPzWXVhwy/VtDM/0dyltVOC1puXTnJtWC90ShlSelG0y5D2/0Oeyi8fgdiFn+Gyb1jY+M3O98lwj8zg5r6iweTtGTqyeNX9slZNEUi6OI6iGUkM2SMNJZYnCAUF2fqyvQjdQVqm82KqiozOrv9qFR9wb5j52oDoas2luzj5sJng7mQIJQUxwtFAkGSVCRLz5ZL5EpZcCnAX5p0o9ooQIf1KUwmC2zdy6hSj8N04ISlu/3eAivQx2OVerwL8/5cY01Fmsag83lo6sSAk++dnYdAKcHP0e+oLVqE1dqGigoLno+kYdG1iFAIPAZizDri6rdTT3/vYF4ihUKYLERKthIxcbGYdnyFRJOKkNePPPEyHr50ICenBHVnLz8q17CboZhYu4WuQi1ZmXMPn88t1VaPDTvBpzxkFGTBO+cB9YUhVslxPN8DY0NdO4tvZb//hluZGMI2ZsELaBTE5Ril7sG3H/JKynWKLdszMeV0IeQPQqSUYf7TFNqePXhtSMe1oW+kL2Mz8PEHW7i1e1OnEKiEFOVaUsnm0pidU7onwhSNPhdzLLmrt2eAbd8l9wpeWEcI1n0CKinBbjXMR/Ix1Hn9ML19agc9qsd701aY5Ul/x3MdcMskZIgYXMgmzqZXoHCbFA3c/n92o8UxjV5mDzD8jGBUD5NokThGfBR+1Mb1GIkSZoSico0/PrLR5/xbgAEAmn8aHZdeMI4AAAAASUVORK5CYII=
'''
help = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNqUk02rEmEUx8+MjZp6Jw03InlXiVYELpyQAne6yY2ug8BaRItc9B3atM0Whdt2lz5AS0VUMKgs8aogIbrRhYr5Mvr0P8MYF5l7oQM/npfzMuec54xE1hIDz8Ed8/wTfABfjw0lC+dHLpfrbTwevx0IBFS+GI1Gs0ajcb5cLl/jWL5obLMI8OYhxO/3e7GX9/u9fB3i8/nUwWBwA3dnF43lI+c4iHi93pPNZkPMdrs1QIAT1pk2l8p3TdMW6XRaTKfTf5TLZZFKpQTr2OaqEh4Eg8G7brdbabfbBEfa7XYUi8Wo1WrRcDjUwRfYfb6shKf1er0qSZLe7/ep1+vRbDaj8XhMk8lEZx3bXNUDlmKn05nwJhKJUDKZpFKpRLVaje+Kx8ZWAc663e5CURTK5/PEpSBtzmZx/AIs1yzOLw+9KRQKhHIIr3jo1yvwDuhWL6CBT+A8l8uJTCYjMECiUqkY+2w2K1hn2mjHr/AE01cMhUL3E4lEQNd1kmWZotEoN4+azaYxE+Fw+CYGK7Rerx9jNqbw+3YY5R9wjMJJttvtRsq8zudzQ+nxeIwAq9XKGCo87b5arf6C6h7X7AKnTqeT/cnhcBgBeFVVlYQQxBnZbDajH2yDO27+KftK5p/3AjwDf8DCZAk2ZoYO80Me4Abc1Y/gPQdQwC1z/R/Zgt9/BRgANHrYMn3ClUIAAAAASUVORK5CYII=
'''

root = Tk()
__version__ = 'Version: 1.3'
root.resizable(False, False)
root.title("** GenDorks by explorer **    " + __version__)
root.geometry("674x484")


def insert_url():
    file_name = fd.askopenfilename()
    try:
        f = open(file_name)
        s = f.read()
        url_name.insert(1.0, s)
        count_url.delete('0', END)
        y = url_name.get(1.0, END)
        line = (len(y.split()))
        count_url.insert(END, line)
        f.close()
    except FileNotFoundError:
        pass


def normal():
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    pattern = r"bw+="
    pattern2 = r".w+?"
    pattern3 = r"/w+."

    x = url_name.get(1.0, END)
    host = x.rstrip('n').replace('n', ',').split(',')

    one = []
    two = []
    trio = []
    for item in host:
        string = item.replace('://', '')
        result3 = re.findall(pattern3, string)
        result2 = re.findall(pattern2, string)
        result = re.findall(pattern, string)
        one += result3
        two += result2
        trio += result
    a = set(one)
    b = set(two)
    c = set(trio)
    for n in a:
        name.insert(END, n[1:-1] + 'n')
    for p in b:
        type.insert(END, p + 'n')
    for r in c:
        para.insert(END, r + 'n')

    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_url.delete('0', END)

    s = name.get(1.0, END)
    line = s.count('n') - 1
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = s.count('n') - 1
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = s.count('n') - 1
    count_para.insert(END, line)

    y = url_name.get(1.0, END)
    line = (len(y.split()))
    count_url.insert(END, line)


def gen():
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    dorks_name.delete(1.0, END)

    s = name.get(1.0, END)
    line = len(s.split())
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = len(s.split())
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = len(s.split())
    count_para.insert(END, line)

    one = name.get(1.0, END)
    a = one.rstrip('n').replace('n', ',').split(',')
    two = type.get(1.0, END)
    b = two.rstrip('n').replace('n', ',').split(',')
    trio = para.get(1.0, END)
    c = trio.rstrip('n').replace('n', ',').split(',')

    if free.get() == 1:
        q = [free_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (q + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and inurl.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif inurl.get() == 1:
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    else:
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z)
                    dorks_name.insert(END, dork + 'n')

    count_dork.delete('0', END)
    s = dorks_name.get(1.0, END)
    line = s.count('n') - 1
    count_dork.insert(END, line)


def helpmy():
    subprocess.call(['notepad.exe', 'help.txt'])


def clean():
    count_url.delete('0', END)
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    intext_entry.delete('0', END)
    intitle_entry.delete('0', END)
    site_entry.delete('0', END)
    free_entry.delete('0', END)
    url_name.delete(1.0, END)
    dorks_name.delete(1.0, END)
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    site.set(False)
    inurl.set(False)
    intext.set(False)
    intitle.set(False)
    free.set(False)


def ran():
    s = dorks_name.get(1.0, END)
    mix = s[0:-2].replace('n', ',').split(',')
    random.shuffle(mix)
    dorks_name.delete(1.0, END)
    for z in mix:
        a = z + 'n'
        dorks_name.insert(END, a)


def save():
    file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
                                    ("HTML files", "*.html;*.htm"),
                                    ("All files", "*.*")), defaultextension='')
    try:
        f = open(file_name, 'w')
        s = dorks_name.get(1.0, END)
        f.write(s)
        f.close()
    except FileNotFoundError:
        pass


savebtn = PhotoImage(data=icons)
mixbtn = PhotoImage(data=mix)
broombtn = PhotoImage(data=broom)
helpbtn = PhotoImage(data=help)
img = PhotoImage(data=icon)

name_label = Label(text="Name :")
name_label.grid(row=5, column=1, pady=5, sticky="sw")

type_label = Label(text="Type :")
type_label.grid(row=5, column=3, pady=5, sticky="sw")

para_label = Label(text="Parameter :")
para_label.grid(row=5, column=5, pady=5, sticky="sw")

dork_label = Label(text="Dorks :")
dork_label.grid(row=8, column=7, pady=5, sticky="sw")

open_button = Button(text="Open URLs", width=14, command=insert_url)
open_button.grid(row=1, column=0, padx=10, pady=5, sticky="n")

norm_button = Button(text="Normal", width=14, command=normal)
norm_button.grid(row=2, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="Generate", width=14, command=gen)
gens_button.grid(row=3, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="  Clean    ", width=10, image=broombtn, compound="left", command=clean)
gens_button.grid(row=6, column=0, padx=10, pady=12, sticky="swe")

help_button = Button(text="   Help     ", width=10, image=helpbtn, compound="left", command=helpmy)
help_button.grid(row=6, column=0, padx=10, pady=47, sticky="swe")

open_button = Button(text="  Random  ", width=10, image=mixbtn, compound="left", command=ran)
open_button.grid(row=9, column=7, padx=32, sticky="swe")

save_button = Button(text="    Save       ", width=10, image=savebtn, compound="left", command=save)
save_button.grid(row=10, column=7, padx=32, sticky="swe")

count_url = Entry(width=14, justify=CENTER)
count_url.grid(row=0, column=0, padx=10, pady=5, sticky="n")

count_name = Entry(width=4, justify=CENTER)
count_name.grid(row=5, column=1, pady=5, sticky="se")

count_type = Entry(width=4, justify=CENTER)
count_type.grid(row=5, column=3, pady=5, sticky="se")

count_para = Entry(width=4, justify=CENTER)
count_para.grid(row=5, column=5, pady=5, sticky="se")

count_dork = Entry(width=8, justify=CENTER)
count_dork.grid(row=8, column=7, pady=5, sticky="s")

site_entry = Entry()
site_entry.grid(row=9, column=1, pady=5, columnspan=5, sticky="we")

intext_entry = Entry()
intext_entry.grid(row=10, column=1, pady=5, columnspan=5, sticky="we")

intitle_entry = Entry()
intitle_entry.grid(row=11, column=1, pady=5, columnspan=5, sticky="we")

free_entry = Entry()
free_entry.grid(row=12, column=1, pady=5, columnspan=5, sticky="we")


url_name = Text(root, wrap=NONE, font="Courier 9", width=52, height=1)
url_name.grid(row=0, column=1, columnspan=5, rowspan=4, sticky='nswe')
scrollb = Scrollbar(root, orient=VERTICAL, command=url_name.yview)
scrollb.grid(row=0, column=6, rowspan=4, sticky='nse')
url_name.configure(yscrollcommand=scrollb.set)
sc = Scrollbar(root, orient=HORIZONTAL, command=url_name.xview)
sc.grid(row=4, columnspan=5, column=1, sticky='sew')
url_name.configure(xscrollcommand=sc.set)

dorks_name = Text(root, wrap=NONE, font="Courier 9", width=22, height=1)
dorks_name.grid(row=0, column=7, rowspan=7, sticky='nswe')
scroll = Scrollbar(root, orient=VERTICAL, command=dorks_name.yview)
scroll.grid(row=0, column=8, rowspan=7, sticky='nse')
dorks_name.configure(yscrollcommand=scroll.set)
scroli = Scrollbar(root, orient=HORIZONTAL, command=dorks_name.xview)
scroli.grid(row=7, column=7, sticky='sew')
dorks_name.configure(xscrollcommand=scroli.set)

name = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
name.grid(row=6, column=1, sticky='nswe')
scrols = Scrollbar(root, command=name.yview)
scrols.grid(row=6, column=2, sticky='nsw')
name.configure(yscrollcommand=scrols.set)
scrolt = Scrollbar(root, orient=HORIZONTAL, command=name.xview)
scrolt.grid(row=7, column=1, sticky='sew')
name.configure(xscrollcommand=scrolt.set)

type = Text(root, wrap=NONE, font="Courier 9", width=10, height=8)
type.grid(row=6, column=3, sticky='nswe')
scro = Scrollbar(root, command=type.yview)
scro.grid(row=6, column=4, sticky='nsw')
type.configure(yscrollcommand=scro.set)
scroltt = Scrollbar(root, orient=HORIZONTAL, command=type.xview)
scroltt.grid(row=7, column=3, sticky='sew')
type.configure(xscrollcommand=scroltt.set)

para = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
para.grid(row=6, column=5, sticky='nswe')
scr = Scrollbar(root, command=para.yview)
scr.grid(row=6, column=6, sticky='nse')
para.configure(yscrollcommand=scr.set)
scroltz = Scrollbar(root, orient=HORIZONTAL, command=para.xview)
scroltz.grid(row=7, column=5, sticky='sew')
para.configure(xscrollcommand=scroltz.set)

inurl = BooleanVar()
site = BooleanVar()
intext = BooleanVar()
intitle = BooleanVar()
free = BooleanVar()
inurls = Checkbutton(root, text='inurl:', variable=inurl)
sites = Checkbutton(root, text='site:', variable=site)
intexts = Checkbutton(root, text='intext:', variable=intext)
intitles = Checkbutton(root, text='intitle:', variable=intitle)
frees = Checkbutton(root, text='free:', variable=free)
inurls.grid(row=8, column=0, padx=10, sticky='nw')
sites.grid(row=9, column=0, padx=10, sticky='nw')
intexts.grid(row=10, column=0, padx=10, sticky='nw')
intitles.grid(row=11, column=0, padx=10, sticky='nw')
frees.grid(row=12, column=0, padx=10, sticky='nw')

root.tk.call('wm', 'iconphoto', root._w, img)
root.mainloop()

Python:

import random
import subprocess as sp
from tkinter import *
from tkinter import filedialog as fd


icon = '''
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
'''
icons = '''
R0lGODlhEAAQALMJAABdAA6fBhmqETW1GlLFKQBHAP//AABIAEy1Kf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAARHMMlJq70SAFyB2VxmECDnEUJ5nUKgdmM7gBrFBkOREZ+I4roEICDgaWLACWBA5CFzlQKz+INapERZ8HJABJKhw8AaShS2lggAOw==
'''
mix = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAxODoxMToxOCAxNjo1MToxNBYGYWAAAANvSURBVDhPjZJNbBtFGIbfnR2v98eOnfVvfprEQNKEuDGRCEkLBFSoVNTgokoVKIUILhVcqLiEggQI9QLqkUMj4AKInxuiogokagtqlULaJpSqdUMdkpQmwcTe2PE69nq9u0xoL1wQ72hGc/i+d0bP93LRw6f7//zwiZ9xVw1vzNwXCknJlkbvy4roamoKinbFtHnNRupmyT5BCPf5xSG1fLccnG/4lEMd63juy+Ro45Gp1xvbAu+1dQXQ3qLALxAIlCAqEtTzQM2w8cn8ppYuWAdmk+qP/xh4XrtgUH+9QFPzlUjfvWI4HoEicADhoEoUqkxBWbPEc+ioc2GnDxi7vokzt41dM/vVC5x7ZLIoPtLtqavVEAi4oUgEnVEJO/w8FjMVLKwZCERltDcpcNiqY8Z7gwRHpzeqq7pdz/O9I2+67gkJisyDI8COBgn12QLef3fiq0snpw8v/LJy7MbFP8gtwx1PbPcLFsehAg59XspPrBqLxLJtlMoOMkUTuukgna+h5JfRNXh/q9zbkymdeX5p45sDRwzLfnjics7wywSaA4R8PLrr+WMchsf1yP4HlYGgCz1NbkQcB17LxFS64IzPalMSpXvn3orrW8Daj887HdujsB0RIgO8mGYQW1897Qw9+xC8moHr17Qbv+WMsZvr+auM45XyR4/mthr/Swz3/9BnwQD0bAIdUk+fp/PFmNqWeK71SXyqnQfHvRP/GvG/onzYNeASJCAT/aL8zPlDW33+2T2efCr93e5tsV0vdR7kimIZjR4fe1WEws7R5bESAc31O7HigBPQ4TSboCF5WBofSmwZ5HsndV4QRy6vrfx0tjqNq2IWk8Yczhm/YglZ1KrE4bGvpQC3kXTCgFVjiQlVQTT+BWdQjZCDzSlRlBvKptXZJYTjajSIhXKWjZExpRauZZaqHD5+QIamrePpDQGiG+AFuCjbeS9okY1TbcZjkRhmyCpWKxoINbBZySKmhpG6sqLfgXgisRPS+hQeNwCR/cIg4HkXi7AAznbBAkUduwu0huJcEfr3a5XwPq9o80qVVTOdytzG7m0/4JaQhI9I8Nhw3BVYJsscMUBtCxYLmH7JgPk7d9QeXX6qEnMr1aw5+O8xftAtwS0egsd8BZuFLtCqhSIhPMgy1ugYKDlpvT3P4nNH8rd9/X8DGwdOt57oFosAAAAASUVORK5CYII=
'''
broom = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArBJREFUeNqkk19I01EUx793zj9tOrc2nK7pXPNP5nDT5UTFylk0XVJEIUT0UEI+1EP0EIhUhA+9FAglFdVDQQWaEW2oGWhRGulkEToqTVamiC6nLt3/2/3lfAop8AcfzuH8u+d37rmEUoqNfPzWeh64ElwdDkJWHZw8fZdiv4HAUrTqizB8Too4PszhCJoDQTTx/uOQUpZ3h4PpO1kh87IPzWXVhwy/VtDM/0dyltVOC1puXTnJtWC90ShlSelG0y5D2/0Oeyi8fgdiFn+Gyb1jY+M3O98lwj8zg5r6iweTtGTqyeNX9slZNEUi6OI6iGUkM2SMNJZYnCAUF2fqyvQjdQVqm82KqiozOrv9qFR9wb5j52oDoas2luzj5sJng7mQIJQUxwtFAkGSVCRLz5ZL5EpZcCnAX5p0o9ooQIf1KUwmC2zdy6hSj8N04ISlu/3eAivQx2OVerwL8/5cY01Fmsag83lo6sSAk++dnYdAKcHP0e+oLVqE1dqGigoLno+kYdG1iFAIPAZizDri6rdTT3/vYF4ihUKYLERKthIxcbGYdnyFRJOKkNePPPEyHr50ICenBHVnLz8q17CboZhYu4WuQi1ZmXMPn88t1VaPDTvBpzxkFGTBO+cB9YUhVslxPN8DY0NdO4tvZb//hluZGMI2ZsELaBTE5Ril7sG3H/JKynWKLdszMeV0IeQPQqSUYf7TFNqePXhtSMe1oW+kL2Mz8PEHW7i1e1OnEKiEFOVaUsnm0pidU7onwhSNPhdzLLmrt2eAbd8l9wpeWEcI1n0CKinBbjXMR/Ix1Hn9ML19agc9qsd701aY5Ul/x3MdcMskZIgYXMgmzqZXoHCbFA3c/n92o8UxjV5mDzD8jGBUD5NokThGfBR+1Mb1GIkSZoSico0/PrLR5/xbgAEAmn8aHZdeMI4AAAAASUVORK5CYII=
'''
help = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNqUk02rEmEUx8+MjZp6Jw03InlXiVYELpyQAne6yY2ug8BaRItc9B3atM0Whdt2lz5AS0VUMKgs8aogIbrRhYr5Mvr0P8MYF5l7oQM/npfzMuec54xE1hIDz8Ed8/wTfABfjw0lC+dHLpfrbTwevx0IBFS+GI1Gs0ajcb5cLl/jWL5obLMI8OYhxO/3e7GX9/u9fB3i8/nUwWBwA3dnF43lI+c4iHi93pPNZkPMdrs1QIAT1pk2l8p3TdMW6XRaTKfTf5TLZZFKpQTr2OaqEh4Eg8G7brdbabfbBEfa7XYUi8Wo1WrRcDjUwRfYfb6shKf1er0qSZLe7/ep1+vRbDaj8XhMk8lEZx3bXNUDlmKn05nwJhKJUDKZpFKpRLVaje+Kx8ZWAc663e5CURTK5/PEpSBtzmZx/AIs1yzOLw+9KRQKhHIIr3jo1yvwDuhWL6CBT+A8l8uJTCYjMECiUqkY+2w2K1hn2mjHr/AE01cMhUL3E4lEQNd1kmWZotEoN4+azaYxE+Fw+CYGK7Rerx9jNqbw+3YY5R9wjMJJttvtRsq8zudzQ+nxeIwAq9XKGCo87b5arf6C6h7X7AKnTqeT/cnhcBgBeFVVlYQQxBnZbDajH2yDO27+KftK5p/3AjwDf8DCZAk2ZoYO80Me4Abc1Y/gPQdQwC1z/R/Zgt9/BRgANHrYMn3ClUIAAAAASUVORK5CYII=
'''

root = Tk()
__version__ = 'Version: 1.3'
root.resizable(False, False)
root.title("** GenDorks by explorer **    " + __version__)
root.geometry("696x506")


def insert_url():
    file_name = fd.askopenfilename()
    try:
        f = open(file_name)
        s = f.read()
        url_name.insert(1.0, s)
        count_url.delete('0', END)
        y = url_name.get(1.0, END)
        line = (len(y.split()))
        count_url.insert(END, line)
        f.close()
    except FileNotFoundError:
        pass


def normal():
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    pattern = r"bw+="
    pattern2 = r".w+?"
    pattern3 = r"/w+."

    x = url_name.get(1.0, END)
    host = x.rstrip('n').replace('n', ',').split(',')

    one = []
    two = []
    trio = []
    for item in host:
        string = item.replace('://', '')
        result3 = re.findall(pattern3, string)
        result2 = re.findall(pattern2, string)
        result = re.findall(pattern, string)
        one += result3
        two += result2
        trio += result
    a = set(one)
    b = set(two)
    c = set(trio)
    for n in a:
        name.insert(END, n[1:-1] + 'n')
    for p in b:
        type.insert(END, p + 'n')
    for r in c:
        para.insert(END, r + 'n')

    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_url.delete('0', END)

    s = name.get(1.0, END)
    line = s.count('n') - 1
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = s.count('n') - 1
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = s.count('n') - 1
    count_para.insert(END, line)

    y = url_name.get(1.0, END)
    line = (len(y.split()))
    count_url.insert(END, line)


def gen():
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    dorks_name.delete(1.0, END)

    s = name.get(1.0, END)
    line = len(s.split())
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = len(s.split())
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = len(s.split())
    count_para.insert(END, line)

    one = name.get(1.0, END)
    a = one.rstrip('n').replace('n', ',').split(',')
    two = type.get(1.0, END)
    b = two.rstrip('n').replace('n', ',').split(',')
    trio = para.get(1.0, END)
    c = trio.rstrip('n').replace('n', ',').split(',')

    if free.get() == 1:
        q = [free_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (q + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and inurl.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif inurl.get() == 1:
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    else:
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z)
                    dorks_name.insert(END, dork + 'n')

    count_dork.delete('0', END)
    s = dorks_name.get(1.0, END)
    line = s.count('n') - 1
    count_dork.insert(END, line)


def helpmy():   
    programName = "leafpad"
    fileName = "help.txt"
    sp.Popen([programName, fileName])


def clean():
    count_url.delete('0', END)
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    intext_entry.delete('0', END)
    intitle_entry.delete('0', END)
    site_entry.delete('0', END)
    free_entry.delete('0', END)
    url_name.delete(1.0, END)
    dorks_name.delete(1.0, END)
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    site.set(False)
    inurl.set(False)
    intext.set(False)
    intitle.set(False)
    free.set(False)


def ran():
    s = dorks_name.get(1.0, END)
    mix = s[0:-2].replace('n', ',').split(',')
    random.shuffle(mix)
    dorks_name.delete(1.0, END)
    for z in mix:
        a = z + 'n'
        dorks_name.insert(END, a)


def save():
    file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
                                    ("HTML files", "*.html;*.htm"),
                                    ("All files", "*.*")), defaultextension='')
    try:
        f = open(file_name, 'w')
        s = dorks_name.get(1.0, END)
        f.write(s)
        f.close()
    except FileNotFoundError:
        pass


savebtn = PhotoImage(data=icons)
mixbtn = PhotoImage(data=mix)
broombtn = PhotoImage(data=broom)
helpbtn = PhotoImage(data=help)
img = PhotoImage(data=icon)

name_label = Label(text="Name :")
name_label.grid(row=5, column=1, pady=5, sticky="sw")

type_label = Label(text="Type :")
type_label.grid(row=5, column=3, pady=5, sticky="sw")

para_label = Label(text="Parameter :")
para_label.grid(row=5, column=5, pady=5, sticky="sw")

dork_label = Label(text="Dorks :")
dork_label.grid(row=8, column=7, pady=5, sticky="sw")

open_button = Button(text="Open URLs", width=10, command=insert_url)
open_button.grid(row=1, column=0, padx=10, pady=5, sticky="n")

norm_button = Button(text="Normal", width=10, command=normal)
norm_button.grid(row=2, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="Generate", width=10, command=gen)
gens_button.grid(row=3, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="  Clean    ", width=10, image=broombtn, compound="left", command=clean)
gens_button.grid(row=6, column=0, padx=10, pady=12, sticky="swe")

help_button = Button(text="   Help     ", width=10, image=helpbtn, compound="left", command=helpmy)
help_button.grid(row=6, column=0, padx=10, pady=47, sticky="swe")

open_button = Button(text="  Random  ", width=14, image=mixbtn, compound="left", command=ran)
open_button.grid(row=9, column=7, padx=22, sticky="swe")

save_button = Button(text="    Save       ", width=14, image=savebtn, compound="left", command=save)
save_button.grid(row=10, column=7, padx=22, sticky="swe")

count_url = Entry(width=12, justify=CENTER)
count_url.grid(row=0, column=0, padx=10, pady=5, sticky="n")

count_name = Entry(width=4, justify=CENTER)
count_name.grid(row=5, column=1, pady=5, sticky="se")

count_type = Entry(width=4, justify=CENTER)
count_type.grid(row=5, column=3, pady=5, sticky="se")

count_para = Entry(width=4, justify=CENTER)
count_para.grid(row=5, column=5, pady=5, sticky="se")

count_dork = Entry(width=8, justify=CENTER)
count_dork.grid(row=8, column=7, pady=5, sticky="s")

site_entry = Entry()
site_entry.grid(row=9, column=1, pady=5, columnspan=5, sticky="we")

intext_entry = Entry()
intext_entry.grid(row=10, column=1, pady=5, columnspan=5, sticky="we")

intitle_entry = Entry()
intitle_entry.grid(row=11, column=1, pady=5, columnspan=5, sticky="we")

free_entry = Entry()
free_entry.grid(row=12, column=1, pady=5, columnspan=5, sticky="we")


url_name = Text(root, wrap=NONE, font="Courier 9", width=52, height=1)
url_name.grid(row=0, column=1, columnspan=5, rowspan=4, sticky='nswe')
scrollb = Scrollbar(root, orient=VERTICAL, command=url_name.yview)
scrollb.grid(row=0, column=6, rowspan=4, sticky='nse')
url_name.configure(yscrollcommand=scrollb.set)
sc = Scrollbar(root, orient=HORIZONTAL, command=url_name.xview)
sc.grid(row=4, columnspan=5, column=1, sticky='sew')
url_name.configure(xscrollcommand=sc.set)

dorks_name = Text(root, wrap=NONE, font="Courier 9", width=22, height=1)
dorks_name.grid(row=0, column=7, rowspan=7, sticky='nswe')
scroll = Scrollbar(root, orient=VERTICAL, command=dorks_name.yview)
scroll.grid(row=0, column=8, rowspan=7, sticky='nse')
dorks_name.configure(yscrollcommand=scroll.set)
scroli = Scrollbar(root, orient=HORIZONTAL, command=dorks_name.xview)
scroli.grid(row=7, column=7, sticky='sew')
dorks_name.configure(xscrollcommand=scroli.set)

name = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
name.grid(row=6, column=1, sticky='nswe')
scrols = Scrollbar(root, command=name.yview)
scrols.grid(row=6, column=2, sticky='nsw')
name.configure(yscrollcommand=scrols.set)
scrolt = Scrollbar(root, orient=HORIZONTAL, command=name.xview)
scrolt.grid(row=7, column=1, sticky='sew')
name.configure(xscrollcommand=scrolt.set)

type = Text(root, wrap=NONE, font="Courier 9", width=10, height=8)
type.grid(row=6, column=3, sticky='nswe')
scro = Scrollbar(root, command=type.yview)
scro.grid(row=6, column=4, sticky='nsw')
type.configure(yscrollcommand=scro.set)
scroltt = Scrollbar(root, orient=HORIZONTAL, command=type.xview)
scroltt.grid(row=7, column=3, sticky='sew')
type.configure(xscrollcommand=scroltt.set)

para = Text(root, wrap=NONE, font="Courier 9", width=14, height=8)
para.grid(row=6, column=5, sticky='nswe')
scr = Scrollbar(root, command=para.yview)
scr.grid(row=6, column=6, sticky='nse')
para.configure(yscrollcommand=scr.set)
scroltz = Scrollbar(root, orient=HORIZONTAL, command=para.xview)
scroltz.grid(row=7, column=5, sticky='sew')
para.configure(xscrollcommand=scroltz.set)

inurl = BooleanVar()
site = BooleanVar()
intext = BooleanVar()
intitle = BooleanVar()
free = BooleanVar()
inurls = Checkbutton(root, text='inurl:', variable=inurl)
sites = Checkbutton(root, text='site:', variable=site)
intexts = Checkbutton(root, text='intext:', variable=intext)
intitles = Checkbutton(root, text='intitle:', variable=intitle)
frees = Checkbutton(root, text='free:', variable=free)
inurls.grid(row=8, column=0, padx=10, sticky='nw')
sites.grid(row=9, column=0, padx=10, sticky='nw')
intexts.grid(row=10, column=0, padx=10, sticky='nw')
intitles.grid(row=11, column=0, padx=10, sticky='nw')
frees.grid(row=12, column=0, padx=10, sticky='nw')

root.tk.call('wm', 'iconphoto', root._w, img)
root.mainloop()

Ссылка скрыта от гостей

Файл справки + оба варианта программы в формате py

explorer


  • #14

Небольшое обновление v 1.3.1

Уже не собирался с этой программой ничего делать, так как считаю что из неё выжал уже всё. Нет, конечно любой софт можно пилить бесконечно, например сюда можно прикрутить парсер ссылок и т.п. Но это уже получится не генератор дорков, а нечто большее.

Но вот сегодня меня посетило вдохновение и решил добавить пару скинов для проги.
Внимание! Эта версия только для Windows!

По умолчанию идёт загрузка с темой XPnative. Чтобы сменить скин нужно переключить значение радиокнопки и нажать на кнопку Change skin
Всего 3 скина.

XPnative skin

skin1.png

Clam skin

skin2.png

И для застрявших в Windows 98 ) Default skin

skin3.png

Python:

import random
import subprocess
from tkinter import *
from ttk import Style, Button, Entry, Scrollbar
from tkinter import filedialog as fd


icon = '''
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
'''
icons = '''
R0lGODlhEAAQALMJAABdAA6fBhmqETW1GlLFKQBHAP//AABIAEy1Kf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAARHMMlJq70SAFyB2VxmECDnEUJ5nUKgdmM7gBrFBkOREZ+I4roEICDgaWLACWBA5CFzlQKz+INapERZ8HJABJKhw8AaShS2lggAOw==
'''
mix = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAhdEVYdENyZWF0aW9uIFRpbWUAMjAxODoxMToxOCAxNjo1MToxNBYGYWAAAANvSURBVDhPjZJNbBtFGIbfnR2v98eOnfVvfprEQNKEuDGRCEkLBFSoVNTgokoVKIUILhVcqLiEggQI9QLqkUMj4AKInxuiogokagtqlULaJpSqdUMdkpQmwcTe2PE69nq9u0xoL1wQ72hGc/i+d0bP93LRw6f7//zwiZ9xVw1vzNwXCknJlkbvy4roamoKinbFtHnNRupmyT5BCPf5xSG1fLccnG/4lEMd63juy+Ro45Gp1xvbAu+1dQXQ3qLALxAIlCAqEtTzQM2w8cn8ppYuWAdmk+qP/xh4XrtgUH+9QFPzlUjfvWI4HoEicADhoEoUqkxBWbPEc+ioc2GnDxi7vokzt41dM/vVC5x7ZLIoPtLtqavVEAi4oUgEnVEJO/w8FjMVLKwZCERltDcpcNiqY8Z7gwRHpzeqq7pdz/O9I2+67gkJisyDI8COBgn12QLef3fiq0snpw8v/LJy7MbFP8gtwx1PbPcLFsehAg59XspPrBqLxLJtlMoOMkUTuukgna+h5JfRNXh/q9zbkymdeX5p45sDRwzLfnjics7wywSaA4R8PLrr+WMchsf1yP4HlYGgCz1NbkQcB17LxFS64IzPalMSpXvn3orrW8Daj887HdujsB0RIgO8mGYQW1897Qw9+xC8moHr17Qbv+WMsZvr+auM45XyR4/mthr/Swz3/9BnwQD0bAIdUk+fp/PFmNqWeK71SXyqnQfHvRP/GvG/onzYNeASJCAT/aL8zPlDW33+2T2efCr93e5tsV0vdR7kimIZjR4fe1WEws7R5bESAc31O7HigBPQ4TSboCF5WBofSmwZ5HsndV4QRy6vrfx0tjqNq2IWk8Yczhm/YglZ1KrE4bGvpQC3kXTCgFVjiQlVQTT+BWdQjZCDzSlRlBvKptXZJYTjajSIhXKWjZExpRauZZaqHD5+QIamrePpDQGiG+AFuCjbeS9okY1TbcZjkRhmyCpWKxoINbBZySKmhpG6sqLfgXgisRPS+hQeNwCR/cIg4HkXi7AAznbBAkUduwu0huJcEfr3a5XwPq9o80qVVTOdytzG7m0/4JaQhI9I8Nhw3BVYJsscMUBtCxYLmH7JgPk7d9QeXX6qEnMr1aw5+O8xftAtwS0egsd8BZuFLtCqhSIhPMgy1ugYKDlpvT3P4nNH8rd9/X8DGwdOt57oFosAAAAASUVORK5CYII=
'''
broom = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArBJREFUeNqkk19I01EUx793zj9tOrc2nK7pXPNP5nDT5UTFylk0XVJEIUT0UEI+1EP0EIhUhA+9FAglFdVDQQWaEW2oGWhRGulkEToqTVamiC6nLt3/2/3lfAop8AcfzuH8u+d37rmEUoqNfPzWeh64ElwdDkJWHZw8fZdiv4HAUrTqizB8Too4PszhCJoDQTTx/uOQUpZ3h4PpO1kh87IPzWXVhwy/VtDM/0dyltVOC1puXTnJtWC90ShlSelG0y5D2/0Oeyi8fgdiFn+Gyb1jY+M3O98lwj8zg5r6iweTtGTqyeNX9slZNEUi6OI6iGUkM2SMNJZYnCAUF2fqyvQjdQVqm82KqiozOrv9qFR9wb5j52oDoas2luzj5sJng7mQIJQUxwtFAkGSVCRLz5ZL5EpZcCnAX5p0o9ooQIf1KUwmC2zdy6hSj8N04ISlu/3eAivQx2OVerwL8/5cY01Fmsag83lo6sSAk++dnYdAKcHP0e+oLVqE1dqGigoLno+kYdG1iFAIPAZizDri6rdTT3/vYF4ihUKYLERKthIxcbGYdnyFRJOKkNePPPEyHr50ICenBHVnLz8q17CboZhYu4WuQi1ZmXMPn88t1VaPDTvBpzxkFGTBO+cB9YUhVslxPN8DY0NdO4tvZb//hluZGMI2ZsELaBTE5Ril7sG3H/JKynWKLdszMeV0IeQPQqSUYf7TFNqePXhtSMe1oW+kL2Mz8PEHW7i1e1OnEKiEFOVaUsnm0pidU7onwhSNPhdzLLmrt2eAbd8l9wpeWEcI1n0CKinBbjXMR/Ix1Hn9ML19agc9qsd701aY5Ul/x3MdcMskZIgYXMgmzqZXoHCbFA3c/n92o8UxjV5mDzD8jGBUD5NokThGfBR+1Mb1GIkSZoSico0/PrLR5/xbgAEAmn8aHZdeMI4AAAAASUVORK5CYII=
'''
help = '''
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNqUk02rEmEUx8+MjZp6Jw03InlXiVYELpyQAne6yY2ug8BaRItc9B3atM0Whdt2lz5AS0VUMKgs8aogIbrRhYr5Mvr0P8MYF5l7oQM/npfzMuec54xE1hIDz8Ed8/wTfABfjw0lC+dHLpfrbTwevx0IBFS+GI1Gs0ajcb5cLl/jWL5obLMI8OYhxO/3e7GX9/u9fB3i8/nUwWBwA3dnF43lI+c4iHi93pPNZkPMdrs1QIAT1pk2l8p3TdMW6XRaTKfTf5TLZZFKpQTr2OaqEh4Eg8G7brdbabfbBEfa7XYUi8Wo1WrRcDjUwRfYfb6shKf1er0qSZLe7/ep1+vRbDaj8XhMk8lEZx3bXNUDlmKn05nwJhKJUDKZpFKpRLVaje+Kx8ZWAc663e5CURTK5/PEpSBtzmZx/AIs1yzOLw+9KRQKhHIIr3jo1yvwDuhWL6CBT+A8l8uJTCYjMECiUqkY+2w2K1hn2mjHr/AE01cMhUL3E4lEQNd1kmWZotEoN4+azaYxE+Fw+CYGK7Rerx9jNqbw+3YY5R9wjMJJttvtRsq8zudzQ+nxeIwAq9XKGCo87b5arf6C6h7X7AKnTqeT/cnhcBgBeFVVlYQQxBnZbDajH2yDO27+KftK5p/3AjwDf8DCZAk2ZoYO80Me4Abc1Y/gPQdQwC1z/R/Zgt9/BRgANHrYMn3ClUIAAAAASUVORK5CYII=
'''

root = Tk()
__version__ = 'Version: 1.3.1'
root.resizable(False, False)
root.title("** GenDorks by explorer **    " + __version__)
root.geometry("680x514")
root.style = Style()
root.style.theme_use("xpnative")


def insert_url():
    file_name = fd.askopenfilename()
    try:
        f = open(file_name)
        s = f.read()
        url_name.insert(1.0, s)
        count_url.delete('0', END)
        y = url_name.get(1.0, END)
        line = (len(y.split()))
        count_url.insert(END, line)
        f.close()
    except FileNotFoundError:
        pass


def normal():
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    pattern = r"bw+="
    pattern2 = r".w+?"
    pattern3 = r"/w+."

    x = url_name.get(1.0, END)
    host = x.rstrip('n').replace('n', ',').split(',')

    one = []
    two = []
    trio = []
    for item in host:
        string = item.replace('://', '')
        result3 = re.findall(pattern3, string)
        result2 = re.findall(pattern2, string)
        result = re.findall(pattern, string)
        one += result3
        two += result2
        trio += result
    a = set(one)
    b = set(two)
    c = set(trio)
    for n in a:
        name.insert(END, n[1:-1] + 'n')
    for p in b:
        type.insert(END, p + 'n')
    for r in c:
        para.insert(END, r + 'n')

    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_url.delete('0', END)

    s = name.get(1.0, END)
    line = s.count('n') - 1
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = s.count('n') - 1
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = s.count('n') - 1
    count_para.insert(END, line)

    y = url_name.get(1.0, END)
    line = (len(y.split()))
    count_url.insert(END, line)


def gen():
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    dorks_name.delete(1.0, END)

    s = name.get(1.0, END)
    line = len(s.split())
    count_name.insert(END, line)

    s = type.get(1.0, END)
    line = len(s.split())
    count_type.insert(END, line)

    s = para.get(1.0, END)
    line = len(s.split())
    count_para.insert(END, line)

    one = name.get(1.0, END)
    a = one.rstrip('n').replace('n', ',').split(',')
    two = type.get(1.0, END)
    b = two.rstrip('n').replace('n', ',').split(',')
    trio = para.get(1.0, END)
    c = trio.rstrip('n').replace('n', ',').split(',')

    if free.get() == 1:
        q = [free_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (q + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and inurl.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + 'inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1 and intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif site.get() == 1:
        s = ['site:', site_entry.get()]
        s = ''.join(s)
        for x in a:
            for y in b:
                for z in c:
                    dork = (s + ' ' + x + y + z)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and intitle.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        r = [' intitle:', intitle_entry.get()]
        r = ''.join(r)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + r + q)
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1 and inurl.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1 and inurl.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"' + q)
                    dorks_name.insert(END, dork + 'n')

    elif inurl.get() == 1:
        for x in a:
            for y in b:
                for z in c:
                    dork = ('inurl:"' + x + y + z + '"')
                    dorks_name.insert(END, dork + 'n')

    elif intext.get() == 1:
        q = [' intext:', intext_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    elif intitle.get() == 1:
        q = [' intitle:', intitle_entry.get()]
        q = ''.join(q)
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z + q)
                    dorks_name.insert(END, dork + 'n')

    else:
        for x in a:
            for y in b:
                for z in c:
                    dork = (x + y + z)
                    dorks_name.insert(END, dork + 'n')

    count_dork.delete('0', END)
    s = dorks_name.get(1.0, END)
    line = s.count('n') - 1
    count_dork.insert(END, line)


def helpmy():
    subprocess.call(['notepad.exe', 'help.txt'])


def clean():
    count_url.delete('0', END)
    count_name.delete('0', END)
    count_type.delete('0', END)
    count_para.delete('0', END)
    count_dork.delete('0', END)
    intext_entry.delete('0', END)
    intitle_entry.delete('0', END)
    site_entry.delete('0', END)
    free_entry.delete('0', END)
    url_name.delete(1.0, END)
    dorks_name.delete(1.0, END)
    name.delete(1.0, END)
    type.delete(1.0, END)
    para.delete(1.0, END)
    site.set(False)
    inurl.set(False)
    intext.set(False)
    intitle.set(False)
    free.set(False)
    var.set(False)


def ran():
    s = dorks_name.get(1.0, END)
    mix = s[0:-2].replace('n', ',').split(',')
    random.shuffle(mix)
    dorks_name.delete(1.0, END)
    for z in mix:
        a = z + 'n'
        dorks_name.insert(END, a)


def save():
    file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"),
                                    ("HTML files", "*.html;*.htm"),
                                    ("All files", "*.*")), defaultextension='')
    try:
        f = open(file_name, 'w')
        s = dorks_name.get(1.0, END)
        f.write(s)
        f.close()
    except FileNotFoundError:
        pass


def change():
    if var.get() == 1:
        root.style.theme_use("clam")
    elif var.get() == 2:
        root.style.theme_use("xpnative")
    elif var.get() == 3:
        root.style.theme_use("default")


var = IntVar()
var.set(2)
rbutton1 = Radiobutton(root, text='Clam skin', variable=var, value=1)
rbutton2 = Radiobutton(root, text='XPnative skin', variable=var, value=2)
rbutton3 = Radiobutton(root, text='Default skin', variable=var, value=3)
rbutton1.grid(row=5, column=0, padx=10, sticky='sw')
rbutton2.grid(row=6, column=0, padx=10, sticky='nw')
rbutton3.grid(row=6, column=0, padx=10, pady=25, sticky='nw')

savebtn = PhotoImage(data=icons)
mixbtn = PhotoImage(data=mix)
broombtn = PhotoImage(data=broom)
helpbtn = PhotoImage(data=help)
img = PhotoImage(data=icon)

name_label = Label(text="Name :")
name_label.grid(row=5, column=1, pady=5, sticky="sw")

type_label = Label(text="Type :")
type_label.grid(row=5, column=3, pady=5, sticky="sw")

para_label = Label(text="Parameter :")
para_label.grid(row=5, column=5, pady=5, sticky="sw")

dork_label = Label(text="Dorks :")
dork_label.grid(row=8, column=7, pady=5, sticky="sw")

open_button = Button(text="Open URLs", width=14, command=insert_url)
open_button.grid(row=1, column=0, padx=10, pady=5, sticky="n")

norm_button = Button(text="Normal", width=14, command=normal)
norm_button.grid(row=2, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="Generate", width=14, command=gen)
gens_button.grid(row=3, column=0, padx=10, pady=5, sticky="n")

gens_button = Button(text="  Clean    ", width=10, image=broombtn, compound="left", command=clean)
gens_button.grid(row=12, column=7, padx=32, sticky="swe")

help_button = Button(text="   Help     ", width=10, image=helpbtn, compound="left", command=helpmy)
help_button.grid(row=6, column=0, padx=10, pady=7, sticky="swe")

skin_button = Button(text="Change skin", width=10, command=change)
skin_button.grid(row=6, column=0, padx=10, pady=47, sticky="swe")

open_button = Button(text="  Random  ", width=10, image=mixbtn, compound="left", command=ran)
open_button.grid(row=9, column=7, padx=32, sticky="swe")

save_button = Button(text="    Save       ", width=10, image=savebtn, compound="left", command=save)
save_button.grid(row=10, column=7, padx=32, sticky="swe")

count_url = Entry(width=14, justify=CENTER)
count_url.grid(row=0, column=0, padx=10, pady=5, sticky="n")

count_name = Entry(width=4, justify=CENTER)
count_name.grid(row=5, column=1, pady=5, sticky="se")

count_type = Entry(width=4, justify=CENTER)
count_type.grid(row=5, column=3, pady=5, sticky="se")

count_para = Entry(width=4, justify=CENTER)
count_para.grid(row=5, column=5, pady=5, sticky="se")

count_dork = Entry(width=8, justify=CENTER)
count_dork.grid(row=8, column=7, pady=5, sticky="s")

site_entry = Entry()
site_entry.grid(row=9, column=1, pady=5, columnspan=5, sticky="we")

intext_entry = Entry()
intext_entry.grid(row=10, column=1, pady=5, columnspan=5, sticky="we")

intitle_entry = Entry()
intitle_entry.grid(row=11, column=1, pady=5, columnspan=5, sticky="we")

free_entry = Entry()
free_entry.grid(row=12, column=1, pady=5, columnspan=5, sticky="we")


url_name = Text(root, wrap=NONE, font="Courier 9", width=52, height=1)
url_name.grid(row=0, column=1, columnspan=5, rowspan=4, sticky='nswe')
scrollb = Scrollbar(root, orient=VERTICAL, command=url_name.yview)
scrollb.grid(row=0, column=6, rowspan=4, sticky='nse')
url_name.configure(yscrollcommand=scrollb.set)
sc = Scrollbar(root, orient=HORIZONTAL, command=url_name.xview)
sc.grid(row=4, columnspan=5, column=1, sticky='sew')
url_name.configure(xscrollcommand=sc.set)

dorks_name = Text(root, wrap=NONE, font="Courier 9", width=22, height=1)
dorks_name.grid(row=0, column=7, rowspan=7, sticky='nswe')
scroll = Scrollbar(root, orient=VERTICAL, command=dorks_name.yview)
scroll.grid(row=0, column=8, rowspan=7, sticky='nse')
dorks_name.configure(yscrollcommand=scroll.set)
scroli = Scrollbar(root, orient=HORIZONTAL, command=dorks_name.xview)
scroli.grid(row=7, column=7, sticky='sew')
dorks_name.configure(xscrollcommand=scroli.set)

name = Text(root, wrap=NONE, font="Courier 9", width=14, height=9)
name.grid(row=6, column=1, sticky='nswe')
scrols = Scrollbar(root, command=name.yview)
scrols.grid(row=6, column=2, sticky='nsw')
name.configure(yscrollcommand=scrols.set)
scrolt = Scrollbar(root, orient=HORIZONTAL, command=name.xview)
scrolt.grid(row=7, column=1, sticky='sew')
name.configure(xscrollcommand=scrolt.set)

type = Text(root, wrap=NONE, font="Courier 9", width=10, height=9)
type.grid(row=6, column=3, sticky='nswe')
scro = Scrollbar(root, command=type.yview)
scro.grid(row=6, column=4, sticky='nsw')
type.configure(yscrollcommand=scro.set)
scroltt = Scrollbar(root, orient=HORIZONTAL, command=type.xview)
scroltt.grid(row=7, column=3, sticky='sew')
type.configure(xscrollcommand=scroltt.set)

para = Text(root, wrap=NONE, font="Courier 9", width=14, height=9)
para.grid(row=6, column=5, sticky='nswe')
scr = Scrollbar(root, command=para.yview)
scr.grid(row=6, column=6, sticky='nse')
para.configure(yscrollcommand=scr.set)
scroltz = Scrollbar(root, orient=HORIZONTAL, command=para.xview)
scroltz.grid(row=7, column=5, sticky='sew')
para.configure(xscrollcommand=scroltz.set)

inurl = BooleanVar()
site = BooleanVar()
intext = BooleanVar()
intitle = BooleanVar()
free = BooleanVar()
inurls = Checkbutton(root, text='inurl:', variable=inurl)
sites = Checkbutton(root, text='site:', variable=site)
intexts = Checkbutton(root, text='intext:', variable=intext)
intitles = Checkbutton(root, text='intitle:', variable=intitle)
frees = Checkbutton(root, text='free:', variable=free)
inurls.grid(row=8, column=0, padx=10, sticky='nw')
sites.grid(row=9, column=0, padx=10, sticky='nw')
intexts.grid(row=10, column=0, padx=10, sticky='nw')
intitles.grid(row=11, column=0, padx=10, sticky='nw')
frees.grid(row=12, column=0, padx=10, sticky='nw')

root.tk.call('wm', 'iconphoto', root._w, img)
root.mainloop()

Для работы программы может потребоваться установка ttk
Ставить командой в консоли pip3 install pyttk или pip install pyttk

ghostphisher


  • #15

Это отличный материал. Именно такие проекты учат кодить со смыслом. на вопросы многих =Что бы мне накодить то в начале моего пути=…ответы выше

explorer


  • #16

может кто то выложить на другой обменник а то я с этого скачать не могу почему то

Да здесь ничего качать не нужно. Копируешь исходный код, делаешь пустой файл gendorks.py вставляешь туда код, сохраняешь и пользуешься )

  • #17

Вот сюда ещё прикрутить грабер ссылок с гугла по этим доркам, вот это вообще крутотень будет.

  • #18

можно ссылку плиз на dork combine 1.2

explorer


  • #20

как в виндоусе ее использовать?) извините за глупый , наверное вопрос.

e404d42d1f35a7aa56169b5556afeffc.png

Что такое дорка и из чего она состоит?
Дорка – специальный запрос в поисковой системе для нахождения нужной информации.

Разберемся из чего состоит данная дорка – inurl:index.php?catid= intitle:shop site:com

Дорка делиться на несколько составляющих:

Inurl: , intitle:shop , site:com – параметры для поисковой системы.

Их достаточно много, но я использовал эти:

inurl:index.php?catid= – найдем сайты, где содержится все, после “:” в ссылке

(.index.php?catid=132 – Recherche Google).

intitle:shop – найдем сайты, где содержится “shop” внутри тега title (<title>shop</title>).

intext:shop – найдем сайты, где содержится “shop” внутри текста страницы.

site:com – найдем сайты в домене .com

Неплохая фича – расширенный поиск от гугла.

index – название файла.

Название может быть любым. Обычно при разработке сайтов используются распространенные названия, которые несут в себе логическое значение. Поэтому у большинства сайтов можно видеть одинаковые названия файлов.

.php – расширение файла. Более полный список можно найти здесь – Интернет, web файлы – расширения, форматы файлов

.html?

.php?

.asp?

.aspx?

.cfm?

.htm?

.ihtml?

.mvc?

.shtml?

.xhtml?

.cgi?

.jsp?

.php3?

.php4?

.php5?

.jspx?

.jsf?

.xml?

.jhtml?

.phtm?

.phtml?

.mhtml?

.asmx?

catid= – имя входного параметра.

Создаем дорки.
Исходя из этого, для себя я вижу несколько вариантов использования дорок:

  • Поиск по частям дорок
  • Поиск по доркам, собранным из разных частей
  • Поиск по готовым вариантам дорок (не самый лучший способ).

Как начинал я.
Дорок у меня не было совсем, но были в запасе шопы, которые я спарсил с гугла

Я взял программу Acunetix Vulnerability Scanner

Вообще она предназначена для поиска уявзимостей на сайте, в том числе и скулей.

Но я использовал ее для составления карты сайта, тем самым узнавал части дорок.

Допустим у вас есть дорки/их составляющие.

Части дорок я собирал вручную, как и составлял полноценные дорки.

Также вручную я находил уязвимые сайты через гугл. Позже объясню почему руками работать лучше, чем всяческими SQLi Dumper-ами и прочими парсерами.

Как я искал сайты с помощью дорок:

  • Название + расширение (inurl:buying-gift-cards.aspx? или inurl:buying-gift-cards).
  • Расширение + параметр (inurl:aspx?MS_ID= или inurl:?MS_ID=)
  • Название + поиск в <title> (inurl:email_signup. intitle:Sharing and Usage)
  • Название + домен (inurl:ankle-biter. site:ws)
  • Значение + поиск в <title> (inurl:?MS_ID= intitle:basket)
  • Название или значение + поиск + домен (inurl:rim-strips.aspx? intitle:consumer reviews site:us или inurl:?sesskey= intitle:вход site:xn--p1ai)

Почему именно так? Иногда части дорок используются лишь на небольшом количестве сайтов, чтобы не создавать плохие дорки, тем самым сэкономить время, можно их просто загуглить.

Поиск уязвимых сайтов.
Все сайты я проверял вручную. Почему? На данный момент это лучший способ найти еще не раскрученный сайт.

Давайте будем разбираться на примере сайта – TOP – Ukiyoe Gallery SHUKADO .

Тот софт, что многие используют(SQLi Dumper, Havij) не позволяет полностью проверять сайты на уязвимость. Они не умеют работать через формы, через tamper data.

Поэтому ставим себе sqlmap: automatic SQL injection and database takeover tool – мультиплатформенную программу для пентестинга.

Также ставим GitHub – ron190/jsql-injection: jSQL Injection is a Java application for automatic SQL database injection. .

Вбил дорку в гугл, перешел на сайт. Какая может быть уязвимость на самом сайте? Банально подставляем в параметр.

Подмена заголовков в PHP.

Уязвимость в формах.

И т.д.

Sqlmap запускается через cmd. Если вы не устанавливали путь до файла python.exe, то запуск выглядит примерно так:

C:Python27python.exe F:sqlmapsqlmap.py -u Ukiyoe Gallery SHUKADO –dbs –random-agent –threads=10

Разберемся, что к чему. -u – целевой URL, –dbs – перечислить базы-данных, –random-agent – установить случайный юзер-агент, –threads – количество потоков.

Также есть функция парсинга с гугла по дорке, вместо -u, нужно подставить -g (-g inurl:index.php). Но я не советую ее использовать.

–dbs Перечислить базы данных СУБД

–tables Перечислить таблицы базы данных СУБД

–columns Перечислить колонки таблицы СУБД

–dump Сдампить записи таблицы базы данных СУБД

–dump-all Сдампить все записи таблиц базы данных СУБД

–search Поиск колонки(ок), таблиц(ы) и/или имени(имён) базы данных

–page-rank Показать page rank (PR) для результатов дорка Google

Опции:
-h, –help Показать базовую справку и выйти

-hh Показать продвинутую справку и выйти

–version Показать номер версии программы и выйти

-v VERBOSE Уровень вербальности: 0-6 (по умолчанию 1)

Цель:
По крайней мере одна из этих опций должна быть указана, чтобы задать цель(и)

-d DIRECT Строка подключения для прямого соединения с базой данных

-u URL, –url=URL Целевой URL

-l LOGFILE Парсить цель(и) из файлов логов Burp или WebScarab

-x SITEMAPURL Парсить цель(и) из удалённого файла sitemap(.xml)

-m BULKFILE Сканировать множество целей, заданных в текстовом файле

-r REQUESTFILE Загрузить HTTP запросы из файла

-g GOOGLEDORK Обработать результаты дорков Google как целевых URL

-c CONFIGFILE Загрузить опции из конфигурационного файла INI

Запросы:
Эти опции могут использоваться для определения как подключиться к целевому URL

–method=МЕТОД Принудительно использовать заданный HTTP метод (например, PUT)

–data=ДАННЫЕ Строка данных для отправки через POST

–param-del=РАЗД_ПАРfv Символ, используемый для разделения величин параметров

–cookie=КУКИ Значение заголовка HTTP куки HTTP

–cookie-del=РАЗДЕЛИТЕЛЬ_КУКИ Символ, используемый для разделения величин куки

–load-cookies=ФАЙЛ_ДЛЯ_ЗАГРУЗКИ Файл, содержащий куки в формате Netscape/wget

–drop-set-cookie Игнорировать заголовок Set-Cookie из ответа

–user-agent=AGENT Значение заголовка HTTP User-Agent

–random-agent Использовать случайно выбранное значение заголовка HTTP User-Agent

–host=ХОСТ Значение заголовка хоста HTTP

–referer=РЕФЕРЕР Значение заголовка HTTP Referer

-H ЗАГОЛОВОК, –header Дополнительный заголовок (к примеру, “X-Forwarded-For: 127.0.0.1”)

–headers=ЗАГОЛОВКИ Дополнительные заголовки (к примеру, “Accept-Language: frnETag: 123”)

–auth-type=ТИП_АУТ HTTP тип аутентификации (Basic, Digest, NTLM или PKI)

–auth-cred=ДАННЫЕ_АУТ учётные данные HTTP аутентификации (имя:пароль)

–auth-file=ФАЙЛ_АУТ файл HTTP аутентификации PEM сертификат/частный ключ

–ignore-401 Игнорировать ошибку HTTP 401 (Unauthorized) (Неавторизован)

–proxy=ПРОКСИ Использовать прокси для подключения к целевому URL

–proxy-cred=УЧЁТКА_ПРОКСИ Учётные данные аутентификации прокси (имя:пароль)

–proxy-file=ФАЙЛ_ПРОКСИ Загрузить список прокси из файла

–ignore-proxy Игнорировать дефолтные системные настройки прокси

–tor Использовать анонимную сеть Tor

–tor-port=TORPORT Установить порт прокси Tor отличный от дефолтного

–tor-type=TORTYPE Установить тип прокси Tor (HTTP (по умолчанию), SOCKS4 или SOCKS5)

–check-tor Проверить, используется ли Tor должным образом

–delay=ЗАДЕРЖКА Задержка в секундах между каждым HTTP запросом

–timeout=ТАЙМАУТ Секунды для ожидания перед таймаутом соединения (по умолчанию 30)

–retries=ПОПЫТКИ Попытки при таймаутах соединения (по умолчанию 3)

–randomize=ПАРАМЕТРЫ Случайно менять значения данного параметра(ов)

–safe-url=БЕЗОПАСНЫЙ_EURL URL адрес для частого посещения во время тестирования

–safe-post=POST Данные POST для отправки на безопасный URL

–safe-req=БЕЗОПАСНЫЙ_ФАЙЛ Load safe HTTP request from a file

–safe-freq=КОЛИЧЕСТВО Тестовые запросы между двумя визитами на заданный безопасный URL

–skip-urlencode Пропустить URL кодирование данных для запросов

–csrf-token=CSR.. Параметр используемый для удержания токена anti-CSRF

–csrf-url=CSRFURL URL адрес для посещения для извлечения токена anti-CSRF

–force-ssl Принудительное использование SSL/HTTPS

–hpp Использовать метод загрязнения параметра HTTP

–eval=EVALCODE Выполнить данные код Python перед запросом (например,

“import hashlib;id2=hashlib.md5(id).hexdigest()”)

Оптимизация:
Эти опции могут использовать для оптимизации производительности sqlmap

— Отключить все переключатели оптимизации

–predict-output Прогнозировать общий вывод запросов

–keep-alive Использовать постоянные соединения HTTP(s)

–null-connection Получить длину страницу без фактического тела ответа HTTP

–threads=ПОТОКИ Максимальное количество одновременных HTTP(s) запросов (по умолчанию 1)

Инъекция:
Эти опции могут использоваться для определения, какой параметр тестировать,

обеспечивать пользовательскую инъекционную нагрузку и дополнительные скрипты обфускации

-p TESTPARAMETER Тестируемый параметр(ы)

–skip=SKIP Пропустить тестирования данного параметра(ов)

–skip-static Пропустить тестирование параметров, которые не кажутся динамическими

–dbms=DBMS Принудительно указать СУБД

–dbms-cred=DBMS.. Данные аутентификации СУБД (пользователь:пароль)

–os=OS Принудительно указать операционную систему СУБД

–invalid-bignum Использовать большие числа для недействительных значений

–invalid-logical Использовать логические операции для недействительных значений

–invalid-string Использовать случайные строки для недействительных значений

–no-cast Отключить механизм отбора полезной нагрузки

–no-escape Отключить механизм экранирования строк

–prefix=PREFIX Предваряющая строка инъекционного запроса

–suffix=SUFFIX Завершающая строка инъекционного запроса

–tamper=TAMPER Использовать данный скрипт(ы) для обфускации инъекционных данных

Выявление:
Эти опции можно использовать для настройки фазы выявления

–level=УРОВЕНЬ Уровень выполнения тестирования (1-5, по умолчанию 1)

–risk=РИСК Риск выполняемого тестирования (1-3, по умолчанию 1)

–string=СТРОКА Строка, когда запрос выполнен в True (Истина)

–not-string=НЕ_ИСТИНА Строка, когда запрос выполнен в False (Ложь)

–regexp=РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Регулярное выражение, когда запрос выполнен в True (Истина)

–code=КОД HTTP код, когда запрос выполнен в True (Истина)

–text-only Сравнить страницы основываясь только на текстовом содержимом

–titles Сравнить страницы основываясь только на их заголовках

Техники:
Эти опции можно использовать для поднастройки тестирования отдельных техник SQL инъекции

–technique=ТЕХНИКА Техники SQL инъекций для использования (по умолчанию “BEUSTQ”)

–time-sec=TIMESEC Секунды для задержки ответа СУБД (по умолчанию 5)

–union-cols=UCOLS Диапазон колонок для тестирования с запросами UNION SQL инъекций

–union-char=UCHAR Символ для использования при брутфорсинге количества колонок

–union-from=UFROM Таблица для использования в FROM части UNION запроса SQL инъекции

–dns-domain=ДОМЕН Доменное имя, используемое для эксфильтрационной атаки DNS

–second-order=СТРОКА В результате по URL ищется ответ второго порядка

Отпечатки:

-f, –fingerprint Выполняет обширную сверку версии СУБД

Перечисления:
Эти опции могут использоваться для перечисления информации

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

таблицах данных. Более того, вы можете запустить ваши собственные

SQL выражения

-a, –all Получить всё

-b, –banner Получить банер СУБД

–current-user Получить текущего пользователя СУБД

–current-db Получить текущую базу данных СУБД

–hostname Получить имя хоста сервера СУБД

–is-dba Определить, является ли текущий пользователь администратором СУБД

–users Перечислить пользователей СУБД

–passwords Перечислить хеши паролей пользователей СУБД

–privileges Перечислить пользовательские привилегии СУБД

–roles Перечислить пользовательские роли СУБД

–dbs Перечислить базы данных СУБД

–tables Перечислить таблицы базы данных СУБД

–columns Перечислить колонки таблицы СУБД

–schema Перечислить схему СУБД

–count Перечислить количество записей для таблицы(таблиц)

–dump Сдампить записи таблицы базы данных СУБД

–dump-all Сдампить все записи таблиц базы данных СУБД

–search Поиск колонки(ок), таблиц(ы) и/или имени(имён) базы данных

–comments Получить комментарии СУБД

-D БД БД СУБД для перечисления

-T ТБЛ Таблица(ы) БД СУБД для перечисления

-C КОЛ Колонка(и) таблицы

БД СУБД для перечисления

-X ПРОПУСТИТЬКОЛ Колонка(и) БД СУБД для не перечисления

-U ПОЛЬЗОВАТЕЛЬ Пользователи СУБД для перечисления

–exclude-sysdbs Пробустить системные БД СУБД при перечислении таблиц

–where=DUMPWHERE Использовать условие WHERE при дампинге таблиц

–start=LIMITSTART Первая выходная запись запроса для получения

–stop=LIMITSTOP Последняя выходная запись запроса для получения

–first=FIRSTCHAR Первый символ выходного слова запроса для получения

–last=LASTCHAR Последний символ выходного слова запроса для получения

–sql-query=QUERY SQL выражение для исполнения

–sql-shell Приглашение интерактивного SQL шелла

–sql-file=SQLFILE Выполнить SQL выражение из данного файла(ов)

Брут-форс:
Эти опции могут использоваться для записи проверок брут-форсом

–common-tables Проверить наличие распространённых таблиц

–common-columns Проверить наличие распространённых колонок

Инъекция заданных пользователем функций:
Эти опции могут быть использованы для создания определённых пользователем функций

–udf-inject Вставка предопределённых пользователем функций

–shared-lib=SHLIB Локальный путь до общей библиотеки

Доступ к файловой системе:
Эти опции могут быть использованы для доступа к файловой системе СУБД

–file-read=RFILE Прочитать файл из файловой системы СУБД

–file-write=WFILE Записать локальный файл в файловую систему СУБД

–file-dest=DFILE Абсолютный путь для записи файла в СУБД

Доступ к оперативной системе:
Эти опции могут быть использованы для получения доступа к ОС СУБД

–os-cmd=OSCMD Выполнить команду ОС

–os-shell Приглашение интерактивного шелла ОС

–os-pwn Прриглашение для внеполосного шелла, Meterpreter или VNC

–os-smbrelay Однокликовое приглашение для внеполосного шелла, Meterpreter или VNC

–os-bof Эксплуатация переполнения буфера хранимой процедуры

–priv-esc Повышение пользовательских привилегий процесса БД

–msf-path=MSFPATH Локальный путь где установлен Metasploit Framework

–tmp-path=TMPPATH Удалённый абсолютный путь директории временных файлов

Доступ к регистру Windows:
Эти опции могут использоваться к доступу к регистру Windows СУБД

–reg-read Прочитать значение ключа регистра Windows

–reg-add Записать значение ключа регистра Windows

–reg-del Удалить значение ключа регистра Windows

–reg-key=REGKEY Ключ регистра Windows

–reg-value=REGVAL Значение ключа регистра Windows

–reg-data=REGDATA Данные значения ключа регистра Windows

–reg-type=REGTYPE Тип значения ключа регистра Windows

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

-s SESSIONFILE Загрузить сессию из сохранённого файла (.sqlite)

-t TRAFFICFILE Записать весь HTTP трафик в текстовый файл

–batch Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию

–charset=CHARSET Принудительная кодировка символов, используемых для получения данных

–crawl=CRAWLDEPTH Ползать по веб-сайту начиная с заданного URL

–crawl-exclude=РЕГВЫРАЖЕНИЕ Регулярное выражение для исключения страниц для ползания (например, “logout”)

–csv-del=CSVDEL Символ разделителя, используемый в выводе CSV (по умолчанию “,”)

–dump-format=ДАМПФОРМАТ Формат сдампленных данных (CSV (по умолчанию), HTML или SQLITE)

–eta Отобразить для каждого вывода приблизительное время прибытия

–flush-session Стереть сессионные файлы для текущей цели

–forms Парсить и тестировать формы на целевой URL

–fresh-queries Игнорировать результаты запросов, сохранённые в сессионном файле

–hex Использовать шестнадцатеричную функцию(ии) СУБД для получения данных

–output-dir=OUT.. Пользовательский путь директории вывода

–parse-errors Парсить и отображать сообщения ошибок СУБД из ответов

–pivot-column=P.. Имя стержневой колонки

–save=SAVECONFIG Сохранить опции в конфигурационный INI файл

–scope=SCOPE Регулярное выражение для фильтрации целей из лога proxy

–test-filter=TE.. Выбрать тесты по полезной нагрузке и/или названиям (например, ROW)

–test-skip=TEST.. Пропустить тесты по полезной нагрузке и/или названиям (например, BENCHMARK)

–update Обновить sqlmap

Разное:
-z MNEMONICS Использовать короткие мнемоники (например, “flu,bat,ban,tec=EU”)

–alert=ALERT Запустить команду(ы) ОС, когда найдена SQL инъекция

–answers=ANSWERS Установить ответ на вопрос (например “quit=N,follow=N”)

–beep Сигнал на вопрос и/или когда найдена SQL инъекция

–cleanup Очистить СУБД от специфичных для sqlmap пользовательских функций и таблиц

–dependencies Проверить на отсутствующие (неосновные) зависимости sqlmap

–disable-coloring Отключить раскрашивание вывода в консоли

–gpage=GOOGLEPAGE Использовать результаты дорка Google с указанного номера страницы

–identify-waf Провести тщательное тестирование на WAF/IPS/IDS защиту

–skip-waf Пропустить эвристическое обнаружение WAF/IPS/IDS защиты

–mobile Имитировать смартфон через заголовок HTTP User-Agent

–offline Работать в оффлайн режиме (использовать только данные сессии)

–page-rank Показать page rank (PR) для результатов дорка Google

–purge-output Безопасно удалить всё содержимое из директории вывода

–smart Провести тщательные тесты только если эвристика дала положительные результаты

–sqlmap-shell Запрос интерактивного шелла sqlmap

–wizard Простой интерфейс мастера для начинающих пользователей

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

Зачем нам jSQL Injection? Иногда удобно слить базу, также с его помощью можно найти страницу админки, залить шелл и прочее.

Мыслите творчески и у вас все получится

В этой шпаргалке по Google Dorking мы расскажем вам о различных командах для реализации Google Dorking. Но сначала давайте вкратце познакомимся с Google Dorking.

Содержание

  1. Что такое Google Dorking?
  2. Команды Google Dorking
  3. Команда кэша
  4. Команда Intext и Allintext
  5. Команда “filetype”
  6. Команда Intitle
  7. Команда inurl
  8. Команда site
  9. Команда ext
  10. Inposttitle
  11. Allintitle
  12. Allinanchor
  13. Inanchor
  14. Around
  15. @команда
  16. Кавычки
  17. Related
  18. Info
  19. Поиск серверов в Google Dorking
  20. Погода
  21. Видеоролики Zoom
  22. Дампы SQL
  23. Админки WordPress
  24. Apache2
  25. phpMyAdmin
  26. JIRA/Kibana
  27. Сброс пароля cPanel
  28. Поиск FTP-серверов
  29. Доступ к онлайн-камерам
  30. Операторы
  31. Поисковый термин
  32. OR
  33. AND
  34. Комбинация операторов
  35. Включить результаты
  36. Исключить результаты
  37. Синонимы
  38. Шаблон glob
  39. Параметры поиска
  40. Как предотвратить появление Google Dorks
  41. Заключение

Что такое Google Dorking?

Этические барьеры защищают важную информацию в Интернете. Но иногда доступ к такой информации необходим, и вам нужно преодолеть этот барьер. Именно здесь на помощь приходит Google Dorking, который поможет вам получить доступ к скрытой информации.

Google Dorking, также известный как Google hacking, – это метод, позволяющий вернуть информацию, которую трудно найти с помощью простых поисковых запросов, путем предоставления поисковой строки, использующей расширенные операторы поиска.

В основном, этичные хакеры используют этот метод для запроса поисковой системы и поиска важной информации. Эта шпаргалка по взлому Google поможет вам выполнить команды Google Dorking и получить доступ к скрытой информации.

Команды Google Dorking

Команда кэша

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

Для проверки данных можно использовать следующий синтаксис для любого произвольного веб-сайта. Результат может меняться в зависимости от обновлений Google.

Запустив команду, вы можете найти несколько результатов, связанных с этим. Вы также можете использовать ключевые слова в результатах поиска, например, ‘xyz’, как показано в приведенном ниже запросе.

cache:https://xyz.nu.edu.pk/Login XYZ

Получив результат, вы увидите, что ключевое слово будет выделено.

Команда Intext и Allintext

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

Для одного ключевого слова можно использовать следующий синтаксис.

Intext:usernames

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

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

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

allintext: "username" "password"

allintext: "username" "password"

Вы получите все страницы с указанными ключевыми словами.

Команда “filetype”

Это одна из самых важных опций Dorking, поскольку она отфильтровывает наиболее важные файлы из нескольких файлов. Например, вы можете применить фильтр только для извлечения файлов PDF. Если вы разработчик, вы можете обратиться к лог-файлам, что позволит легко отслеживать их, применив нужный фильтр.

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

filetype:log

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

allintext:username filetype:log

allintext:username filetype:log

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

Команда Intitle

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

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

Вы можете использовать следующий синтаксис:

intitle: "ip camera"

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

Сначала Google получит все страницы, а затем применит фильтр к полученному набору результатов. Он отбросит страницы, на которых нет нужного ключевого слова.

Для этого можно использовать следующий синтаксис:

allintitle: "ip camera" "dvr"

allintitle: "ip camera" "dvr"

Вы увидите все страницы с обоими ключевыми словами.

Команда inurl

Эта команда работает аналогично команде intitle; однако команда inurl отфильтровывает документы на основе текста URL. Эти ключевые слова имеются на HTML-странице, причем URL представляет собой всю страницу. Вы можете использовать эту команду для отсеивания документов.

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

Синтаксис:

allinurl:tesla lambo

Команда site

Команда сайта поможет вам найти конкретный объект. Сначала вы можете попробовать найти ключевые слова, которые предоставят вам широкий спектр информации, которая может соответствовать или не соответствовать вашим потребностям. Затем вы можете сузить поиск, используя другие команды с определенным фильтром.

Предположим, вы хотите купить автомобиль и ищете различные варианты, доступные с 2020 года. Вы получите длинный список вариантов. Теперь вы можете применить некоторые ключевые слова, чтобы сузить поиск и собрать конкретную информацию, которая поможет вам купить автомобиль. Здесь вы можете использовать команду site для поиска только на определенных сайтах.

Например:

site:https://global.honda/

site:https://global.honda/

То же самое можно сделать и для других автомобилей.

Команда ext

Если вы хотите найти документ определенного типа, вы можете использовать команду ext.

Предположим, вы хотите написать статью на определенную тему, но вы не можете начать сразу, не изучив эту тему. В основном, исследованные статьи доступны в формате PDF. Вы можете указать тип файла в команде dork.

Здесь ext означает расширение. Эта команда работает аналогично команде filetype. Теперь, используя команду ext, вы можете сузить поиск, ограничившись только файлами в формате pdf.

Вы можете использовать следующий синтаксис:

site:https://www.ford.com/ ext:pdf

site:https://www.ford.com/ ext:pdf

Inposttitle

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

Например:

inposttitle:weight loss goals

inposttitle:weight loss goals

Allintitle

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

Например:

allintitle:how to write content for seo

allintitle:how to write content for seo

Allinanchor

Вы можете использовать эту команду для исследования страниц, которые имеют все термины после “inanchor” в якорном тексте, который ссылается на страницу.

Например:

allinanchor: "how to draw anime"

allinanchor: "how to draw anime"

Inanchor

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

Например:

inanchor: "digital painting"

inanchor: "digital painting"

Around

Ищете очень узкие результаты? Эта команда предоставит вам результаты с двумя или более терминами, появляющимися на странице.

Например:

digital drawing AROUND(2) tools

digital drawing AROUND(2) tools

@команда

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

Например:

mangoes @facebook

Кавычки

Если вы используете кавычки вокруг фразы, вы сможете искать именно эту фразу. Результаты поисковой системы исключат ненужные страницы.

Например:

В некоторых случаях вам могут понадобиться конкретные данные с более чем одного сайта с похожим содержанием. Вы можете указать точное доменное имя с помощью этой команды Google Dorking:

Info

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

Поиск серверов в Google Dorking

Погода

Любопытно узнать о метеорологии? Используйте эту команду для получения информации о передаче данных с устройства Weather Wing.

intitle:"Weather Wing WS-2"

intitle:"Weather Wing WS-2"

Вы увидите несколько устройств, подключенных по всему миру, которые передают данные о погоде, такие как направление ветра, температура, влажность и другие.

Видеоролики Zoom

Ищете конкретное собрание Zoom? Вы можете найти его с помощью этой команды, но имейте в виду, что с тех пор Zoom ввела некоторые ограничения, чтобы усложнить поиск/нарушение собраний Zoom. Тем не менее, если URL-адрес предоставлен в общий доступ, вы все равно сможете найти собрание Zoom.

Единственным недостатком этого способа является скорость индексации сайта Google. К тому времени, когда сайт будет проиндексирован, встреча Zoom может уже закончиться.

inurl:zoom.us/j and intext:scheduled for

inurl:zoom.us/j and intext:scheduled for

Дампы SQL

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

"index of" "database.sql.zip"

"index of" "database.sql.zip"

Админки WordPress

Вы можете легко найти страницы входа в админку WordPress с помощью dork, как показано ниже.

intitle: "Index of" wp-admin

intitle: "Index of" wp-admin

Apache2

Вы можете найти веб-страницы Apache2 с помощью следующей команды Google Dorking:

intitle: “Apache2 Ubuntu Default Page: It works”

intitle: "Apache2 Ubuntu Default Page: It works"

phpMyAdmin

Этот инструмент – еще один способ компрометации данных, поскольку phpMyAdmin используется для администрирования MySQL через Интернет. В Google нужно использовать следующее:

"Index of" inurl:phpmyadmin

"Index of" inurl:phpmyadmin

JIRA/Kibana

Вы можете использовать Google Dorks для поиска веб-приложений, содержащих важные корпоративные данные (через JIRA или Kibana).

inurl:Dashboard.jspa intext:"Atlassian Jira Project Management Software"

inurl:Dashboard.jspa intext:"Atlassian Jira Project Management Software"

inurl:app/kibana intext:Loading Kibana

inurl:app/kibana intext:Loading Kibana

Сброс пароля cPanel

Вы можете сбросить пароли cPanel для управления ею:

inurl:_cpanel/forgotpwd

Поиск FTP-серверов

Если вы хотите получить доступ к FTP-серверам, вам может понадобиться смешать запросы, чтобы получить желаемый результат. Вы можете использовать следующий синтаксис:

intitle: "index of" inurl:ftp

В результате вы получите все индексные страницы, относящиеся к FTP-серверу, и отобразите каталоги.

intitle: "index of" inurl:ftp

Получив результаты, вы можете проверить различные доступные URL-адреса для получения дополнительной информации.

Доступ к онлайн-камерам

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

Ниже приведен синтаксис для доступа к информации о камере.

Intitle: "webcamXP 5"'

Операторы

Чтобы сузить и отфильтровать результаты, можно использовать операторы для лучшего поиска. Ниже перечислены некоторые операторы, которые могут показаться вам интересными.

Поисковый термин

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

OR

Используя этот оператор, вы можете указать несколько ключевых слов. Вы получите результаты, если веб-страница содержит любое из этих ключевых слов. Вы можете разделять ключевые слова с помощью “|”. Например.

сайт:facebook.com | сайт:twitter.com

AND

Этот оператор будет включать все страницы, содержащие все ключевые слова. Ключевые слова разделяются символом “&”. Вы можете использовать следующий синтаксис.

site:facebook.com & site:twitter.com

Комбинация операторов

Для уточнения фильтра можно комбинировать операторы ‘or’ и ‘and’. Например.

(site:facebook.com | site:twitter.com) & intext: "login"

(site:facebook.com | site:twitter.com) (intext: "login")

Включить результаты

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

-сайт:facebook.com +сайт:facebook.*

Исключить результаты

Вы также можете исключить результаты из вашей веб-страницы. Например.

site:facebook.* -site:facebook.com

Синонимы

Если вы хотите найти синонимы заданного ключевого слова, то можете использовать знак “~” перед этим ключевым словом. Тогда Google предоставит вам подходящие результаты. Например, если вы хотите найти ключевое слово “set” вместе с его синонимом, таким как configure, collection, change и т.д., вы можете использовать следующее:

Шаблон glob

Вы можете использовать шаблон glob (*), когда вы не уверены, что именно там находится, и попросить Google произвести поиск соответствующим образом. Например”

Параметры поиска

Ниже приведены различные параметры поиска:

  • q- Его значение – это поисковый запрос.
  • filter – его значение может быть 1 или 0. Если его значение равно 0, то будут показаны все потенциально дублирующиеся результаты.
  • as_epq- Его значением может быть поисковая фраза. Вы можете использовать ее для поиска точной фразы. Нет необходимости заключать поисковую фразу в кавычки.
  • as_ft- Его значение может быть исключающим (e) или включающим (i).
  • as_filetype- Может быть расширением файла. Вы можете включить или исключить тип файла, указанный as_ft.
  • as_occt- Его значение может быть – any (где угодно), title (заголовок страницы), body (текст страницы), url (url страницы) и links (ссылка страницы). Вы можете найти ключевое слово в указанном месте.
  • as_dt- Его значение может быть исключающим (e) или включающим (i). Вы можете использовать его для исключения или включения сайта или домена, указанного as_sltesearch.
  • as_sltesearch- Его значением может быть сайт или домен. Вы можете включить или исключить тип файла, указанный as_dt.
  • as_qdr- Его значением может быть m3 (три месяца), m6 (шесть месяцев) и y (прошлый год). Вы можете искать страницы, включенные в указанный период.

Как предотвратить появление Google Dorks

Вы можете использовать любой из следующих подходов, чтобы избежать попадания под контроль Google Dork. Ниже перечислены меры по предотвращению Google dork:

Вы должны шифровать конфиденциальную и личную информацию, такую как имена пользователей, пароли, платежные реквизиты и так далее.
Кроме того, проверьте свой сайт с помощью запросов, чтобы проверить, нет ли у вас открытых конфиденциальных данных. Если вы обнаружили какую-либо открытую информацию, просто удалите ее из результатов поиска с помощью Google Search Console.

Защитите конфиденциальное содержимое с помощью документа robots.txt, находящегося в каталоге сайта на корневом уровне. Он не позволит Google индексировать ваш сайт.

User-agent: *
Disallow: /

Вы также можете заблокировать определенные каталоги, чтобы исключить их из веб-ползания. Если у вас есть область /admin и вам нужно защитить ее, просто поместите этот код внутрь:

User-agent: *
Disallow: /admin/

Ограничьте доступ к определенным файлам:

User-agent: *
Disallow: /privatearea/file.html

Ограничение доступа к динамическим URL, содержащим символ ‘?’:

User-agent: *
Disallow: /*?

Заключение

Сегодня Google Dorks является одним из самых удобных способов поиска труднодоступных данных. Необходимо правильно подобрать поисковый запрос и понять, как работает поисковая система, чтобы извлечь ценную информацию из пула данных. Несмотря на наличие нескольких инструментов на рынке, поисковые операторы Google занимают свое собственное место.

Здравствуйте уважаемые форумчане, сегодня мы рассмотрим подробный гайд по сливу баз с сайтов через SQL Dumper. Да конечно таких тем было уже очень много, но моя будет более подробная и на мой взгляд более удобная и рассчитана на новичков. Сюда выкладывать софт не буду, тк все есть на нашем форуме, ссылки будут в конце темы. И так приступим.
Для начала нам потребуется генератор дорков, чтобы создать более-менее приватные запросы. Предупреждаю сразу, если у вас нет фантазии , то тему может сразу закрыть , потому что для создания нормального приват-дорка нужно немного подумать, тк такие запросы как forum , games ,steam и тд уже прочеканны и слиты уже давным давно и максимум что вы получите это небольшую кучку невалида или просто обычные паблик базы с которых будет 0 профита.
И так рассмотрим нашу программу:

0c97fe2e3edff577b468d30c1717a526.jpg

В первых 3 столбиках ничего не трогаем, переходим сразу к столбику запрос и тут начинается самое интересное, где нам понадобится фантазия, не бойтесь экспериментировать , придумывайте разные комбинации слов ( небольшой совет, сверху над 2 и 3 столбиком можно поставить галочки, которые прибавляют в дорки запрос inurl: , можете сделать допустим сразу 4 вариации дорков в разных текстовых файлах) Запросов можно писать не ограниченное колличество, 1 запрос на 1 строке, в любом случае программа сделает все возможные комбинации с каждым запросом.После того как написали все нужные вам запросы, жмем генерировать.

Следущий этап: парсим ссылки через наши дорки. Нам потребуется парсер Selka , кончено можно воспользоваться и другим , но плюсы этого парсера: множество поисковиков, выбор по страннам, при этом этот парсер не банит поисковая система и нам не понадобится антигейт или вводить постоянно капчу, очень быстрый и простой в обращении. Устанавливаем и открываем наш парсер, сразу открывается окно нового проекта, в данное окно будем вставлять наши дорки ( примечание: дорки лучше разделить на несколько частей через любые программы для работы с базами и текстом, изза большого колличества дорок и спарсеных ссылок при сохраненнии может возникнуть ошибка при котором ссылки не сохранятся) В случае если новый проект не открылся автоматически то можем открыть его сами, кнопку выделил красным

b1724087920d06750a4772cfd9b2d26d.jpg

Когда вставили наши дорки , жмем далее и видим выбор поисковой системы, странны и колличество ссылок на каждый запрос.

f3f50f851eace016d9504404bb44d7df.jpg

Я предпочитаю бинг, странны выбираю Россию и Украину.
Нажимаем далее и запускаем наш проект и ждем пока парсинг ссылок закончится. Коггда поиск закончится, нижимаем экспорт и выбираем Exel и ждем пока сохранится.

b79079dad02500107aa84f3d46fa6369.jpg

Открываем наш Exel файл и копируем ссылки в обчыный тестовый документ и сохраняем.

5190faaabb3d2f8555a64ee00b52b322.jpg

Открываем Sql Dumper и выбираем Import и выбираем наш текстовый файл с ссылками.

d19249417d719df471377b9ef26230fe.jpg

Перходим во вкладку Exploitables и жмем Start Exploiter и ждем пока программа найдет сайты с доступной SQl инъекцией.

446d8b9a507f2acf5b8640c81d1a6702.jpg

Далее переходим во складку Injectables и нажимаем наверху Start analizer , после анализа нам выводят сайты доступные для слива. Нажимаем на сайт ПКМ и жмем go to dumper. И вот мы уже приближаемся к финалу. Видим базу данных нашего сайта. Жмем Get tables и получаем таблицы из нашей базы, нас интересуют таблицы с названием users названия могут меняться , будьте внимательны.

b29be49f59902f08864a84664b2e1ef6.jpg

В моем случае forum users. Жмем Get columns и ищем колонны usermail и userpass .

285a13b8077dffd2d50889ede059d012.jpg

В моем случае user_password и user_email . Опять же названия могут меняться. И теперь жмем Dump data и ждем пока сольются мейл и пасс.

7903df95fdc3d994db3cfef0c0efe5d3.jpg

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

056785ebceaa15cd946ad7224c3f895b.jpg

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

  1. Парсер Selka:

    Пожалуйста,

    Вход
    или

    Регистрация
    для просмотра содержимого URL-адресов!

  2. Sql Dumper v7 :

    Пожалуйста,

    Вход
    или

    Регистрация
    для просмотра содержимого URL-адресов!

  3. Создание дорок :

    Пожалуйста,

    Вход
    или

    Регистрация
    для просмотра содержимого URL-адресов!

  4. Расшифровка хеша:

    Пожалуйста,

    Вход
    или

    Регистрация
    для просмотра содержимого URL-адресов!

  5. Меняем местами хеш:пасс:

    Пожалуйста,

    Вход
    или

    Регистрация
    для просмотра содержимого URL-адресов!

Добавить комментарий