LIMB
Вход Регистрация

тема

GitHub доркинг: мастер-класс по цифровой археологии

YmbMember · · 3 ответов · 916 просмотров

Вступление
В статье не содержатся призывы к нарушению законодательства. Автор не несёт ответственности за возможные действия третьих лиц, предпринятые на основе прочитанного.
Помните такой сервис www.unsecuredapikeys.com ? 
Не удалось прогрузить медиа

Раньше я им пользовался очень активно. Зашел, получил ключ и не надо платить. Но однажды меня постиг вопрос “А откуда этот сервис берет для меня апи ключи? Не может быть, чтоб какой-то богатый дядя накупил кучу аккаунтов и просто так раздавал их”. Все оказалось куда интереснее. Оказывается ни на один апи ключ, какой этот сервис выдавал мне, не было потрачено ни цента. А во всем виноват GitHub и его “волонтеры”, какие сами того не замечая дарили ключи всем пользователям.

GitHub search
Как мы все знаем, Github - это самая популярная в мире платформа для совместного хранения кода, где разработчики со всего мира могут делиться своим кодом. Но проблема в том, что некоторые разработчики забывают убрать API ключи и другие чувствительные данные из кода, и сами того не осознавая стают так называемыми волонтерами, делясь этой информацией с хакерами и халявщиками.
А теперь хочу вас познакомить с https://github.com/search - Это поисковая система GitHub’a. С помощью этого поисковика мы можем делать поиск по коду, репозиториям, issues и т д.
Не удалось прогрузить медиа

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

Даже при таком банальном поисковом запросе, вижу данные, каких у меня быть не должно :) Но не стоит ограничиваться одним оператором чтобы найти что-то интересное. Для того, чтобы найти действительно что-то стоящее, я вам рекомендую ознакомиться с официальной документацией и синтаксисом поисковых запросов.
Глупый будет думать и делать дорки сам, а умный найдет их в интернете. Можете вы подумать. Но прежде чем вы будете искать дорки в открытых источниках, я должен предупредить. Относительно недавно синтаксис поисковых запросов изменился. Было изменено/удалено много фильтров. Поэтому прежде чем доркать посмотрите через документацию насколько они свежие. Кстати об этом

GitHub доркинг еле живой
Хотелось бы, чтобы меня тоже уведомили об этом, когда я только изучал эту тему. Ну да ладно, все самое лучшее для вас. Разработчики в 2023 году откинули ряд очень важных фич, какие и погубили доркинг 
  1. Опцию сортировки. Сейчас нельзя нажать на 2 кнопки и отсортировать все таким образом, чтобы показывало самые недавние результаты
 
Не удалось прогрузить медиа

  1. Теперь показывает только 5 первых страниц с результатами. И такое ограничение поставили только на поиск по коду
Не удалось прогрузить медиа

  1. Убрали часть фильтров, чтобы усложнить создание более точных дорки. Из них стоит выделить фильтр filename, какой был основой дорков с сочной информацией.
  2. Часть ныне существующих фильтров нельзя применить в поиск по коду. Например created
Не удалось прогрузить медиа

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

Единственным выходом из этой ситуации является создание более точных дорков. Наведу пример: Вместо path:.env  используем path:.env password=
То Есть добавляем больше конкретики, чтобы результат влазил в 5 страниц. Так же могу вам дать еще одну фишку. Если сайт разрабатывали иностранцы, например, русские, то есть шанс, что они могли писать комментарии или названия переменных на русском языке. Я никогда не видел чтоб об этом кто-то говорил.
Не удалось прогрузить медиа

Не удалось прогрузить медиа


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

   1. Подбор дорков
У меня есть свои заготовленные дорки, но в основном всегда я решаю какие именно использовать следующим способом:. Сперва вводим целевой домен или доменное имя в поиск и смотрим на кол-во результатов
Не удалось прогрузить медиа

Не удалось прогрузить медиа


В первом случае 1.2млн результатов, это pizdec как много. Поэтому под таргет gov.uk мы будет крафтить дорки в каких больше конкретики
На earnest.com результатов мало, поэтому можно сильно не парится

   2. Ручной поиск
Ручной поиск, это, на мой взгляд, наилучший способ найти то что нужно. Для того чтобы автоматизировать ручной поиск, я написал мини-скрипт. Вот как его использовать: 
В файл dorks.txt кидаем список дорков по какому мы будем проводить поиск
Не удалось прогрузить медиа


Запускаем скрипт с аргументом -o (чтобы сохранить результаты). В слово 1 для замены я пишу домен а в слово 2 для замены я пишу доменное имя цели.
Не удалось прогрузить медиа


В файл, какой вы указали через -о записываються результаты в удобном формате. Копируем все ссылки какие нагенерил нам скрипт и открываем их. Чтобы открыть все сразу, я использую расширение Open Multiple Urls в хроме.
Не удалось прогрузить медиа

Вот вам код моего скрипта:
Code:
import argparse

from colorama import init, Fore, Style


init(autoreset=True)


parser = argparse.ArgumentParser(description="GitHub Dork Generator")

parser.add_argument("-o", "--output", help="Файл для сохранения результатов", type=str)

args = parser.parse_args()


print(r"""

==========================================

Скрипт созданный специально для LIMB

От YmbMember

В файл dorks.txt добавьте свои дорки

Через -o можно указать куда вывести результаты

=========================================

""")


domain = input("Введите слово 1 для замены (например, hackertarget.site): ")

keyword = input("Введите слово 2 для замены (например, hackertarget): ")


try:

    with open("dorks.txt", "r") as file:

        queries = [line.strip() for line in file if line.strip()]

except FileNotFoundError:

    print(Fore.RED + "Файл dorks.txt не найден. Убедитесь, что файл существует в той же директории, что и этот скрипт.")

    exit()


links = []


output_lines = [] 


for query in queries:

    link1 = f"https://github.com/search?q={domain}+{query.replace(' ', '%20')}&type=Code"

    link2 = f"https://github.com/search?q=\"{keyword}\"+{query.replace(' ', '%20')}&type=Code"

    

    links.append(link1)

    links.append(link2)

    

    # Вывод в терминал

    print(Fore.YELLOW + f"{query}")

    print(Fore.GREEN + link1)

    print(Fore.GREEN + link2)

    print(Fore.CYAN + "-" * 60)

    

    # Форматированный вывод для файла

    output_lines.append(f"{query}")

    output_lines.append(link1)

    output_lines.append(link2)

    output_lines.append("-" * 60)


if args.output:

    try:

        with open(args.output, "w") as outfile:

            # Сначала только ссылки

            outfile.write("\n".join(links) + "\n\n")

            

            # Затем форматированный вывод

            outfile.write("\n".join(output_lines))

        print(Fore.GREEN + f"\nРезультаты успешно сохранены в файл: {args.output}")

    except Exception as e:

        print(Fore.RED + f"\nОшибка записи в файл: {e}")

Мое содержимое dorks.txt:
Code:
path:.env
path:.sql
path:.yml
path:.yaml
path:.json
path:.ini
path:.xml
path:.properties
path:.cfg
path:.pem
path:.key
path:.crt
path:.cert
path:.p12
path:.der
path:.dump
path:.db
path:.sqlite
path:.log
path:.bak
path:.backup
path:.zip
path:.tar
path:.gz
path:config.yaml
path:config.json
path:credentials
path:database.yml
path:settings.py password
AWS_ACCESS_KEY_ID language:JSON
apiKey
Authorization
path:.env AWS_ACCESS_KEY
path:config.json google
path:settings.py stripe
path:api_keys.json
apiKey site:github.com
Google API key
path:db.sql
path:/db.sql
path:database.ini
path:db_connection.py
path:database.json password
path:db-config
path:docker-compose.yml
path:ftp-config
path:nginx.conf
path:config.php
path:.gitconfig
path:id_rsa
path:id_dsa
path:private_key.pem
path:server.key
path:cert.pem
password="
pwd=
password language:JavaScript
password extension:py
admin_password
path:server.xml
path:web.config
path:apache.conf
path:hosts
AWS_SECRET_ACCESS_KEY language:Python
Google Cloud extension:yaml
filename:.env AZURE_KEY
filename:aws_credentials.json
path:oauth.json
path:secrets.json
path:slack_token.json
access_token
secret_key
TODO language:JavaScript
fixme language:Python
debug

Простой и примитивный скрипт, но экономит кучу времени.

   3. Подробный анализ репозиториев работников
В основном потенциально важные для хакера данные оставляют работники таргета. Поэтому стоит посмотреть их код. У вас скорее всего возникнет вопрос “А как узнать их профиля?”. А тут все проще, чем могло бы показаться. В некоторых компаниях есть свои официальные GitHub аккаунты
Не удалось прогрузить медиа

И зачастую на таких аккаунтах мы можем увидеть профили работников во вкладке People
Не удалось прогрузить медиа

Так был найден один сильный проеб у самого hackerone =) Один ресерчер наткнулся на несколько GitHub-профилей, которые принадлежали triage-командам HackerOne. В них нашлось более 40 публичных репозиториев с PoC-скриптами и workflow-файлами. Внутри — готовые эксплойты для IDOR, утечек access-token и даже RCE в продуктах, полные текста нераскрытых отчетов
После обнаружения такого глупого проеба Hackerone сперва отрицали что эта инфа валид, но ресерчер доказал обратное. В итоге занизили импакт и выплатили немного. Кому интересно об этом инциденте, можете проситать тут - https://eh.su/reports/128

   4. Trufflehog
Я всегда комбинирую его с репозиториями разработчиков таргета. Для этого я использую команду
trufflehog github --repo=<ссылка на репозиторий>  --token=<ваш github токен> --issue-comments --pr-comments --results=verified,unknown --json | jq
С ее помощью можно охватить ВСЁ (код + обсуждения), отфильтрует низко-достоверные срабатывания и даст структурированный вывод для быстрого разбора.
Не удалось прогрузить медиа

Все секреты какие были найдены не спешим сдавать в репорт, проверяем их на валидность. Вы можете протестить работу инструмента на  https://github.com/trufflesecurity/test_keys
   5. GitLekas
На форуме уже есть информация об этом инструменте, тут я должен отдать должный респект юзеру @leax и его статье https://forum.LIMB.cc/threads/797/. Но GitLeaks это больше как локальный инструмент, он не подойдет для массового поиска. Для его работы вам нужно вручную клонировать репозиторий и сканировать с его помощью
Не удалось прогрузить медиа

Так что если вы разработчик, обратите на него внимание, он вам точно пригодиться.
   6. GitGraber
GitGraber - это один из немногих инструментов, которые созданы для наших целей
Один из главных его преимуществ в том, что все находки он кидает нам в телеграм/discord. Для того чтобы его запустить, нам надо заполнить файл config.py
Не удалось прогрузить медиа

Также не забываем про новый синтаксис, поэтому содержимое filename_keywords.txt меняем на
Code:
path:.env
path:.sql
path:.yml
path:.yaml
path:.json
path:.ini
path:.xml
path:.properties
path:.cfg
path:.pem
path:.key
path:.crt
path:.cert
path:.p12
path:.der
path:.dump
path:.db
path:.sqlite
path:.log
path:.bak
path:.backup
path:.zip
path:.tar
path:.gz
path:config.yaml
path:config.json
path:credentials
path:database.yml
path:settings.py
language:JSON
path:api_keys.json
path:db.sql
path:database.ini
path:db_connection.py
path:database.json
path:db-config
path:docker-compose.yml
path:ftp-config
path:nginx.conf
path:config.php
path:.gitconfig
path:id_rsa
path:id_dsa
path:private_key.pem
path:server.key
path:cert.pem
language:JavaScript
extension:py
path:server.xml
path:web.config
path:apache.conf
path:hosts
filename:aws_credentials.json
path:oauth.json
path:secrets.json
path:slack_token.json
language:Python

Чем больше апи ключей, тем лучше. Поэтому создаем как можно больше аккаунтов. Чем больше добавлено апи ключей в конфиг, тем больше потоков мы ставим.
Запускаем скрипт python3 gitGraber.py -tg -q gov.uk -t 2
Не удалось прогрузить медиа

Не удалось прогрузить медиа

После того как он завершит свою работу, скорее всего будет куча результатов. Но не спешите радоваться, большинство из них False Positive. Поэтому все находки перепроверяем вручную

Что я нашел
Я немного покрафтил дорков, и вот что мне удалось поймать без особых напрягов
Не удалось прогрузить медиа

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

Данные от адмиинки какого-то старого и всеми забытого сайта 
Не удалось прогрузить медиа

База данных какого-то .in сайта, какую выложили вчера
Не удалось прогрузить медиа

На удивление список почт оказался валидным. Пароли не расшифровывал, не в моих интересах. Кому интересно, пишите в лс - скину 
Не удалось прогрузить медиа

Можно находить кучу админ панелей и тестить их на всякие обходы через sql, ldap injection. Интересная практика

Вообщем вы поняли, тут можно найти все. От г*ндона до батона. Все только зависит от знаний построения запросов и фантазии. А как из этого заработать, думать уже вам. Всем удачи
👍81 ❤️19 😁24 😮14 🤔14 💯8
ОтветYmbMember

Дополню. Только что под руки попался сервис https://securitytoolkits.com/tools/api-key-tester . Если вы нашли какой-то API Key , можете его проверить на валидность через него. Удобно

в этом сервисе затестил, считай что залил туда данные, считай что пропало
👍2
вот нормальная вещь для тестирования некоторых апи, уберите расширение txt поменяйте на расширение .sh или просто оставьте одно название, потому что там прописан шебанг. а так у каждого создателя апи есть доки сайты где прописано как юзать их апи, разными языками программирования, или проще всего утилитой curl
👍3
Годно

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.