
Herramienta de pentesting de chat-box de IA en C: lanza payloads de lenguaje (SQLi/NoSQL/XSS/SSTI) e inyección de prompts contra interfaces de chat y marca los que dan resultado
thc-BloodMiamiHerramienta de pentesting para chat-box de IA, escrita en C. Lanza payloads de inyección de lenguaje (SQL/NoSQL/XSS/SSTI) y de prompt contra una interfaz de chat y marca los que dan en el blanco — cadenas de error de DB, marcadores de script reflejados, señales de jailbreak del modelo. Rápida, multihilo, basada en libcurl.
Qué haceInyección de lenguaje (-i L) — sondas de inyección SQLi, NoSQL, XSS, JS; compara la respuesta contra listas de errores/firmas (mysql_fetch_array, ORA-01756, <script>, onerror=, ...)Inyección de prompt (-i P) — sondas de jailbreak/anulación de prompt; clasifica los aciertos como Low (confusión del modelo), Medium (posible bypass), Critical (señal de jailbreak)Emisor multihilo — concurrencia ajustable (-c, por defecto 10)Cabeceras personalizadas, user-agent, timeouts, modo verbose, resultados a archivo (-o)wordlist/language.txt, wordlist/prompt.txtCompilacióngit 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
Cómo funcionaCada línea del diccionario se convierte en un POST (Content-Type: application/json) con el payload embebido en un cuerpo JSON estilo chat. El cuerpo de la respuesta se escanea en 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 — marcado como un posible error del servidor desencadenado por la inyecciónLos payloads se escapan como JSON antes de embeberse para que las comillas/barras invertidas del diccionario no puedan corromper el cuerpo de la petición. La verificación TLS está deshabilitada intencionalmente (CURLOPT_SSL_VERIFYPEER=0) — esta es una herramienta de pruebas, mantenla sobre objetivos de laboratorio/autorizados.
Diccionarios de payloadswordlist/language.txt — SQLi (UNION, basada en errores, basada en tiempo), operadores NoSQL, vectores XSS, sondas SSTIwordlist/prompt.txt — intentos de jailbreak, anulaciones de rol, sondas de extracción de prompt del sistema, marcadores de inyección indirectaAñade los tuyos: un payload por línea, # para comentarios. Los payloads llegan al objetivo tal cual, así que apunta esto solo a sistemas que tengas permitido probar.
Descargo de responsabilidadSolo para pruebas de seguridad e investigación autorizadas. Eres responsable de obtener permiso antes de apuntar esto a cualquier cosa que no sea tuya.
Agradecimientos aLa comunidad de seguridad de código abierto — ideas de payloads y listas de firmaslibcurl — haciendo todo el trabajo pesado de HTTPInvestigación de
Vineeth Kumar(foxcornlab). ¿Encontraste un bug o quieres una funcionalidad? Abre unissue.