Как написать программу подбирающую пароли

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

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

  • Хостинг с возможностью исходящих соединений;
  • язык PHP;
  • поддержка Curl с отправкой POST;
  • файл с паролями (или словарь);
  • Cron;
  • подключение и парсинг прокси (опционально).

Исследуем форму авторизации

👑 Шифруем файлы и пароли аки Царь с GPG и Pass!

Предположим, что мы определили цель – имеем логин пользователя. Нам требуется узнать, с помощью какого пароля он заходит на сайт. Если мы посмотрим на главную страницу сайта (откроем её исходный код), то увидим, что форма авторизации отсылает данные POST-запроса на страницу с адресом «//www.yaplakal.com/act/Login/CODE/01/». При этом, помимо двух основных полей (логин и пароль) отсылаются еще скрытые поля, но, скажу сразу – они не имеют значения для подбора пароля.

Получаем и обрабатываем страницу

Создадим функцию получения веб-страниц с помощью Curl — get_page:

function get_page($url, $uagent, $us, $pas ) < $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_ENCODING, «»); curl_setopt($ch, CURLOPT_USERAGENT, $uagent); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, «UserName=».$us.»>$addr = «http://www.yaplakal.com/act/Login/CODE/01/»; $lines = file(‘http://site.com/pass.txt’); $us = «логин»; $uagent =»Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36″; for ($i=0;$i <1000;$i++) < $pas= rtrim(str_replace(«n», «», $lines[$i])); //убираем знак перехода и возможный пробел сначала $result = get_web_page($addr, $uagent, $us, $pas); if (($result[‘errno’] != 0 )||($result[‘http_code’] != 200)) < echo $result[‘errmsg’]; >else < $page = $result[‘content’]; if (substr_count($page, «Неверный пароль»)<1) //проверяем сколько раз встречается строка в странице < echo «Пароль:».$pas; die(); >> >

Здесь все до безобразия просто: читаем файл с паролями в массив и пробуем. 1000 раз. Если в ответ выдается страница, в которой отсутствует фраза «Неверный пароль», то прекращаем работу скрипта и выводим на экран подошедший пароль.

Как создать программу для взлома паролей.

Файл с паролями

Интересный момент: а что это за файл pass.txt? Это файл с паролями. Для брутфорса существуют специальные словари, с помощью которых хакеры подбирают пароли. Зачем они нужны? Дело в том, что действую просто перебором, мы даже в самом маленьком пароле для япа (минимальная длина – 8 символов) получаем 256289062500000000 вариантов.

Многовато, не правда ли?

Словари с паролями можно составить и самостоятельно. Например, в одной своей статье я показывал самые популярные пароли для mail.ru – можно взять их – в файле почти 200 тысяч паролей.

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

Второе затруднение мы можем обойти с помощью прокси. Например, можно брать бесплатные прокси тут . С помощью того же curl просто парсить эту страничку и подставлять полученный ip и порт. Только придется затем немного доработать нашу функцию get_page – добавить пару строк:

curl_setopt ($ch, CURLOPT_PROXY, «202.153.130.214:80»); curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

В первой адрес и порт прокси, а во второй указываем тип.

Однако, бесплатные прокси не панацея – нередко, даже с уже опробованными браузер может выдать вот такое:

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

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

На всех платных хостингах, в том числе и на моем , есть возможность запускать скрипты по расписанию. Зададим, например, выполнение нашего скрипта раз в час:

Сама строка сценария (пример):

/usr/bin/php5.6 /home/u/up/upread.ru/cron.php

Тут «/usr/bin/php5.6» — это интерпретатор, «/home/u/up/»— путь до домашней директории (вам надо будет определить его самостоятельно на своем хостинге), а «upread.ru/cron.php» — это уже непосредственно скрипт, который будет подбирать пароли.

Небольшие доработки

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

Для сайта пациента (яп) параметры на данный момент оказались такими: сайт выдерживает до 1000 запросов со одного ip каждые полчаса. То есть, по 2000 в час или 48 тысяч в сутки. На самом деле это неплохие параметры – обычно защита гораздо строже. Это значит, что наш файл с самыми распространенными паролями от mail.ru проверится полностью меньше, чем за 4 суток.

А если взять файл с 16 миллионами паролей? На это с помощью одного потока уйдет более 300-х суток! Однако, так как это выполняет сервер, то вам то какая разница? Плюс подключить десяток прокси – и через месяц с большой вероятностью у вас будет пароль от нужного аккаунта.

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

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

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

статьи IT, php, curl, пароли, POST-запрос

Бесплатный https и
домен RU в подарок

Источник: upread.ru

Как написать функцию для проверки надежности пароля на Python

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

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

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

  • длина 10 символов и более;
  • должен иметь хотя бы одно число;
  • должен иметь хотя бы одну букву в верхнем регистре;
  • должен иметь хотя бы одну букву в нижнем регистре;
  • пароль может содержать только латинские буквы.

Функция для проверки пароля будет принимать строку и возвращать False или True .

def password ( data : str ) -> bool :

Начало положено! Двигаемся дальше.

Вариант 1.

Первое, что приходит в голову — использовать модуль re встроенной библиотеки модулей. С этого и начну.

Небольшое предостережение для тех, кто не знаком с этим модулем. Имейте терпение и все равно читайте! Дальше будет пример кода без импорта модулей.

Сначала нужно правильно сформулировать шаблон регулярного выражения. Это часто бывает труднее всего сделать. Для совпадений символов верхнего регистра соответствует регулярное выражение ‘[A-Z]’, нижнего регистра — «[a-z]», ну и числа — «[0-9]» или «d». Напомню для тех, кто не помнит. Выражение в квадратных скобках, это квантификатор и означает один символ из диапазона что в скобках, d — сокращенная запись [0-9].

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

def password ( data : str ) -> bool :

Читайте также:
Как записать трек программа

L = ( Len ( data ) > = 10 re . search ( r ‘[az]’ , data ) , re . search ( r ‘[AZ]’ , data ) , re . search ( r ‘d’ , data ) )

return all ( L )

Подробнее о работе функции.

L — кортеж, элементами которого являются:

len (data) > = 10 — выражение: размер входных данных больше или равен 10, логическое значение True или False;

re.search (pattern, string) — метод модуля re, параметрами которого является шаблон регулярного выражения и строка; ищет совпадения в строке с шаблоном регулярного выражения; возвращает объект или ничего.

all(L) — функция all, аргументом которой является кортеж L, вернет True, когда каждый элемент аргумента будет иметь логическое True, иначе — False.

Тестирование.

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

if __name__ == ‘__main__’ :
test = ( ( ‘A1213pokl’ , False , ‘A1213pokl’ ) , ( ‘bAse730onE4’ , True , ‘bAse730onE4’ ) ,

( ‘asasasasasasasaas’ , False , ‘asasasasasasasaas’ ) , ( ‘QWERTYqwerty’ , False , ‘QWERTYqwerty’ ) ,

( ‘123456123456’ , False , ‘123456123456’ ) , ( ‘QwErTy911poqqqq’ , True , ‘QwErTy911poqqqq’ ) )
for s , boo , m in test :
assert password ( s ) == boo , m
mprint ( «Функция все тесты прошла успешно!» )

И так, функция все тесты прошла успешно, можно отдыхать. Отдых — это полезно, но и о функции не забываем! Отдыхаем и думаем: как эту функцию можно еще оптимизировать?

def password ( data : str ) -> bool :
return len ( data ) > 9 and all ( re . search ( p , data ) for p in ( ‘[AZ]’ , ‘d’ , » [ az ] ‘ ) )

Опять тесты! Тесты! И еще раз тесты! Тестировать можно и так:Здесь логический оператор and вернет True, если выражения слева и справа от него будут истина, иначе — False. Выражение слева проверит пароль на количество знаков, выражение справа, через знакомую уже функцию all , проверит истинность каждого элемента генератора в круглых скобках.

if __name__ == ‘__main__’ :
assert password ( ‘werQW123’ ) == False , ‘Test 1’
assert password ( ‘WEcv12347’ ) == False , ‘Test 2’
assert password ( ‘123456789’ ) == False , ‘Test 3’
assert password ( ‘AAAAAAaaa’ ) == False , ‘ Test 4’
assert password ( ‘1234ADjkse’ ) == True , ‘Test 5’
print ( ‘Функция все тесты прошла успешно!’ )

Осталось только задокументировать функцию. Теперь модуль будет выглядеть так:

def password ( data : str ) -> bool :
»’Функция для проверки паролей на надежность:
не менее 10 символов, одна или более букв верхнего регистра,
одна или более букв нижнего регистра, одна или более цифр, латинские буквы»’
return len ( data ) > 9 and all ( re . search ( p , data ) for p in ( ‘[A-Z]’ , ‘d’ , ‘[a-z]’ ) )

Вариант 2.

Воспользуюсь простой логикой. В каких случаях функция должна вернуть False ?

  1. Если входные данные содержат только цифры.
  2. Если входные данные содержат только буквы.
  3. Если входные данные в верхнем регистре.
  4. Если входные данные в нижнем регистре.
  5. Если длина входных данных меньше 10.

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

def password ( data ) :
return not ( len ( data ) < 10 or
data . isdigit ( ) or
data . isalpha ( ) or
data . islower ( ) or
data . isupper ( ) )
and data . isalnum ( )

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

Аналогично еще один вариант:

def password ( data ) :
if len ( data ) < 10 :
return False
if data . upper ( ) == data :
return False
if data . lower ( ) == data :
return False
return any ( c . isdigit ( ) for c in data )

Вариант 3.

def password ( data ) :
foo = ( bool ( len ( data ) > 9 ) ,
any ( map ( lambda x : x . isdigit ( ) , data ) ) ,
any ( map ( lambda x : x . islower ( ) , data ) ) ,
any ( map ( lambda x : x . isupper ( ) , data ) ) )
return all ( foo )

В этом варианте логические значения условий пароля хранятся в кортеже на который ссылается переменная foo. Первый элемент foo содержит логическое значение условия длины пароля, все остальные — логические значения (функция any) объекта map, который в свою очередь содержит логические значения проверки каждого элемента data на принадлежность к цифрам, буквам нижнего или верхнего регистра.

Все это делает функция map, через вызов функции lambda для каждого элемента data. Лямбда использует строчные методы проверки: isdigit() — ест ь ли это цифра, islower() — есть ли это буква в нижнем регистре, isupper() — или буква в верхнем регистре. Если объект map содержит хотя бы одно True, то функция map вернет True, иначе — False. Ну и функция all вернет True, если все элементы foo будут True (будут удовлетворять условиям надежного пароля), иначе — False.

Читайте также:
Оплата с телефона вместо карты как называется программа

Конечно, вариантов еще можно найти и найти … Можно использовать другие модули и т.д. Но всегда нужно добиваться оптимального варианта.

Источник: progtips.ru

Взлом паролей с помощью John the Ripper на Linux

Для тех из вас, кто еще не слышал о John the Ripper (здесь для краткости его называют John), это бесплатный инструмент для взлома паролей, написанный в основном на языке C.

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

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

Взлом паролей с помощью John the Ripper на Linux

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

Установка Джона

Хотя, по крайней мере, в тех дистрибутивах, которые мы пробовали, пакет в названии просто «john» с Gentoo, делающим исключение и называющим его «johntheripper», мы упростим его для вас и покажем, как установить его на несколько известных дистрибутивов.

Дистрибутив Debian

Debian отличается от других дистрибутивов, которые предлагают John в своих репозиториях, тем, что он предлагает хорошую страницу руководства, хотя у upstream ее нет. Для установки просто введите

# aptitude install john

Fedora

На Fedora, тоже легко установить.

# yum install join

Arch Linux

# pacman -S join

OpenSuse Linux

# zypper install john

Gentoo

Как мы уже говорили, пакет Gentoo назван иначе, чем другие предложения.

# emerge Johntheripper

Slackware

Хотя в официальных репозиториях, похоже, нет пакета john, есть slackbuild, который устанавливает John в вашу систему (это было протестировано на Slackware 13.37).

Хотя мы дали вам всего несколько примеров того, как Вы можете получить John в своей системе Linux, многие из представленных примеров будут работать, если у вас установлена другая ОС: помимо исходного кода, проект предлагает программу для BeOS, Microsoft Windows, Solaris или MacOS X. Но для нашей статьи, как говорится в названии, мы протестировали примеры на Linux.

Использование Джона Потрошителя

Вам не нужно беспокоиться о зашифрованных конфигурационных файлах, так как Джон готов к использованию с соответствующими флагами командной строки без каких-либо других усилий с вашей стороны. Однако одно предупреждение: как Вы уже заметили, мы сообщаем нашим читателям, когда они должны использовать привилегии root, а когда нет. За исключением отмеченных случаев, вам настоятельно рекомендуется использовать вашего обычного повседневного пользователя (или другого, если Вы предпочитаете, но он не должен иметь прав суперпользователя). В моей системе Debian John доступен как /usr/sbin/john, поэтому, если Вы его не нашли, мы рекомендуем вам использовать whereis и ввести весь путь при запуске john unprivileged (или Вы можете просто создать псевдоним).

$ /usr/sbin/john —test

Теперь давайте создадим текстовый файл в формате пароля (: ) с допустимым хэшем, конечно, и заставим Джона работать. Вы можете просто скопировать пользователя из /etc/shadow, но мы рекомендуем что-то более простое, потому что мы предполагаем, что Вы хотите увидеть результаты как можно быстрее. Итак, создайте файл с именем password.txt где-нибудь внутри вашего /home и положите это в него:

myuser:AZl.zWwxIh15Q

Сохраните файл, а затем просто скормите его Джону без каких-либо аргументов (на данный момент):

$ /usr/sbin/john password.txt

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