статья – пишем простой брутфорс на php / часть 2 | форум информационной безопасности –

Bundling on windows 5.2.3790 x86

Install python-2.7.9.msi from Python.
Install pywin32-219.win32-py2.7.exe from PyWin32.
Install vcredist_x86.exe from Microsoft.
Install Git-1.9.5.exe from Git (and select “Use Git from Windows Command Prompt” during install).
Add c:Python27;c:Python27Scripts to your PATH.

The resulting stand-alone patator.exe executable was confirmed to run successfully on Windows 2003 (5.2.3790), Windows 7 (6.1.7600), Windows 2008 R2 SP1 (6.1.7601) and Windows 2022 R2 (6.3.9600), and is likely to work fine on other Windows versions.

Refer to #50 for more info.

Captcha

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

Crunch

Словарь с пользователями мы взяли небольшой и записали в него 4 пользователя.

Для составления словаря используется Crunch, как встроенное средство. Инструмент гибкий и может составить словарь по определенной маске. Если есть вероятность того, что пользователь может использовать словарный пароль, то лучше воспользоваться уже готовыми решениями, тем более, что, как показывает практика, самый популярный пароль – 123456.

Генерировать словарь будем на 5 символов по маске. Данный метод подходит для случаев, когда мы имеем представление о структуре пароля пользователя.

crunch 5 5 qwe ASD 1234567890 -t @@,%@ -o /root/wordlist.txt

5 – минимальное и максимальное количество символов;qwe, ASD, 1234567890 – используемые символы;-t – ключ, после которого указывается маска для составления пароля;@ – нижний регистр;, – верхний регистр;% – цифры.

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

Hydra

Как мы уже знаем, при неверной аутентификации возвращается код 200, а при успешной — 302. Воспользуемся этой информацией и выполним команду:

Metasploit

Произведем поиск инструмента для проведения brute-force атаки по SSH:search ssh_login

Задействуем модуль:use auxiliary/scanner/ssh/ssh_login

Metasploit, medusa

В Metasploit используем модуль auxiliary/scanner/ftp/ftp_login

Patator

Учитывая ответы веб-приложения на тестовые запросы, составим команду для запуска Patator:

Requirements

Python libs required:

Install:

python3 -m pip install -r requirements.txt

Usage

Usage example:

Output example:

Arguments:

  -t TARGET, --target TARGET
                        URL
                        
  -T TARGETFILE, --targetfile TARGETFILE
                        File of URL
                        
  -u USERNAME, --username USERNAME
                        Username ("username" or "username:password")
                        
  -U USERNAMESFILE, --usernamesfile USERNAMESFILE
                        File of usernames ("username" or "username:password")
                        
  -p PASSWORD, --password PASSWORD
                        Password
                        
  -P PASSWORDSFILE, --passwordsfile PASSWORDSFILE
                        File of passwords
                        
  -w WORKERS, --workers WORKERS
                        Number of threads (interger between 1 and 100)
                        
  -o ORDER, --order ORDER
                        Targets order ("serie" or "parallel")
                        
  -v, --verbose         Verbose

Usage examples

Tested against vsftpd-3.0.2-9 on CentOS 7.0-1406.

Tested against openssh-server 1:6.0p1-4 deb7u2 on Debian 7.8.

$ http_fuzz url=http://10.0.0.1/pma/index.php method=POST body='pma_username=COMBO00&pma_password=COMBO01&server=1&target=index.php&lang=en&token=' 0=combos.txt before_urls=http://10.0.0.1/pma/index.php accept_cookie=1 follow=1 -x ignore:fgrep='Cannot log in to the MySQL server' -l /tmp/qsdf
11:53:47 patator    INFO - Starting Patator v0.7-beta (http://code.google.com/p/patator/) at 2022-08-31 11:53 EST
11:53:47 patator    INFO -
11:53:47 patator    INFO - code size:clen       time | candidate                          |   num | mesg
11:53:47 patator    INFO - -----------------------------------------------------------------------------
11:53:48 patator    INFO - 200  49585:0        0.150 | root:p@ssw0rd                      |    26 | HTTP/1.1 200 OK
11:53:51 patator    INFO - 200  13215:0        0.351 | root:                              |    72 | HTTP/1.1 200 OK
^C
11:53:54 patator    INFO - Hits/Done/Skip/Fail/Size: 2/198/0/0/3000, Avg: 29 r/s, Time: 0h 0m 6s
11:53:54 patator    INFO - To resume execution, pass --resume 15,15,15,16,15,36,15,16,15,40

Payload #72 was a false positive due to an unexpected error message:

Warning

/! Not adequately tested /!

Wpscan

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

Здесь мы будем использовать WordPress, размещенный на локальном хосте.

Во время перебора можно использовать:

В данном случая был использован файл паролей rockyou.txt, который предоставляется со стандартной Kali Linux и содержит 14 341 564 уникальных пароля.

Брутфорс (brute force) для взлома веб-сайта

Примером таких “брутфорсов” (brute force) могут быть “Brutus AET2”, “WBF.Gold”, “Web Brute Forcer” и прочий отстой. Несмотря на то, что у всех у них есть возможность манипулировать полями в том числе и полями кукишей и возможно для взлома каких то говно-сайтов они и подойдут но для для взлома современных сайтов все эти “брутфорсы” (brute force) просто мусор, потому как они не учитывают “Token” который генерируется отдельно для каждого клиента/браузера и используется совместно с кукишами (COOKIE) на протяжении всей сессии.

Так например выглядит форма авторизации в системе управления контентом (CMS) Joomla:

Двухфакторная аутентификация

Следующий способ защиты от брутфорса – двухфакторная аутентификация или 2FA. Обычно в качестве второго подтверждения используют телефон или почту.

Длина пароля

Оптимальная длина пароля должна составлять 8-16 символов. Важно избегать использования наиболее распространенных паролей и часто их менять.

Как избежать брутфорса?

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

Ограничение попыток входа в систему

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

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

Отключение просмотра каталогов и автоматических обновлений

Еще один способ снизить риск брутфорс атаки для сайта на WordPress.

Плагин брандмауэра wordpress

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

Подбираем пароли с помощью google chrome

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

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

В случае, если мы имеем какой-либо портал, где пользователи – это люди, то бОльшую часть уязвимых слабых паролей можно отнести к одной из 4 групп:

  1. Пароли, входящие в топ самых популярных фраз (такие как «123456», «password», и т.п.).
  2. Пароли, представляющие собой сочетание клавиш – так называемые keyboard-walks пароли (например, «qwerty», «qazwsx», и т.п.).
  3. Пароли – искажённые логины («user123», «user321», и т.п.).
  4. Либо использование в качестве пароля популярных русских слов или имён в «перевёрнутой» раскладке («ljcneg», «fylhtq»).

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

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

  1. По данным сервиса haveibeenpwned.com, на сегодняшний день масштаб всеобщих утечек подбирается к цифре 5 миллиардов (вспомните myspace, linkedin, adobe и т.п). На основе части данных утечек можно выделить топ-1000 наиболее распространенных паролей. Например, так:
    cat antipublic/ exploitin/ | sed -rn ‘s/[^:] :(.)/1/p’ | sort | uniq -c | sort -n -r | head 1000 > top1000.txt*
  2. Чуть больше года назад от создателя инструмента hashcat появилась замечательная утилита kwprocessor. С помощью нее можно сгенерировать все возможные сочетания клавиш под любую раскладку клавиатуры:
    kwp basechars/tiny.base keymaps/en.keymap routes/2-to-10-max-3-direction-changes.route | len.bin 6 100 > keywalks.txt
  3. Получение достаточно большого количества искажений для некоторого имени пользователя проще всего сделать при помощи набора правил утилиты hashcat:
    hashcat -r /usr/share/hashcat/rules/leetspeak.rule logins.txt –stdout > login_mutations.txt
  4. Аналогично первому пункту списка, можно взять за основу словаря масштабные утечки русскоязычных ресурсов.

Собранные наборы паролей в дальнейшем могут быть «скормлены» таким утилитам как hydra, medusa, ncrack или patator, в зависимости от тестируемого сервиса.

В случае, если аутентификация реализована через web, а именно через http-формы (то есть не http-basic/digest аутентификация), то удобнее всего воспользоваться функционалом intruder от burp suite free (Рисунок 1).

image

Рисунок 1 — Bruteforce-атака подручными средствами

В случае с burp нужно внимательно следить за размером ответа: изменение размера ответа можешь означать, что логин или пароль присутствует в системе.

Также при bruteforce-атаках на web возможны сложности (и речь даже не про captcha):

  • Во-первых, при каждой отправке формы может использоваться токен. И после каждой неудачной попытки он может меняться.
  • Во-вторых, нет точного образца ответа сервера в случае, если пароль угадан. Более того, возможны ситуации, когда ответ на правильные и неправильные учётные данные будет идентичен, а в ответе будет просто идти редирект через заголовок Location, где уже в дальнейшем будет ясно об успешности попытки входа.
  • В-третьих, некоторые веб-сервисы при аутентификации не отправляют введённые учётные данные, как они были введены, открытым текстом. Речь про случаи, когда используется client-side хэширования, причем сами хэш-функции могут быть уникальными (не md5, sha-x и т.п.).

Впрочем, для этих сложностей можно предложить решения:

Конечно, эти случаи не так часты. Однако порою, встретив подобную веб-форму, мы лишь вручную вводим туда дефолтные учётные записи и что-то тривиальное типа admin:admin.
Но что если производить брутфорс не на уровне http, а выше, на уровне интерфейса пользователя? Ведь если внедрить в контекст тестируемого веб-приложения javascript-код, который в цикле будет подставлять в форму заданные логин/пароли и отправлять её, то достаточно легко удастся обойти все перечисленные ранее сложности. Ведь по сути, вся работа при этом совершается браузером.

Реализовать это можно с помощью расширения для браузера greasemonkey и собственного javascript-кода, который будет жёстко заточен под разметку данной html-страницы. Но писать каждый раз js-код для каждой новой страницы неудобно. Удобнее всего было бы иметь всё это в виде отдельного расширения, в данном случае – для Google Chrome.

Всё, что потребуется, чтобы воспользоваться www_brute – это открыть какой-либо интересующий сайт и нажать на иконку расширения. Если всё сделано правильно, то появится примерно следующее (Рисунок 2).

image
Рисунок 2 — Добавление новой цели

Чтобы приступить к настройке брутфорса, нужно нажать на единственную кнопку – «плюс».
Вся настройка проста и сводится к двум моментам:

Перед выбором полей для ввода логина и пароля на странице сайта с формой, которую предстоит атаковать, будет внедрён скрипт, который последовательно отловит три нажатия на элементы страницы. Этими элементами должны быть поле username, password и кнопка отправки формы. Перечисленные элементы должны быть выбраны именно в данной последовательности (Рисунок 3).

image
Рисунок 3 — Выбор полей для ввода

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

Тут очень важно отметить, что элементы ввода запоминаются по html-атрибутам и их значениям. Поэтому, если после отправки формы сайт «нарисует» другую форму, то при следующей попытке подбора поле ввода не будет найдено. Хотя логика поиска полей ввода допускает не полное соответствие атрибутов, всё же данную настройку лучше производить уже после хотя бы одной неудачной отправки учётных данных. Пример – facebook.com (Рисунки 4 и 5).

image
Рисунок 4 — Форма до первой попытки входа

image
Рисунок 5 — Форма после первой попытки входа

Словари поддерживаются для имен пользователей, паролей и фиксированных пар логин: пароль (combo) (Рисунок 6).

image
Рисунок 6 — Словари для bruteforce-атаки

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

length(combo) length(passwords) * length(users)

По окончании всех настроек можно начинать:

image
Рисунок 7 — Bruteforce-атака в действии

Значения username и password в popup-окне расширения — это следующие кандидаты на ввод.
Логика работы достаточно проста и заключается в переборе всех заданных сочетаний логин/пароль, а так же пар логин: пароль в цикле до тех пор пока:

image
Рисунок 8 — Процесс bruteforce-атаки на множество целей

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

Перебор пароля можно легко «распараллелить». Для этого достаточно просто открыть ещё одну или несколько вкладок на том же домене.

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

Конечно данный способ никак не обходит такую вещь, как captcha, так что брутфорс таких вещей, как gmail.com и им подобных, продлится не долго. Однако в сочетании с proxy/vpn можно что-нибудь придумать…

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

Плагин для chrome, а так же словарь для топ-1000 паролей доступен на тут и в webstore.

Подключить сdn сервис

CDN (Content Delivery Network) — сеть доставки и дистрибуции контента, более подробно о которой можно узнать здесь. Для нас главное, что CDN обеспечивают надежную защиту от брутфорса.

Топ 6 CDN c бесплатными решениями для WordPress:

Практика.

Итак, приступим. Нам необходимо запустить написанный нами в прошлом уроке сервер (если вы ещё не читали этот урок, то обязательно прочтите), полный код сервера можно найти на gihube канала (ссылка).

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

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

Сложность пароля

Надежный пароль должен состоять из:

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

Статья – пишем простой брутфорс на php / часть 2

Пишем простой брутфорс на PHP / Часть 2

Первая часть

тут

.

И так, продолжу с того, что еще раз покажу и прокоментирую файлик options.ini (он немного изменен после 1-ой части).

Пошли по порядку сверху вниз.

url – ссылка на страницу, которая принимает параметры авторизации, её можно посмотреть в свойстве action тега form ‘

http://joomla/administrator/index.php’;

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

wordlist – собственно файл с пароля, должен лежать возле файла с логинами

more_info – эта функция показывает дополнительную информацию, такую как url, сколько логинов и паролей загружено, сколько будет попыток авторизации, версию PHP и т.п., если 0 то показано не будет

error_message – это то сообщение, которое дает нам знать, что пара логин/пароль не верная, вынес сюда чтоб удобней было менять если другой язык

threads – кодичество потоков, пока не реализовано, хотя есть в планах

cookie – этот файл трогать не нужно, он создается автоматически в папке tmp и чиститься при новом запуске

token – этот файл также как и cookie трогать не нужно, это токен, который генерится на странице и подставляется на момент перебора пароля

timeout – при медленном интернете или слабом сервере этот параметр может пригодится

found – сюда будет сохранятся найденная пара логин/пароль, файл трогать не нужно, содается автоматически в корне

errorfile – это имя файла, в которое будут записыватся неудачные попытки авторизации (при ошибках HTTP), также трогать не нужно, это больше для отладки

useragents – также пока не реализовано, предположительно будет массив юзерагентов.

Затем достаем настройки из файла

PHP:

// INITIALIZE
$data = file_exists('options.ini') ? parse_ini_file("options.ini") : null;
if($data === null) exit('Configuration file is not founded :(. Create options.ini in ' . __DIR__);
define('URL', $data['url']);
define('COOKIE', __DIR__ . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . $data['cookie']);
define('TOKEN', __DIR__ . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . $data['token']);
define('TIMEOUT', $data['timeout']);
$logins = file_exists($data['logins']) ? file($data['logins'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : 'File logins not exists';
$passwords = file_exists($data['wordlist']) ? file($data['wordlist'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : 'File wordlist not exists';
if($logins == 'File login not exists') exit(PHP_EOL . $logins);
if($passwords == 'File wordlist not exists') exit(PHP_EOL . $passwords);
define('NUMBER_OF_LOGINS', count($logins));
define('NUMBER_OF_PASSWORDS', count($passwords));
define('POSSIBLES', NUMBER_OF_LOGINS * NUMBER_OF_PASSWORDS);
$userAgents = file($data['useragents'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // TODO
define('NUMBER_OF_USERAGENTS', count($userAgents));
define('FOUNDFILE', $data['found']);
define('ERRORFILE', $data['errorfile']);
define('ERROR_MESSAGE', $data['error_message']);

Создадим для удобства функцию, которая будет выводит дополнительную информацию о текущем запуске, если поставить в опции more_info = 0 тогда отрабатывать она не будет

При запуске получим такое представление

Приступим к форме.

Посмотрим как выглядит форма авторизации (Joomla 1.15)

Нас интересуют следующие поля, login, passwd, option, task и последнее поле с длинным именем (9bc3a5cd809ccf1ac899dadc1224d67f).

Как раз это имя и есть токен, который генерируется при загрузке страницы.

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

Подключим библиотеку

Simple HTML DOM

и положим ее в папку shdp в корне

Далее создадим следующую функцию, которая будет брать токен с формы, куки и сохранять их в файлы, имена которых указаны в options.ini

PHP:

function getTempData() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE);
    curl_setopt($ch, CURLOPT_URL, URL);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, TIMEOUT);
    $out = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if($http_code === 200) {
        $html = new simple_html_dom();
        $html->load($out);
        $elem = $html->find("input[type=hidden]");
        $exp_elem = explode(""", $elem[2]);
        $token = $exp_elem[3];
        file_put_contents(TOKEN, $token);
        return true;
    } else if($http_code === 0) {
        exit('Error in get temp data function, http code is ' . $http_code);
    }
    exit('Error in get temp data');
}

На данный момент пока всё, сейчас работаю над тем как организовать цикл перебора.

По окончанию серии статей, исходники выложу.

Буду благодарен за конструктивную критику более опытных разработчиков.

Спасибо за внимание.

Урок 5. пишем брутфорсер формы авторизации.

Данный урок будет посвящён созданию скрипта для брута формы авторизации. Брутить будем форму авторизации, созданную в сервере, который был разработан на прошлом уроке.

Установить и настроить бэкап плагин

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

Заключение

В заключении подытожим, что на сегодняшний день в сети Интернет нет ни одного свободно распространяемого “брутфорса” (brute force), который мог бы дать желаемый результат в современных условиях защиты сайтов и почтовых серверов!

На сегодняшний день все свободно распространяемые в сети Интернет “брутфорсы” (brute force) – это просто исторический шлак (мусор), а люди пытающиеся ими пользоваться просто глупцы но, не смотря на это многие продолжают тупо публиковать такие “брутфорсы” в сети Интернет и безрезультатно пользоваться ими!

В современных условиях защиты сайтов и почтовых серверов вся многопоточность любых “брутфорсов” (brute force), как ныне существующих так и будущих, сводится на НЕТ! А в “брутфорсах” (brute force) даже с правильно построенной логикой работы следует использовать интеллектуально и индивидуально подобранные словари паролей в каждом отдельно взятом случае и питать надежду на то, что в ближайшие пару лет таки удастся подобрать вожделенный пароль!;)

Похожее:  Идентификация потребителя услуг | Водоканал-сервис

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *