
Ferramenta de pentesting para chat-box de IA em C: dispara payloads de linguagem (SQLi/NoSQL/XSS/SSTI) e de injeção de prompt contra interfaces de chat e sinaliza os que funcionam
thc-BloodMiamiFerramenta de pentest para chat-box de IA, escrita em C. Dispara payloads de injeção de linguagem (SQL/NoSQL/XSS/SSTI) e de prompt contra uma interface de chat e sinaliza os que funcionam — strings de erro de DB, marcadores de script refletidos, sinais de jailbreak do modelo. Rápida, com threads, baseada em libcurl.
O que fazInjeção de linguagem (-i L) — sondas de injeção SQLi, NoSQL, XSS, JS; compara a resposta com listas de erros/assinaturas (mysql_fetch_array, ORA-01756, <script>, onerror=, ...)Injeção de prompt (-i P) — sondas de jailbreak/sobrescrita de prompt; classifica os acertos como Low (confusão do modelo), Medium (possível bypass), Critical (sinal de jailbreak)Envio com threads — concorrência ajustável (-c, padrão 10)Cabeçalhos personalizados, user-agent, timeouts, modo verbose, resultados em arquivo (-o)wordlist/language.txt, wordlist/prompt.txtCompilaçãogit clone https://github.com/foxcornlab/thc-BloodMiami.git
cd thc-BloodMiami
# deps: gcc, make, libcurl dev headers
sudo apt install libcurl4-openssl-dev # debian/ubuntu
make
Uso# language injection scan
./build/bloodmiami -t https://example.com/chat -i L -d wordlist/language.txt
# prompt injection scan, verbose, results to file
./build/bloodmiami -t https://example.com/chat -i P -d wordlist/prompt.txt -v -o results.txt
# 20 threads, 10s timeout, custom header
./build/bloodmiami -t https://example.com/chat -i L -d wordlist/language.txt -c 20 -T 10 \
-H "Authorization: Bearer <token>"
Usage: bloodmiami [OPTIONS]
Required:
-t, --target URL Target chat interface URL
-i, --injection TYPE Injection type: L (language) or P (prompt)
-d, --dictionary FILE Dictionary file with payloads
Optional:
-v, --verbose Enable verbose output
-T, --timeout SEC Request timeout in seconds (default: 5)
-U, --user-agent STR Custom User-Agent string
-H, --header STR Add custom HTTP header
-c, --concurrency NUM Concurrent requests (default: 10)
-o, --output FILE Save results to file
-h, --help Show help
-V, --version Show version
Como funcionaCada linha do dicionário se torna um POST (Content-Type: application/json) com o payload embutido em um corpo JSON no estilo de chat. O corpo da resposta é verificado em busca de:
SQL — mysql_fetch_array, ORA-01756, Unclosed quotation mark, PostgreSQL query failed, ...NoSQL — MongoError, BSONObj, WriteResult, ...XSS — <script>, javascript:, onerror=, document.cookie, ...JS — SyntaxError, ReferenceError, eval(, ...HTTP 5xx — sinalizado como possível erro de servidor disparado por injeçãoOs payloads são escapados em JSON antes da incorporação, para que aspas/barras invertidas no dicionário não corrompam o corpo da requisição. A verificação de TLS é intencionalmente desativada (CURLOPT_SSL_VERIFYPEER=0) — esta é uma ferramenta de teste, mantenha-a em alvos de laboratório/autorizados.
Dicionários de payloadwordlist/language.txt — SQLi (UNION, baseada em erro, baseada em tempo), operadores NoSQL, vetores XSS, sondas SSTIwordlist/prompt.txt — tentativas de jailbreak, sobrescritas de role-play, sondas de extração de system-prompt, marcadores de injeção indiretaAdicione os seus: um payload por linha, # para comentários. Os payloads atingem o alvo como estão, então aponte isto apenas para sistemas que você tem permissão de testar.
Aviso legalApenas para testes de segurança e pesquisa autorizados. Você é responsável por obter permissão antes de apontar isto para qualquer coisa que não seja sua.
AgradecimentosA comunidade de segurança open-source — ideias de payload e listas de assinaturaslibcurl — fazendo todo o trabalho pesado de HTTPPesquisa por
Vineeth Kumar(foxcornlab). Encontrou um bug ou quer um recurso, abra umaissue.