Easy-HackЛеонид «R0id» Стройков (stroikov@gameland.ru) Задача: Объединить вывод записей из таблицы БД в одну строку при проведении sql-инъекции в MySQLРешениеНесмотря на свою «популярность», SQL-инъекции по-прежнему встречаются на множестве ресурсов. Но, как известно, основной проблемой при реализации скул-инъектов является вытягивание записей из табличек. Конечно, можно по старинке менять значение LIMIT'а, регулируя, тем самым, вывод данных в отображаемые поля. Однако есть более простой и действенный способ, заюзав который, ты получишь много данных и сразу. Речь идет о функции GROUP_CONCAT() в MySQL => 4.1 версии. Она позволяет объединить в одну строку несколько записей из таблицы (по аналогии с известной тебе функцией concat(), объединяющей несколько полей). Проще говоря, с помощью GROUP_CONCAT() ты можешь отобразить не одну, а сразу десяток-другой записей из таблички. Причем, максимальный объем получаемых тобой данных по дефолту ограничен 1 метром (aka 1024 байта), – именно такое значение имеет по умолчанию системная переменная group_concat_max_len. Конечно, слить всю необходимую инфу вряд ли удастся, но вот упростить себе жизнь можно изрядно. Итак, несколько важных особенностей функции GROUP_CONCAT():
В качестве примера, рассмотрим получение списка всех БД и всех табличек для текущей БД с помощью функции GROUP_CONCAT() в MySQL => 5 версии. 1. Предположим, у нас есть sql-инъекция вида:
2. Получим список всех БД (при условии, что данные <= 1024 байта) за один запрос в одном поле:
3. Теперь получим список всех табличек для текущей БД (при условии, что данные <= 1024 байта) за один запрос в одном поле:
Думаю, принцип использования функции ты понял, а почитать дополнительную инфу по теме ты можешь в блоге Raz0r'а: http://raz0r.name/obzory/group_concat. Задача: Создать код, который будет изменять инструкцию, передающую ему управление, с последующим возвратом управления на нее же.РешениеИногда необходимо задать кодокопателю задачу и наставить ловушек, из которых выбраться будет непросто. Как тебе, например, идея: превратить некоторую исходную инструкцию PE-файла в переход к коду, – он будет выполнять модификацию этой инструкции перехода (от которой получил управление), превращая ее в исходную? Схематично этот процесс выглядит следующим образом:
Рассмотрим простой пример. Допустим, мы имеем программу, на точке входа (00401000) которой располагается инструкция «PUSH 0». Ее двухбайтный опкод выглядит как «6A 00». Предположим, что наш код обратного преобразования будет располагаться по адресу 00401026. Тогда инструкция перехода к нему будет выглядеть: «jmp 00401026», а опкод ее (также двухбайтный) равен EB 24. Значит, необходимо получить набор инструкций, который будет преобразовывать опкод «EB 24» в опкод «6A 00». Самый простой способ - применение логической операции «XOR» (хотя можно использовать любые, сколь угодно сложные, алгоритмы преобразования). Чтобы превратить машинное слово «EB24» в слово «6A00», необходимо выполнить операцию XOR с некоторым числом X: EB24 XOR X = 6A00. Вспомним математическую логику и получим число X следующим образом: X = 6A00 XOR EB24, откуда X = 8124. Учтем, что процессор забирает данные «задом наперед»; для преобразования одной инструкции в другую нужно будет выполнить операцию XOR 2481. Итак, вот последовательность необходимых действий: 1. Открываем программу в OllyDBG и изменяем инструкцию «PUSH 0», расположенную по адресу 00401000, на инструкцию «jmp 00401026», имеющую опкод EB24. 2. Начиная с адреса 00401026, размещаем следующий код, выполняющий преобразование инструкции вызова:
3. Запускаем программу для пошагового выполнения и наслаждаемся результатами трюка. Это действительно работает! Задача: Замутить сервис по проверке файлов различными антивирусамиРешениеВ последнее время можно наблюдать распространение сервисов по проверке файлов разными антивирусами. Одним из первых подобные услуги начал предоставлять известный ресурс www.virustotal.com. Впоследствии появился целый ряд подобных проектов, некоторые из них представляют собой вполне самостоятельные с технической точки зрения экземпляры, а большинство работает через www.virustotal.com (еще и деньги за проверку берут, в размере 1wmz за файл). Вот такие пироги :). Сейчас мы постараемся исправить эту несправедливость. Итак: 1. Ищем/покупаем/ломаем/etc сервер с наличием:
2. Заливаем содержимое архива (взять с нашего ДВД, респект автору - ChaaK'у) на сервер. 3. Ставим чмод 777 на каталог ./files. 4. Редактируем файл index.php, настройки которого выглядят следующим образом:
Вот, собственно, и все. При желании ты можешь модернизировать скрипт, естественно, не забывая про копирайты :). По неподтвержденным слухам, www.virustotal.com рассылает все загружаемые для проверки файлы антивирусным компаниям, но это лишь слухи и догадки. Так что, юзать или нет - решать тебе, а скрипт от многоуважаемого всеми ChaaK'а ты найдешь на нашем ДВД. Задача: Получить доступ к файлам на сервере через sql-инъекцию в PostgreSQLРешениеНесмотря на то, что самыми распространенными СУБД являются MySQL и MSSQL, нередки и случаи «знакомства» с PostgreSQL. У многих неопытных хакеров эта СУБД вызывает массу вопросов. Дабы не вводить тебя лишний раз в заблуждение, я проясню все еще раз – четко и доходчиво. Кстати, забегая вперед, скажу, что в PostgreSQL работать с файлами, хранящимися на сервере, гораздо удобнее, нежели, например, в мускуле. Изначально у нас есть два варианта:
Теперь разберем алгоритм действий для каждого из вариантов. Чтобы успешно залить собственный веб-шелл через скул-инъект на сервер с PostgreSQL, необходимо: 1. Создать новую табличку (скажем, table_file). 2. Записать в одно из полей содержимое нашего веб-шелла (например, 3. Выгрузить содержимое нашей таблички (веб-шелл) в файл, находящий в веб-каталоге. В общем виде выглядит это так:
4. Также можно воспользоваться выгрузкой в файл:
Впрочем, иногда бывает невозможно произвести запись в веб-каталог, по причине отсутствия прав. В этом случае тебе помогут следующие фичи: 1. Подгрузка файла на чтение (аналог функции load_file() в MySQL):
2. Чтение указанного файла с n по m строку:
(где n и m - числовые значения соответствующих строк) 3. Листинг директории:
4. Получение сведений об указанном файле:
Надеюсь, эти приемы помогут тебе ни один раз. Пробуй :). Задача: Добавить в PE-файл возможность вызова API-функции, содержащейся в некоторой сторонней DLLРешениеДля решения этой задачи воспользуемся утилитой «IID King 2.0», которая позволяет добавлять в директорию импорта PE-файла новые элементы.
Готово! Дополняй функциональность приложения собственным кодом, использующим стороннюю DLL. Задача: Конвертировать батник в exe-файлРешениеДля решения бытовых задач, зачастую проще всего набросать небольшой батник и юзать его в дальнейшем. Иногда этот самый батник нужно впарить доверчивому юзеру, но как, если батник можно запросто просмотреть и изменить? Проблема отпадает сама собой, если к ее решению подойти не с пустыми руками, а при помощи утилы ExeScript, которая создана специально для конвертации .bat-, .vbs- и .js-скриптов в исполняемые ехе-файлы. Алгоритм действий прост:
Кстати, подобным образом конвертированы многие известные тебе «утилы», создающие админский акк на удаленном компе и запускающие телнет-сервис. В качестве примера лови батник такого содержания:
Думаю, пояснять ничего не надо, верно? Для достижения наибольшего эффекта рекомендую использовать джойнеры, а также менять иконку ехе'шника. Задача: Прокинуть HTTP-траффик через SMTP-портРешениеВ решении этой нетривиальной задачи тебе поможет HoSproxy – HTTP over SMTP Proxy. Она состоит из двух частей: HoStunnel и HoSproxy. Функционирует все пока только под платформой Windows. Первая из названных отвечает за использование HoStunnel в качестве внешнего почтового сервера, который должен быть запущен от рута на 25 порту (TCP – SMTP). Он делает следующую вещь: все запросы писем из твоей внешней локалки будут достигать его (ты меняешь настройки соединения у себя в клиенте), а потом перенаправляться. На удаленном сервере будут формироваться HTTP-кодированные ответы и высылаться тебе обратно в почтовом письме. Вариант с HoSproxy нацелен на то, что будет поднята HTTP-proxy (tcp 8080), с которой будут прозрачно перенаправляться запросы на твои почтовые сервера. Они будут делать всю работу по преобразованию HTTP-документов и их последующей высылке напрямую тебе в браузер. Итак, действуем: 1. Качаем HoSproxy по адресу edge-security.com/hosproxy.php (или берем с DVD). 2. Редактируем конфиг Hospoxy.cfg следующего содержания: 3. Запускаем hosproxy.exe и рвемся на любой сайт Задача: Узнать открытые порты на удаленном узле не со своей машиныРешениеПервое, что тут приходит в голову - использовать клиент-серверные проекты. Другое дело, что, устанавливая подобное, ты можешь запалиться в логах. Более того, есть ряд ограничений (контроль портов администратором, host-based ips и т.п). Тем не менее, в решении задачи тебе поможет софтина Rnmap.
Этой же архитектуры придерживается Nessus. А второй метод – это воспользоваться одним из онлайн-сервисов (t1shopper.com/tools/port-scanner). Правда, некоторые из них пишут логи, а некоторые нет. Пусть достаточно давно, но был наезд со стороны органов безопасности США на создателя NMAP, который имел такой сервис в тестовом виде для посетителей. |