Este artigo foi escrito pelo unknown_antisec que mandou muito bem.

XPath Injection é uma técnica de ataque usado para explorar os aplicativos XPath (XML Path Language) consulta ou navegação em documentos XML. Ele pode ser usado diretamente por um aplicativo de consultar a um documento XML ou como parte de uma grande operação de como aplicar uma transformação XSLT a um documento XML ou até mesmo aplicar um XQuery para um documento XML. A sintaxe do XPath guarda alguma semelhança com uma consulta SQL e é possível formar “consultas SQL” em um documento XML usando XPath. Por exemplo, suponha um documento XML que contém elementos pelo nome de usuário, cada um dos quais contém três sub-elementos  “nome”, “senha” e “conta”. O código XPath a seguir produz o número da conta do usuário cujo nome é “jsilva” e a senha é “teste1234? :

string(//user[name/text()='jsilva' and
 password/text()='teste1234']/account/text())

Se um aplicativo executa a consulta XPath com a incorporação de entrada do usuário na consulta  pode ser possível para o atacante injetar dados na consulta assim podemos consultar de uma forma diferente da real intenção do programador.

Exemplo

Considere uma aplicação web que usa XPath para consultar um documento XML e recuperar o número da conta de um usuário. O pedido pode incorporar esses valores diretamente na consulta XPath, criando assim uma falha na segurança do site.

Aqui está um exemplo:

XmlDocument XmlDoc = new XmlDocument();
 XmlDoc.Load("...");

 XPathNavigator nav = XmlDoc.CreateNavigator();
 XPathExpression expr =
 nav.Compile("string(//user[name/text()='"+TextBox1.Text+"'
 and password/text()='"+TextBox2.Text+
 "']/account/text())");

 String account=Convert.ToString(nav.Evaluate(expr));
 if (account=="") {
        // nome+senha se não for encontrado no documento XML
 –
        // login falha.
 } else {
        // account existe -> Login OK.
        // Avançar para aplicação.
 }

Quando o código for utilizado, um atacante pode fazer injeções XPath, por exemplo, fornecerá o valor seguinte como um nome de usuário:

 ' or 1=1 or ''='

Isso faz com que o XPath original altere de modo que ele sempre retorna o número da conta em primeiro lugar no documento XML. A consulta neste caso  será:

string(//user[name/text()='' or 1=1 or ''='' and
 password/text()='foobar']/account/text())

O ataque portanto resulta em ter o atacante logado como o primeiro usuário listado no documento XML, embora o atacante não deu qualquer nome de usuário válido e senha, o mesmo procedimento do Sql Injection.

Fica o alerta aos programadores, cuidado com seus códigos.

fonte:Webappsec

O vídeo abaixo demonstra como utilizar a ferramenta XPATH Blind Explorer para explorar o XPath Injection:

Compartilhar:

Este post tem um comentário

  1. O unknown_antisec saca muito! valeu por compartilhar Gustavo.

Deixe uma resposta

Fechar Menu