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:
O unknown_antisec saca muito! valeu por compartilhar Gustavo.