Princípio e defesa do ataque de injeção XPath

Princípio e defesa do ataque de injeção XPath

0x01 O que é XPath

XPath é a linguagem do caminho XML, que é o principal elemento do padrão W3C XSLT e é uma linguagem usada para determinar a localização de uma determinada parte de um documento XML (subconjunto da linguagem de marcação universal padrão).

O XPath é baseado na estrutura da árvore XML, existem diferentes tipos de nós, incluindo nós de elemento, nós de atributo e nós de texto, fornece a capacidade de encontrar nós na árvore de estrutura de dados, pode ser usado para percorrer os elementos e atributos no documento XML.

0x02 Sintaxe básica do XPath

1. Consulte a instrução básica
// users / user [nome / texto () = 'abc' e senha / texto () = 'test123'].
Esta é uma instrução de consulta XPath para obter todos os dados do usuário cujo nome é abc.O usuário precisa enviar o nome e a senha corretos para retornar o resultado. Se o hacker digitar no campo de nome: 'ou 1 = 1 e digitar a senha:' ou 1 = 1, a verificação poderá ser ignorada e todos os dados do usuário poderão ser obtidos com sucesso
// users / user [name / text () = '' ou 1 = 1 e senha / texto () = '' ou 1 = 1]

2.
Tipos de nós No XPath, os documentos XML são tratados como árvores de nós.Existem sete tipos de nós no XPath: elementos, atributos, texto, espaços para nome, instruções de processamento, comentários e nós do documento (ou se tornam nós raiz). O nó raiz do documento é o nó do documento; os atributos correspondentes possuem nós de atributo e os elementos possuem nós de elemento.
elemento (
atributo) espaço para nome do
texto (texto)
(espaço para nome do processo)
instrução de processamento (instrução de processamento)
comentário (comentário)
raiz (nó raiz)

3. Expressão
XPath seleciona nós por Expressão de caminho, regras básicas:
Insira a descrição da imagem aqui

0x03 O que é ataque de injeção XPath

Nos últimos anos, a tecnologia XML tem sido amplamente utilizada nos modernos sistemas de modernização de comércio eletrônico e shopping centers, e a tecnologia de ataque por injeção XPath contra informações de dados XML começou a aparecer. Quando as informações XML são amplamente usadas, a segurança de seus dados é muito importante, mas poucos pesquisadores estudam atualmente a tecnologia de defesa contra ataques por injeção do XPath.

O ataque de injeção XPath refere-se ao uso dos recursos de tolerância a falhas e de entrada frouxa do analisador XPath, que podem anexar códigos maliciosos de consulta XPath a URLs, formulários ou outras informações para obter acesso às informações de autoridade e alterar essas informações. O ataque de injeção XPath é um novo método de ataque para aplicativos de serviço da Web. Ele permite que um invasor obtenha o conteúdo completo de um documento XML por meio da consulta XPath sem conhecer o conhecimento relevante da consulta XPath com antecedência.

0x04 recursos de ataque de injeção XPath

Os ataques de injeção do XPath usam duas técnicas, ou seja, a verificação XPath e a consulta XPath Boolean. Com esse ataque, o invasor pode controlar o banco de dados XML usado para consultas XPath. Esse tipo de ataque pode efetivamente usar a consulta XPath (e banco de dados XML) para executar autenticação, pesquisa ou outras operações. Os ataques de injeção do XPath são semelhantes aos ataques de injeção do SQL, mas comparado com os ataques de injeção do SQL, o XPath tem vantagens nos seguintes aspectos.

(1) Extensividade . Os ataques de injeção do XPath usam a sintaxe XPath. Como XPath é um idioma padrão, desde que um aplicativo Web que use a sintaxe XPath não processe estritamente a consulta XPath de entrada, haverá vulnerabilidades de injeção no XPath, portanto, pode ser encontrado em todos os XPath. Essa fraqueza está incluída na implementação, que é muito diferente dos ataques de injeção de SQL. Dependendo da linguagem SQL suportada pelo banco de dados durante o ataque de injeção SQL, a implementação do ataque de injeção pode ser diferente.

(2) Nocivo . A linguagem XPath pode se referir a quase todas as partes dos documentos XML, e essas referências geralmente não têm restrições de controle de acesso. No entanto, no ataque de injeção SQL, a autoridade de um "usuário" pode ser restrita a uma tabela, coluna ou consulta específica, e o ataque de injeção XPath pode garantir a obtenção de um documento XML completo, ou seja, de um banco de dados completo. Desde que os aplicativos de serviço da Web possuam vulnerabilidades básicas de segurança, ataques automáticos contra aplicativos XPath podem ser construídos.

0x05 Risco de injeção XPath

  1. Envie códigos XPath maliciosos em URLs e formulários para obter direitos de acesso para restringir dados e modificar esses dados;
  2. O conteúdo XML completo do sistema pode ser obtido através deste tipo de consulta de vulnerabilidade.
  3. A lógica e a autenticação são ignoradas. Não possui várias permissões, como o banco de dados. XML não possui o conceito de várias permissões. Como não há conceito de permissões, o banco de dados inteiro será lido pelos usuários ao usar o xpath para construir consultas.
  4. Ignorar verificação, vazamento de informações

0x06 princípio de ataque de injeção XPath

O princípio da injeção do xpath é realmente muito semelhante à injeção do SQL. Os ataques da injeção do XPath são principalmente através da construção de entradas especiais.Essas entradas geralmente são uma combinação da sintaxe do XPath.Estas entradas serão passadas para o aplicativo Web como parâmetros e executadas pela execução de consultas XPath. A operação que o invasor queria, no entanto, o objeto injetado não é a tabela de usuários do banco de dados, mas um arquivo XML que armazena dados.

O invasor pode obter a estrutura organizacional dos dados XML ou acessar dados que normalmente não são permitidos.Se os dados XML forem usados ​​para autenticação do usuário, o invasor poderá elevar sua autoridade. Como o xpath não tem controle de acesso, não encontraremos muitas restrições de acesso frequentemente encontradas na injeção de SQL. Não há controle de acesso ou autenticação de usuário no XML.Se o usuário tiver autoridade para usar a consulta XPath e não houver um sistema de defesa entre eles ou a instrução de consulta não for filtrada pelo sistema de defesa, o usuário poderá acessar o documento XML inteiro.

Como um exemplo comum //users/user[username/text()= ' ' or ‘1’ or '1' and password/text()=''],
essa sequência logicamente fará com que a consulta sempre retorne verdadeira e sempre permitirá que o invasor acesse o sistema. Os invasores podem usar o XPath para manipular dinamicamente documentos XML em aplicativos. Após a conclusão do ataque, a tecnologia de entrada oculta XPath pode ser usada para obter a conta da mais alta autoridade e outras informações importantes sobre documentos. Estendendo-o, existem muitos truques para injeção de xpath, como injeção de erro de xpath através da função updataxml () e injeção cega de xpath.

O código Blog.xml (armazenando nome de usuário e senha)
Insira a descrição da imagem aqui
Index.php (usado para receber parâmetros de entrada e realizar consultas XML)
Insira a descrição da imagem aqui
é muito simples, implementa uma função simples de verificação de login.De fato, semelhante à injeção SQL, não há dados inseridos pelo usuário A filtragem faz com que o invasor injete diretamente a "expressão XPath".
Insira a descrição da imagem aqui

0x07 método de injeção cega XPath

A injeção cega do XPath usa principalmente algumas funções de operação de cadeia e operadores do XPath.
Insira a descrição da imagem aqui

Tomando a parte acima do ambiente como exemplo, $query = "/root/users/user[username/text()='".$name."' and password/text()='".$pwd."']";se quisermos percorrer todo o documento XML, as etapas gerais são as seguintes:
1. Use count (/ *) para determinar o seguinte nó:
http://127.0.0.1/xpath/index.php?name= ' ou count (/ *) = 1 ou '1' = '2
Resultado: 1Se
houver um resultado de retorno, isso prova que existe um nó raiz

2. Use substring para dividir cada caractere do nó raiz e adivinhe o nó de primeiro nível:
http://127.0.0.1/xpath/index.php?name= 'ou substring (nome (/ [position () = 1]) , 1,1) = 'r' ou '1' = '2
http://127.0.0.1/xpath/index.php?name=' ou substring (nome (/
[position () = 1]), 2, 1) = 'o' ou '1' = '2

Resultado: raiz

3. Determine o número de nós de próximo nível da raiz:
http://127.0.0.1/xpath/index.php?name= 'ou count (/ root / *) = 2 ou' 1 '=' 2
Resultado: 1

4. Adivinhe o próximo nó da raiz:
http://127.0.0.1/xpath/index.php?name= 'ou substring (nome (/ root / [position () = 1]), 1,1) = 'u' ou '1' = '2
http://127.0.0.1/xpath/index.php?name=' ou substring (nome (/ root /
[position () = 2]), 1,1) = ' s 'ou' 1 '=' 2
Resultado: usuários

5. Repita as etapas acima até que todos os nós sejam adivinhados e, finalmente, adivinhe os dados ou valores de atributo nos nós

0x08 tecnologia de defesa de ataque por injeção XPath

(1) Envie os dados para a extremidade superior do servidor e verifique a validade dos dados enviados antes que o servidor processe oficialmente o lote de dados.
(2) Verifique se os dados enviados contêm caracteres especiais, execute a conversão ou substituição de código nos caracteres especiais e exclua caracteres ou cadeias de caracteres sensíveis.
(3) Para as informações de erro que aparecem no sistema, substitua-as pelas informações do código de erro do IE para proteger as informações de erro do próprio sistema.
(4) Consulta XPath parametrizada, a expressão de consulta XPath a ser construída é expressa na forma de uma variável e a variável não é um script que pode ser executado. O código a seguir pode parametrizar a consulta criando um arquivo externo que a salve:
declare a variável $ loginID como xs: string external;
declare a variável p uma s s W o r d uma s x s s t r Eu n g e x t e r n uma eu / / em s e r s / em s e r [ @ eu o g Eu n Eu D = senha como xs: string externa ; // usuários / usuário [@ loginID = loginID e @ senha = $ senha]
(5) Por meio de algoritmos de criptografia como MD5, SSL, etc., para informações sensíveis a dados e criptografia durante a transmissão de dados, mesmo que alguns usuários ilegais obtenham pacotes de dados por métodos ilegais, eles veem o código criptografado Informações.

Publicado 21 artigos originais · ganhou 14 · visitado 4075

Acho que você gosta

Origin blog.csdn.net/m0_38103658/article/details/105481323
Recomendado
Clasificación