
Strumento di pentesting per chat-box basate su AI in C: lancia payload di linguaggio (SQLi/NoSQL/XSS/SSTI) e di prompt injection contro interfacce chat e segnala quelli che funzionano
thc-BloodMiamiStrumento di pentesting per chat-box AI, scritto in C. Lancia payload di iniezione linguistica (SQL/NoSQL/XSS/SSTI) e di prompt injection contro un'interfaccia chat e segnala quelli che fanno presa — stringhe di errore DB, marcatori di script riflessi, segnali di jailbreak del modello. Veloce, multithread, basato su libcurl.
Cosa faLanguage injection (-i L) — sonde di iniezione SQLi, NoSQL, XSS, JS; confronta la risposta con elenchi di errori/firme (mysql_fetch_array, ORA-01756, <script>, onerror=, ...)Prompt injection (-i P) — sonde di jailbreak/override del prompt; classifica i risultati come Low (confusione del modello), Medium (possibile bypass), Critical (segnale di jailbreak)multithread — concorrenza regolabile (-c, predefinito 10)Header personalizzati, user-agent, timeout, modalità verbose, risultati su file (-o)wordlist/language.txt, wordlist/prompt.txtBuildgit 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
Utilizzo# 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
Come funzionaOgni riga del dizionario diventa una POST (Content-Type: application/json) con il payload incorporato in un corpo JSON in stile chat. Il corpo della risposta viene analizzato alla ricerca di:
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 — segnalato come possibile errore del server causato dall'iniezioneI payload vengono sottoposti a escape JSON prima dell'inserimento, così virgolette e barre rovesciate nel dizionario non possono corrompere il corpo della richiesta. La verifica TLS è volutamente disabilitata (CURLOPT_SSL_VERIFYPEER=0) — questo è uno strumento di testing, usalo su target di laboratorio/autorizzati.
Dizionari di payloadwordlist/language.txt — SQLi (UNION, error-based, time-based), operatori NoSQL, vettori XSS, sonde SSTIwordlist/prompt.txt — tentativi di jailbreak, override role-play, sonde di estrazione del system prompt, marcatori di iniezione indirettaAggiungi i tuoi: un payload per riga, # per i commenti. I payload raggiungono il target così come sono, quindi punta questo strumento solo verso sistemi che sei autorizzato a testare.
DisclaimerSolo per test di sicurezza e ricerca autorizzati. Sei responsabile di ottenere il permesso prima di puntare questo strumento verso qualsiasi cosa che non possiedi.
RingraziamentiLa community open-source della sicurezza — idee per i payload ed elenchi di firmelibcurl — che fa tutto il lavoro pesante HTTPRicerca di
Vineeth Kumar(foxcornlab). Hai trovato un bug o vuoi una funzionalità, apri unaissue.