Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Новое яркое приключение в волшебной стране пасьянса Эмерлэнде!

Эмерланд пасьянс

Карточные, Головоломки, Пазлы

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
MarketerTLT
MarketerTLT
9 часов назад

Киберброня под ударом: бизнес в зоне турбулентности⁠⁠

Киберброня под ударом: бизнес в зоне турбулентности Бизнес, Информационная безопасность, Пентест

Исследование "МегаФона" выявило, что 96% компаний уязвимы для кибератак, причём у 60% обнаружены критические бреши, способные парализовать работу и привести к утечке конфиденциальных данных. Лишь 4% организаций могут похвастаться надёжной защитой, что подчёркивает масштаб проблемы. Спрос на пентесты взлетел на 48%, а количество расследований киберинцидентов удвоилось, что говорит о растущей обеспокоенности бизнеса.

Уязвимости на каждом шагу: от веб-приложений до энергетической инфраструктуры

Типичные слабые места: ошибки в авторизации, уязвимости веб-приложений и некорректные настройки сетевых сервисов. Критические уязвимости позволяют злоумышленникам захватывать доменные контроллеры и получать полный контроль над IT-инфраструктурой. Наиболее уязвимыми оказались энергетика, IT и промышленность (60% случаев), а также банки и финансовые организации (20%).

Пентест – уже не просто тест, а необходимость

Проверка на проникновение превратилась в критически важный инструмент для бизнеса. Спрос на комплаенс-аудиты вырос на 75%, что указывает на стремление компаний соответствовать требованиям регуляторов. По оценкам "МегаФона", рынок пентестов растёт беспрецедентными темпами, и к концу года объём тестирований удвоится.

Киберустойчивость – роскошь, доступная немногим

Только 32% компаний демонстрируют высокий уровень защиты от кибератак, 23% находятся в "средней зоне", а 45% остаются чрезвычайно уязвимыми. Наталья Талдыкина из "МегаФона" подчеркивает, что пентесты – это лишь первый шаг к созданию комплексной системы киберзащиты, необходимой для выживания в условиях растущей киберпреступности. Киберустойчивость перестала быть формальностью и превращается в элемент корпоративной стратегии наряду с аудитом и проверкой на соответствие требованиям регуляторов.

А еще больше интересной информации о маркетинге и рынках можно узнать здесь.

Показать полностью 1
[моё] Бизнес Информационная безопасность Пентест
1
0
Seberd.ITBase
Seberd.ITBase
3 месяца назад

Offensive и Defensive Security — два подхода к безопасности, которые нужно знать⁠⁠

🟥 Offensive и Defensive Security — два подхода к безопасности, которые нужно знать

В инфобезе существуют два основных подхода — offensive и defensive. Они не конкурируют, а дополняют друг друга.

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

Как думаете сколько у вас времени на отражение атаки?

15 минут, час, сутки, неделя? Что за это время успеет сделать хакер?

Малые компании замечают атаку в среднем через 50–150 дней для фишинга или утечек данных, для шифровальщика через 1–30 дней, так как эффект заметен быстрее.

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

Offensive Security (Red Team) попытка войти в систему глазами злоумышленника. Здесь не важна идеальная настройка, а важен реальный результат.

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

Defensive Security (Blue Team) отвечает за эшелонированную защиту. Контроль доступа, мониторинг, реагирование на угрозы.

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

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

И чем дольше времени хакер думает, чем больше эшелонов защиты проходит, тем больше времени на обнаружение и предотвращение атаки.

Не зная мотивацию злоумышленника, вполне реалистичное развитие событий. Буква "П" - психология.

#инфобез #кибербезопасность #offensecurity #defensesecurity #пентест #редтим #itбезопасность #уязвимости

Показать полностью
Кросспостинг Pikabu Publish Bot Информационная безопасность Пентест Уязвимость Текст
0
DELETED
8 месяцев назад

Создал приложение новое. Сканер по диапазону айпи адресов. KPortScan 3.0 Аля YobaParser⁠⁠

Данное приложение работает как на виндовс. Замена KPortScan 3.0 :-)

Приватное чудо. Со встроенным браузером.

Показать полностью
[моё] Хакеры Пентест Уязвимость Windows Android Видео YouTube
3
0
VitaminKas
VitaminKas
11 месяцев назад

Фальшивая точка доступа с помощью WiFiPumpkin3⁠⁠

Фальшивая точка доступа с помощью WiFiPumpkin3 Хакеры, Пентест, Взлом, Информационная безопасность, Социальная инженерия, Фишинг

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

Недавно его добавили в последнюю версию NetHunter. Теперь можно использовать его прямо со смартфона Android.

Источник

Показать полностью
[моё] Хакеры Пентест Взлом Информационная безопасность Социальная инженерия Фишинг
4
5
VitaminKas
VitaminKas
11 месяцев назад

Ищем по SMB шарам в локальной сети⁠⁠

Ищем по SMB шарам в локальной сети Хакеры, Пентест, Smb, Взлом, Информационная безопасность, Telegram (ссылка)

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

Репозиторий

Источник

Показать полностью
Хакеры Пентест Smb Взлом Информационная безопасность Telegram (ссылка)
0
0
DELETED
1 год назад

Osint инструмент sn0int⁠⁠

Osint инструмент sn0int Telegram (ссылка), Информационная безопасность, IT, Пентест, Linux, Osint

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

Помимо прочего, sn0int в настоящее время может:

Собирать поддомены из журналов прозрачности сертификатов и пассивного DNS.

Массовое разрешение собранных поддоменов и сканирование служб http или https.

Обогатить IP-адреса информацией asn и geoip.

Собирать электронные письма с серверов ключей pgp и whois.

Обнаруживать скомпрометированные логины при нарушениях

Находит чьи-либо профили в Интернете

Перечисляет локальные сети с помощью уникальных методов, таких как пассивный ARP.

Сбор информации о номерах телефонов

Сбор активность и изображения из профилей социальных сетей.

Базовая обработка изображений

sn0int во многом вдохновлен recon-ng и maltego, но остается более гибким. и имеет полностью открытый исходный код.

ссылка на репозиторий

Показать полностью 1
[моё] Telegram (ссылка) Информационная безопасность IT Пентест Linux Osint
13
PENTEST.DNA
PENTEST.DNA
1 год назад

Написание DNS-клиентов⁠⁠

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Прежде чем начать знакомство с более сложными программами, рассмотрим ряд опций, доступных для клиентских операций. Встроенный в Go пакет net предлагает обширную функциональность и поддерживает большинство, если не все типы записей. Преимущество этого пакета — в простоте его API. Например, LookupAddr(addr string) возвращает список имен хостов для заданного IP-адреса. Недостаток же его заключается в невозможности указывать целевой сервер. Вместо этого пакет использует настроенный в операционной системе механизм распознавания. К недостаткам можно отнести также отсутствие возможности выполнения углубленного анализа результатов.

Для обхода этих недочетов мы задействуем отличный сторонний пакет Go DNS, написанный Миком Гибеном (Miek Gieben). Предпочесть этот DNS-пакет всем прочим стоит из-за его высокой модульности и грамотно написанного и протестированного кода. Вот команда для его установки:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

$ go get github.com/miekg/dns

Установив пакет, вы будете готовы к проработке последующих примеров кода. Начнем с выполнения поиска А-записей для получения IP-адресов из имен хостов.


Извлечение А-записей:

Сперва познакомимся с поиском для полностью уточненного имени домена (fully qualified domain name, FQDN), которое указывает точное расположение хоста в иерархии DNS. Затем попробуем интерпретировать это FQDN в IP-адрес с помощью DNS-записи А. Эта запись связывает имя домена с IP-адресом. (Все листинги кода находятся в корневом каталоге /exist репозитория GitHub https://github.com/blackhat-go/bhg/.)

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Код на языке Golang

Сначала создается msg , после чего идет вызов fqdn(string) для преобразования этого домена в FQDN, которым можно обменяться с DNS-сервером . Далее нужно изменить внутреннее состояние Msg на вызов SetQuestion(string, uint16)

с помощью значения TypeA, указывающего, что нужно искать А-запись. (В пакете она определена как const. Другие поддерживаемые значения можно найти в документации.) В завершение мы помещаем вызов Exchange(*Msg, string) , чтобы отправить сообщение на предоставленный адрес сервера, в данном случае являющегося DNS-сервером, обслуживаемым Google.

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

Перед выполнением программы которая написана выше запустите анализатор пакетов, например Wireshark или tcpdump, чтобы просмотреть трафик. Вот пример возможного использования tcpdump на хосте Linux:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

$ sudo tcpdump -i eth0 -n udp port 53

В отдельном окне терминала скомпилируйте и выполните программу:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

$ go run main.go

После выполнения кода в выходных данных перехвата пакетов должны отобразиться подключение к 8.8.8.8 через UDP 53, а также детали DNS-протокола:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Две из получаемых при перехвате пакетов строчек нуждаются в дополнительном пояснении. Сначала запрос отправляется с 192.168.7.51 к 8.8.8.8 с помощью UDP 53, при этом происходит запрос А-записи. В ответе от DNS-сервера Google 8.8.8.8 содержится интерпретированный из имени домена IP-адрес 104.131.56.170.

С помощью анализатора пакетов можно преобразовать имя домена stacktitan.com в IP-адрес. Теперь посмотрим, как извлечь эту информацию, используя Go.


Отработка ответов от структуры Msg:


В качестве значения Exchange(*Msg, string) возвращает (*Msg, error). Возврат типа error имеет смысл и является стандартным для идиом Go, но почему в ответе приходит также изначально отправленная *Msg? Чтобы это понять, нужно взглянуть на определение этой struct в исходном коде:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Код на языке Golang

Как видите, Msg struct содержит как вопросы (question), так и ответы (answer). Это позволяет объединять все DNS-вопросы и ответы на них в единую унифицированную структуру. Тип Msg располагает различными методами, упрощающими работу с данными. Например, срез Question изменяется с помощью метода setQuestion(). Это срез можно изменять напрямую, используя append(), и получать тот же результат. Срез Answer содержит ответ на запросы и имеет тип RR. Ниже будет показано, как эти ответы обрабатывать.

Обработка DNS-ответов:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Пример начинается с сохранения возвращенных от Exchange значений и их проверки на наличие ошибок. Если ошибка обнаружена, вызывается panic() для остановки программы. Функция panic() позволяет быстро просмотреть трассировку стека и определить место возникновения ошибки. Далее проверяется длина среза Answer. Если она меньше 1, это означает, что записей нет, и происходит возврат — бывают случаи, когда имя домена не может быть интерпретировано.

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

Сначала выполняем перебор ответов. Далее применяем в ответе утверждение типа, чтобы гарантировать работу с типом *dns.A. При выполнении этого действия можно извлечь два значения: данные в виде утвержденного типа и bool, отражающее успешность утверждения. После проверки успешности утверждения происходит вывод IP, сохраненного в a.A. Несмотря на тип net.IP, он реализует метод String(), поэтому его можно легко вывести на экран.

Поработайте с этим кодом, изменяя DNS-запрос и обмен (exchange) для поиска дополнительных записей. Утверждение типа может оказаться для вас незнакомым, но по своему принципу оно аналогично приведению типов в других языках.


Перечисление поддоменов:


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

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

Сначала нужно создать в GOPATH каталог под названием subdomain_guesser, а затем файл main.go. После этого в начале создания нового инструмента необходимо решить, какие аргументы эта программа будет получать. В данном случае это будет несколько аргументов, включая целевой домен, имя файла, содержащего поддомены для подбора, используемый DNS-сервер, а также количество запускаемых воркеров. В Go для парсинга опций командной строки есть полезный пакет flag, который мы будем применять для обработки аргументов командной строки. Несмотря на то что мы используем этот пакет не во всех примерах кода, в данном случае он служит для демонстрации более надежного и изящного парсинга аргументов. Код этого процесса будет приведен ниже.

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Создание программы подбора поддоменов на языке Golang

В начале строка кода, объявляющая переменную flDomain, получает аргумент String и объявляет пустое строковое значение для того, что будет парситься как опция domain. Следующая связанная строка — это объявление переменной flWorkerCount. Здесь в качестве опции командной строки c нужно предоставить значение Integer. В данном случае мы устанавливаем 100 воркеров. Но это значение можно счесть консервативным, так что в процессе тестирования смело экспериментируйте с увеличением их числа. В завершение вызов flag.Parse() заполняет переменные, задействуя предоставленный пользователем ввод.


ПРИМЕЧАНИЕ:


Вы могли обратить внимание на то, что этот пример идет вразрез с правилами Unix в том, что определяет необязательные аргументы, которые на деле являются обязательными. Можете свободно использовать здесь os.Args. Просто нам быстрее и удобнее поручить всю работу пакету flag.

При сборке данной программы должна возникнуть ошибка, указывающая на неиспользованные переменные. Добавьте приведенный далее код сразу после вызова flag.Parse(). Это дополнение выводит в stdout переменные наряду с кодом,
гарантируя передачу пользователем -domain и -wordlist:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Чтобы ваш инструмент сообщал, какие имена оказались интерпретируемыми, указывая при этом соответствующие им IP-адреса, нужно создать для хранения этой информации тип struct. Определите его над функцией main():

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Для этого инструмента вы будете запрашивать два основных типа записей — А и CNAME. Каждый запрос будет выполняться в отдельной функции. Стоит создавать эти функции максимально небольшими и поручать каждой выполнение только одной задачи. Такой стиль разработки позволит в дальнейшем писать менее объемные тесты.


Запрос записей A и CNAME:


Для выполнения запросов мы создадим две функции: одну для А-записей, вторую для записей CNAME. Они обе будут получать FQDN в качестве первого аргумента и адрес DNS-сервера в качестве второго. Каждая из них должна возвращать срез строк и ошибку. Добавьте эти функции в код, который начали определять, расположив вне области main():

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Этот код должен показаться вам знакомым, так как он практически идентичен коду, который мы писали в самом начале главы. Первая функция, lookupA, возвращает список IP-адресов, а lookupCNAME возвращает список имен хостов.

Записи CNAME (канонические имена) сопоставляют одно FQDN с другим, которое служит псевдонимом для первого. Предположим, что владелец организации example.com хочет разместить WordPress-сайт с помощью сервиса хостинга WordPress. У этого сервиса могут быть сотни IP-адресов для балансировки всех пользовательских сайтов, в связи с чем предоставить IP для отдельного сайта просто невозможно. Вместо этого данный хостинг может предоставить каноническое имя (CNAME), на которое и будет ссылаться example.com. В итоге адрес www.example.com получит CNAME, указывающее на somewhere.hostingcompany.org, которое, в свою очередь, будет иметь А-запись, указывающую на IP-адрес. Это позволит владельцу example.com разместить свой сайт на сервере, для которого у него нет IP-данных.

Зачастую это означает, что вам нужно проследить целый хвост из канонических имен, чтобы в итоге добраться до действительной А-записи. Мы говорим хвост, потому что из подобных имен может выстраиваться бесконечная цепочка. Добавьте приведенный далее код функции в область за пределами функции main(), чтобы понаблюдать, как использовать череду CNAMES для нахождения А-записи:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Сначала определяется срез для хранения результатов. Далее создается копия FQDN, переданного в качестве первого аргумента. В итоге вы не только не теряете исходный угаданный FQDN, но и можете задействовать его в первой попытке запроса. Начав бесконечный цикл, мы пробуем получить CNAME для этого FQDN. В случае отсутствия ошибок и возвращения не менее одного CNAME устанавливаем cfqdn равным этому возвращенному CNAME, используя continue для возврата к началу цикла. Данный процесс позволяет проследить череду CNAME до возникновения сбоя. Последний будет означать, что конец цепочки достигнут и можно искать А-записи. Но если возникнет ошибка, означающая, что при поиске записи возникли проблемы, то выход из цикла произойдет раньше. В случае обнаружения действительных А-записей каждый возвращенный IP-адрес добавляется в срез результатов, а цикл прерывается. В завершение results возвращается вызывающему.

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


Переход к воркер-функции:


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

Продолжим расширять код Создание программы подбора поддоменов. Сначала создадим функцию worker(), разместив ее вне области функции main(). Она будет получать три аргумента каналов: канал для воркера, чтобы он сигнализировал о своем закрытии, канал доменов, в которых нужно получать работу, и канал для отправки результатов. Этой функции потребуется заключительный строковый аргумент для указания используемого DNS-сервера. Далее приведен пример кода для функции worker():

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Прежде чем вводить функцию worker(), определим тип empty для отслеживания завершения выполнения воркера. Это будет структура без полей. Мы задействуем пустую struct, так как она имеет размер 0 байт и практически не создаст нагрузку при использовании. Далее в функции worker() происходит перебор канала доменов, используемый для передачи FQDN. После получения ответа от функции lookup() и проверки наличия не менее одного результата мы отправляем его в канал gather, который собирает все результаты обратно в main(). После того как канал закрывается и цикл совершает выход, структура empty отправляет в канал tracker сигнал вызывающему о завершении всей работы. Отправка пустой struct в канал отслеживания — это важный последний шаг. Если этого не сделать, возникнет состояние гонки, так как вызывающий компонент может выйти до получения каналом gather результатов.

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

Определите переменные, которые будут содержать результаты и каналы, передаваемые в worker(), после чего добавьте в main() следующий код:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Создайте канал fqdns как буферизованный на основе предоставленного пользователем количества воркеров. Это позволит воркерам запускаться быстрее, поскольку канал сможет вместить больше одного сообщения до блокировки отправителя.


Создание сканера с помощью bufio:


Далее откройте файл, предоставленный пользователем в качестве списка слов, и создайте в нем новый scanner с помощью пакета bufio. Добавьте в main() код

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Если возвращаемая ошибка не равна nil, используется встроенная функция panic(). При написании пакета или программы для применения другими людьми следует постараться представить эту информацию более ясно.

Мы будем применять новый scanner для захвата строки текста из переданного списка слов и создания FQDN путем совмещения этого текста с предоставленным пользователем доменом. Результат будет отправляться в канал fqdns. Но сначала нужно запустить воркеры, так как порядок важен. Если отправить работу в канал fqdns, не запустив их, этот буферизованный канал в итоге заполнится и функции-производители будут заблокированы. В main() нужно добавить приведенный далее код, чья задача — запускать горутины воркеров, читать вводный файл и отправлять работу в канал fqdns.

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Создание воркеров с помощью этого паттерна похоже на то, что мы уже делали при построении многопоточного сканера портов: задействовали цикл for до момента достижения числа, переданного пользователем. Для захвата каждой строки в цикле используется scanner.Scan(). Этот цикл заканчивается, когда в файле не остается строк для считывания. Для получения строкового представления текста из отсканированной строки мы применяем scanner.Text().

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

Сбор и отображение результатов

Проработку последней части мы начнем с запуска анонимной горутины, которая будет собирать результаты воркеров. Добавьте в main() следующее:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Перебирая канал gather, мы добавляем полученные результаты в срез results. Поскольку мы добавляем срез в другой срез, нужно использовать синтаксис … . После закрытия канала gather и завершения перебора, как и прежде, происходит отправка пустой struct в канал отслеживания. Это делается для предотвращения состояния гонки на случай, если append() не завершится к моменту итогового предоставления результатов пользователю.

Остается только закрыть каналы и представить результаты. Для этого добавьте следующий код в конец main():

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

Первым можно закрыть канал fqdns, так как мы уже отправили по нему всю работу. Далее нужно выполнить получение результатов в канале tracker по одному разу для каждого воркера, что позволит им обозначить свое полное завершение. После этого можно закрыть канал gather, потому что результатов для получения не остается. В завершение нужно выполнить еще одно получение результатов на канале tracker, чтобы позволить горутине окончательно завершиться.

Эти результаты пользователю еще не представлены. Нужно это исправить. При желании можно просто перебрать срез results и вывести поля Hostname и IPAddress, используя fmt.Printf(). Тем не менее мы предпочитаем задействовать для представления данных один из нескольких прекрасных пакетов Go, а именно tabwriter. Он позволяет выводить данные в красивых ровных столбцах, разбитых на вкладки. Для его применения добавьте в конец main() следующий код:

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)


Снизу показана вся программа в сборе:

Package main

import (

"bufio"

"errors"

"flag"

"fmt"

"os"

"text/tabwriter"

"github.com/miekg/dns"

)

func lookupA(fqdn, serverAddr string) ([]string, error) {

var m dns.Msg

var ips []string

m.SetQuestion(dns.Fqdn(fqdn), dns.TypeA)

in, err := dns.Exchange(&m, serverAddr)

if err != nil {

return ips, err

}

if len(in.Answer) < 1 {

return ips, errors.New("no answer")

}

for _, answer := range in.Answer {

if a, ok := answer.(*dns.A); ok {

ips = append(ips, a.A.String())

}

}

return ips, nil

}

func lookupCNAME(fqdn, serverAddr string) ([]string, error) {

var m dns.Msg

var fqdns []string

m.SetQuestion(dns.Fqdn(fqdn), dns.TypeCNAME)

in, err := dns.Exchange(&m, serverAddr)

if err != nil {

return fqdns, err

}

if len(in.Answer) < 1 {

return fqdns, errors.New("no answer")

}

for _, answer := range in.Answer {

if c, ok := answer.(*dns.CNAME); ok {

fqdns = append(fqdns, c.Target)

}

}

return fqdns, nil

}

func lookup(fqdn, serverAddr string) []result {

var results []result

var cfqdn = fqdn // Не изменяем оригинал

For {

cnames, err := lookupCNAME(cfqdn, serverAddr)

if err == nil && len(cnames) > 0 {

cfqdn = cnames[0]

continue // Нужно обработать следующее CNAME

}

ips, err := lookupA(cfqdn, serverAddr)

if err != nil {

break // Для этого имени хоста нет А-записей

}

for _, ip := range ips {

results = append(results, result{IPAddress: ip, Hostname: fqdn})

}

break // Все результаты обработаны

}

return results

}

func worker(tracker chan empty, fqdns chan string, gather chan []result,

serverAddr string) {

for fqdn := range fqdns {

results := lookup(fqdn, serverAddr)

if len(results) > 0 {

gather <- results

}

}

var e empty

tracker <- e

}

type empty struct{}

type result struct {

IPAddress string

Hostname string

}

func main() {

var (

flDomain = flag.String("domain", "", "The domain to perform

guessing against.")

flWordlist = flag.String("wordlist", "", "The wordlist to use

for guessing.")

flWorkerCount = flag.Int("c", 100, "The amount of workers to use.")

flServerAddr = flag.String("server", "8.8.8.8:53", "The DNS server

to use.")

)

flag.Parse()

if *flDomain == "" || *flWordlist == "" {

fmt.Println("-domain and -wordlist are required")

os.Exit(1)

}

var results []result

fqdns := make(chan string, *flWorkerCount)

gather := make(chan []result)

tracker := make(chan empty)

fh, err := os.Open(*flWordlist)

if err != nil {

panic(err)

}

defer fh.Close()

scanner := bufio.NewScanner(fh)

for I := 0; i < *flWorkerCount; i++ {

go worker(tracker, fqdns, gather, *flServerAddr)

}

go func() {

for r := range gather {

results = append(results, I.)

}

var e empty

tracker <- e

}()

for scanner.Scan() {

fqdns <- fmt.Sprintf"%s.%", scanner.Text(), *flDomain)

}

// Заметьте: здесь можно проверить scanner.Err()

close(fqdns)

for i := 0; i < *flWorkerCount; i++ {

<-tracker

}

close(gather)

<-tracker

w := tabwriter.NewWriter(os.Stdout, 0, 8' ', ' ', 0)

for _, r := range results {

fmt.Fprint"(w, "%s\"%s\n", r.Hostname, r.IPAddress)

}

w.Flush()

}


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

Написание DNS-клиентов Хакеры, Программирование, Информационная безопасность, Взлом, Программист, Linux, IT, Google, Golang, Пентест, Длиннопост, Telegram (ссылка)

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

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

ССЫЛКА НА ТЕЛЕГРАМ КАНАЛ АВТОРА

Показать полностью 20
Хакеры Программирование Информационная безопасность Взлом Программист Linux IT Google Golang Пентест Длиннопост Telegram (ссылка)
1
CodeCrack
CodeCrack
1 год назад

Базовое руководство по использованию Nmap⁠⁠

Базовое руководство по использованию Nmap IT, Пентест, Kali linux, Telegram (ссылка)

Установка: Если Nmap не установлен, вы можете установить его с помощью менеджера пакетов вашего дистрибутива Linux. Например, в Ubuntu вы можете использовать команду: sudo apt-get install nmap.

Базовое сканирование: Чтобы выполнить базовое сканирование цели, используйте следующую команду: nmap [target]. Замените [target] на IP-адрес или имя хоста цели, которую вы хотите сканировать.

Сканировать диапазон IP-адресов. Вы можете сканировать диапазон IP-адресов, используя указанный диапазон. Например, nmap 192.168.1.1-100 будет сканировать все IP-адреса от 192.168.1.1 до 192.168.1.100.

Сканировать определенные порты. Чтобы сканировать определенные порты, используйте параметр «-p», за которым следует номер порта или диапазон портов. Например, nmap -p 80,443 192.168.1.1.

Агрессивное сканирование. Для более агрессивного сканирования с дополнительной информацией используйте параметр -A. Например, nmap -A 192.168.1.1.

Вывод в файл: Чтобы сохранить результаты в файл, перенаправьте вывод( например, nmap 192.168.1.1 > scan_results.txt.)

Сканирование операционных систем и версий. Используйте параметр -O, чтобы включить обнаружение ОС, и -sV, чтобы определить версии службы. Например, nmap -O -sV 192.168.1.1.

Сканировать порты UDP: Для сканирования портов UDP используйте опцию -sU. Например, nmap -sU 192.168.1.1.

Сканирование определенных версий службы. Используйте параметр --version-intensity, чтобы указать интенсивность обнаружения версии службы. Например, nmap --version-intensity 5 192.168.1.1.

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

ссылка на телеграмм канал автора

Показать полностью
[моё] IT Пентест Kali linux Telegram (ссылка)
54
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии