Em muitos casos, quando os invasores usam injeção de ferramenta, eles descobrem que a ferramenta não consegue decifrar os nomes das tabelas e dos campos. Isso ocorre porque todas as ferramentas têm seu próprio dicionário, que inclui nomes de tabelas e nomes de campos. o nome do campo for alterado para que não esteja neste dicionário, a ferramenta que usamos não será capaz de adivinhar o nome do campo e o nome da tabela. No artigo a seguir, começaremos analisando a injeção manual para construir uma linha de defesa contra a injeção SQL.
O invasor construirá uma condição de julgamento simples para determinar se a página possui uma vulnerabilidade de injeção. As etapas gerais são as seguintes:
A página a ser detectada aqui é http://127.0.0.1/111/view.asp?id=198
1. . Intruder Se você deseja injetar um site manualmente, você deve configurar o navegador para garantir que mensagens de erro possam ser retornadas durante a injeção manual. As etapas são as seguintes:
clique com o botão direito no navegador e selecione "Propriedades" e selecione ". Avançado" na caixa de diálogo pop-up. guia. Conforme mostrado abaixo:
Figura 1
Em seguida, remova o gancho na frente de "Mostrar mensagens de erro HTTP amigáveis" e, por fim, clique no botão "Aplicar".
2. O intruso envia a seguinte URL ao navegador:
http://127.0.0.1/111/view.asp?id=198 e 1=1.
Se houver uma vulnerabilidade de injeção de SQL, o banco de dados pode ser consultado 1=. 1 é uma identidade. Ignore, então uma página normal será retornada. Esta página é igual a http://127.0.0.1/111/view.asp?id=198 . espera-se que seja injetado. Se algumas mensagens de erro forem retornadas, alguns invasores rudimentares poderão abandonar o site.
3. O invasor envia ainda o seguinte URL ao navegador:
http://127.0.0.1/111/view.asp?id=198 e 1=2
1=2 é uma desigualdade de identidade. Se o site suportar consulta ao banco de dados, provavelmente retornará informações conforme mostrado na figura abaixo:
Figura 2
Geralmente, se o invasor aparecer como mostrado na figura acima, é basicamente certo que este site pode realizar ataques de injeção de SQL.
No entanto, em muitos casos, um invasor pode determinar rapidamente se o site alvo tem uma vulnerabilidade de injeção de SQL simplesmente usando aspas simples e enviando a seguinte URL ao navegador:
http://127.0.0.1/111/view.asp? id=198'if O retorno das informações a seguir indica que há mais da metade de uma chance de que exista uma vulnerabilidade de injeção:
Erro do Microsoft OLE DB Provider for ODBC Drivers '80040e14'
[Microsoft] [ODBC Microsoft Access Driver] O erro de sintaxe da string está na expressão de consulta 'id =1'. /list.asp, linha 50
4. Neste momento, o invasor começa a construir uma instrução de consulta SQL especial para consultar o nome da tabela do banco de dados do site e envia a seguinte instrução para a URL:
http://127.0.0.1/ 111/view.asp?id= 198 e existe(select * from admin)
Esta instrução consulta o banco de dados para ver se a tabela admin existe. Se existir, uma página normal será retornada. Se a tabela não existir, um erro. página será retornada. Geralmente, os invasores testarão primeiro os nomes de tabelas comumente usados, que também são nomes de tabelas e nomes de campos que existem no dicionário de senhas de ferramentas gerais de injeção. Se o nome da tabela não estiver entre os nomes de tabela comumente usados, o invasor usará a engenharia social para adivinhar o nome da tabela. Nesse caso, o invasor terá poucas chances de adivinhar o nome da tabela.
5. Após obter o nome da tabela, o invasor começa a construir uma instrução de consulta para consultar o nome do campo do banco de dados e envia a seguinte instrução para a URL:
http://127.0.0.1/111/view.asp?id=198 e existe (selecione o usuário do administrador)
esta instrução é para consultar a tabela de administração no banco de dados se o campo do usuário existe. Se existir, uma página normal será retornada. Se não existir, uma página de erro será retornada.
7. Em seguida, o invasor começa a determinar o valor do campo id e constrói a seguinte instrução para consultar o valor do id: http://127.0.0.1/111/view.asp?id=198 e existe (selecione id from admin where id=1 )
retorna a página correta se estiver correta e retorna a página de erro se estiver incorreta.
6. Depois de adivinhar o nome da tabela e do campo, o invasor começou a construir uma instrução de consulta para adivinhar o comprimento da conta do administrador e enviou a seguinte instrução para o URL:
http://127.0.0.1/111/view.asp?id =198 e existe(selecione id de admin onde len(user)<6 e id=1)
Esta instrução serve para consultar o intervalo de comprimento do nome de usuário no campo de usuário, o que significa que o comprimento é menor que 6. Se for correto, retornará à página normal, se estiver errado, retornará à página de erro.
Restrinja o escopo e, em seguida, construa a seguinte instrução para determinar o comprimento específico do nome de usuário:
http://127.0.0.1/111/view.asp?id=198 e existe(select id from admin where len(user)= 5 e id=1)
Correto Se o erro ocorrer, a página normal será retornada. Se o erro ocorrer, a página de erro será retornada.
8. Em seguida, o invasor entra na etapa final para construir uma instrução para consultar o nome de usuário do administrador e envia a seguinte instrução para a URL: http://127.0.0.1/111/view.asp?id=198 e existe( select count(*) from admin where left(user,1)='a')
Esta instrução serve para adivinhar o nome do usuário do lado esquerdo do nome do usuário para a. Se estiver correto, ele retornará à página normal. . Se estiver errado, ele retornará à página de erro. Adivinhe. Na segunda posição, a instrução modificada é (usuário,2)='ad' e assim por diante.
Depois que o invasor obtém o nome de usuário e a senha, a injeção está quase concluída.
Quanto ao método de prevenção, é muito simples. A partir do processo acima, podemos ver que se o nome da tabela e o nome do campo não estiverem entre os nomes de tabela e de campo comumente usados, o invasor usará a engenharia social para adivinhar. o nome da tabela e o nome do campo modificados pelo administrador são complexos o suficiente, o invasor irá invadir. Se o invasor ainda não conseguir atingir o objetivo, existe outro método de defesa simples que é baixar alguns patches anti-injeção da Internet e aplicá-los. O método é modificar os arquivos do site e adicionar instruções de filtragem para filtrar as declarações enviadas pelos invasores para evitar injeções. Sim, não vou explicar seu princípio aqui.