NiceTryGPT

Haz que los CTFs sean más difíciles de resolver con atajos usando LLMs, sin hacerlos más difíciles para los humanos.

Documentación

NiceTryGPT ☕🤖

Menos coincidencia de patrones. Más hacking real.

Un flujo de trabajo de cambios mínimos para reducir los atajos baratos de LLM en desafíos CTF existentes, sin empeorarlos para los humanos.

Tests License: GPL-3.0 Version: v0.2.0 Website Cite DOI

Sitio web · Método · Evaluación · Distribución · Citación · Preservación · Hoja de ruta · Comentarios de autores de CTF

¿Tu CTF fue resuelto de una sola vez por un LLM? Buen intento.

NiceTryGPT es una pequeña habilidad de agente (Agent Skill) que toma un desafío CTF existente y autorizado, lo resuelve de principio a fin, identifica atajos baratos de LLM y aplica el cambio útil más pequeño para reducirlos.

Sin empeorar el desafío para los humanos.

Aumenta la incertidumbre, no la complejidad.

NiceTryGPT es intencionalmente pequeño: una habilidad, tres demos diminutas, un conjunto de pruebas E2E, sin framework.

Pruébalo en 30 segundos

Para una habilidad de Claude Code local al proyecto, copia el directorio nice-try-gpt en tu repositorio CTF como:

.claude/skills/nice-try-gpt/
└── SKILL.md

Luego pregunta:

Use NiceTryGPT on this CTF. Solve it first, identify the cheapest LLM shortcut,
make the smallest useful change, and verify the result end-to-end.

Claude Code descubre habilidades de proyecto desde .claude/skills/<skill-name>/SKILL.md. Las habilidades personalizadas también se pueden empaquetar y subir donde sea compatible. Consulta la documentación oficial de Agent Skills.

Plugin de Claude Code

NiceTryGPT también está estructurado como un plugin nativo de Claude Code. La raíz del repositorio contiene .claude-plugin/plugin.json, y Claude Code auto-descubre la habilidad reflejada bajo skills/nice-try-gpt/.

Para pruebas locales del plugin:

claude --plugin-dir /path/to/NiceTryGPT

También se prepara un manifiesto de marketplace independiente para que los usuarios puedan agregar el repositorio directamente e instalar el plugin con:

/plugin marketplace add aleff-github/NiceTryGPT
/plugin install nice-try-gpt@nicetrygpt

El diseño original de habilidad independiente sigue disponible bajo nice-try-gpt/, por lo que los flujos de instalación existentes por ZIP o local al proyecto continúan funcionando. Consulta docs/claude-plugin.md para notas sobre estructura del plugin, sincronización y distribución.

Instalación entre agentes

NiceTryGPT también ha sido verificado con el instalador abierto skills. El instalador descubre exactamente una habilidad nice-try-gpt de este repositorio y puede instalarla para Claude Code y otros agentes compatibles:

npx -y skills add aleff-github/NiceTryGPT --skill nice-try-gpt

La verificación de compatibilidad se ejecutó con telemetría deshabilitada; la prueba del proyecto no generó ningún conteo de instalaciones.

Distribución y descubrimiento

NiceTryGPT mantiene un único repositorio fuente canónico mientras permite que directorios e instaladores apunten de vuelta a él.

Las señales de distribución actuales incluyen:

  • una propuesta abierta upstream a anthropics/skills (#1798);
  • una copia indexada existente en el marketplace de AI Skill Store;
  • compatibilidad con el CLI abierto skills utilizado por skills.sh y otras herramientas de Agent Skills;
  • metadatos amigables para rastreadores a través de este README, SKILL.md, llms.txt, CodeMeta y el sitio web del proyecto.

Para mantenedores de directorios, enlaces canónicos, una descripción breve, categorías, palabras clave, comandos de instalación y el límite de evidencia se recopilan en docs/distribution.md.

La inclusión en un directorio no es un respaldo, y una propuesta pendiente no se describe como aceptada hasta que sus mantenedores la publiquen o fusionen.

Cómo funciona

UNDERSTAND
    ↓
SOLVE ORIGINAL
    ↓
FIND ONE CHEAP SHORTCUT
    ↓
MAKE 0–2 SMALL CHANGES
    ↓
SOLVE AGAIN
    ↓
REPORT

Si el desafío original no se puede reproducir, NiceTryGPT se detiene. Si el desafío ya está bien, NO CHANGE NEEDED es un resultado válido.

Qué preserva

Una transformación exitosa mantiene:

  • la misma clase de vulnerabilidad;
  • el mismo objetivo de aprendizaje;
  • el mismo conocimiento previo requerido;
  • la misma semántica de flag/éxito;
  • aproximadamente la misma banda de dificultad humana.

El valor predeterminado es un cambio de resistencia. Un segundo cambio solo se justifica cuando el primero es insuficiente y la puerta de costo humano aún se supera.

Antes / Después

NiceTryGPT actualmente incluye tres ejemplos deliberadamente diminutos:

EjemploAntesDespuésCosto humano
mini-idorel ID de pedido adyacente da el flagel ID de pedido extranjero debe observarse en tiempo de ejecución+1 solicitud
mini-traversalla ruta de exportación estática es inmediatamente reutilizableel nombre del archivo de exportación cambia en cada ejecución y se expone mediante actividad normal+1 solicitud
mini-sqlila identidad privilegiada se entrega al jugadorla identidad debe reconstruirse desde dos superficies normales de la aplicación+2 solicitudes

Todos mantienen la clase de vulnerabilidad original y el objetivo de aprendizaje.

mini-idor

AntesDespués
VulnerabilidadIDORIDOR
Atajo baratoProbar el ID de pedido adyacenteLa adivinanza adyacente falla
Observación necesariaNingunaUna solicitud de actividad en tiempo de ejecución
Dificultad humanaFácilSigue siendo fácil
SeñueloNingunoUn señuelo de descarga superficial y seguro

mini-traversal

AntesDespués
VulnerabilidadPath traversalPath traversal
Atajo baratoRuta estática ../exports/latest.txtLa ruta estática falla
Observación necesariaNingunaUna solicitud de actividad en tiempo de ejecución
Dificultad humanaFácilSigue siendo fácil
SeñueloNingunoNinguno

El ejemplo de traversal es intencionalmente útil como verificación de generalización: no usa honeypot. El único cambio es mover un hecho relevante para la solución del comportamiento estático al comportamiento ordinario en tiempo de ejecución.

mini-sqli

AntesDespués
VulnerabilidadInyección SQLInyección SQL
Atajo baratoLa identidad de administrador se muestra directamenteLa identidad antigua falla
Observación necesariaNingunaConectar el handle + formato de correo del personal
Patrón primarioNingunoDivisión de contexto
Dificultad humanaFácilSigue siendo fácil
Aleatorización en tiempo de ejecuciónNingunaNinguna

El ejemplo de SQLi evita deliberadamente la aleatorización en tiempo de ejecución. La consulta vulnerable no cambia; el jugador simplemente tiene que conectar dos pistas estáticas cercanas de la aplicación antes de aplicar el mismo primitivo de inyección.

Ejecuta las demos

No se requieren paquetes de Python de terceros.

python tests/test_demo.py
python tests/test_release.py

El conjunto verifica que cada desafío original es solucionable, que el atajo barato identificado deja de funcionar después de la transformación, que la funcionalidad normal sigue funcionando y que la vulnerabilidad prevista aún llega al flag en tiempo de ejecución.

Empaqueta la habilidad

Construye un ZIP determinista que contenga solo la habilidad instalable:

python scripts/package_skill.py

Salida:

dist/nice-try-gpt-v0.2.0.zip

El ZIP mantiene nice-try-gpt/ como su directorio raíz, por lo que se puede inspeccionar o copiar directamente a una ubicación compatible de Agent Skills.

Evaluaciones

NiceTryGPT ahora incluye un protocolo de evaluación reproducible mínimo bajo evals/.

El primer piloto planificado es:

2 challenges
× 2 variants
× 3 model families
× 5 fresh-context runs
= 60 runs

El protocolo fija aislamiento, paridad de herramientas, prompt, condiciones de detención y campos de resultados crudos. No se reclama ningún resultado entre modelos hasta que esas ejecuciones independientes se recopilen realmente.

Consulta evals/protocol.md. Un registro público de candidatos CTF ahora rastrea desafíos de código abierto escritos de forma independiente que deben pasar las puertas locales de línea base y transformación antes de ingresar a la matriz de evaluación de modelos.

Hoja de ruta

v0.2.0 — variedad sin inflación está completa: el método ahora abarca tres clases de vulnerabilidad e incluye un patrón de resistencia primario no basado en tiempo de ejecución.

El próximo hito de evidencia es v0.3.0 — evaluación independiente entre múltiples modelos.

Consulta ROADMAP.md.

Patrones de resistencia

NiceTryGPT actualmente usa un menú deliberadamente pequeño:

  • Ruptura de patrón — elimina una pista que prácticamente nombra el exploit.
  • Descubrimiento en tiempo de ejecución — haz que un hecho sea observable mediante interacción normal.
  • División de contexto — conecta dos piezas cercanas de comportamiento de la aplicación.
  • Dependencia de estado — deja que una pequeña cantidad de estado ordinario importe.
  • Señuelo semántico — agrega una ruta plausible que sea barata de descartar.

Estas son opciones, no una lista de verificación. La mayoría de los desafíos deberían necesitar cero o uno.

Consulta resistance-patterns.md.

Trabajo relacionado

NiceTryGPT no es ni un benchmark de resolución de CTF ni un sistema anti-trampas. Su enfoque estrecho es la transformación mínima de un desafío existente y verificado mientras preserva su objetivo de aprendizaje y limita el esfuerzo humano adicional.

Consulta docs/related-work.md para el posicionamiento actual frente a benchmarks de agentes CTF y trabajos recientes de diseño de desafíos conscientes de LLM.

Citación

NiceTryGPT incluye metadatos legibles por máquina CITATION.cff, para que GitHub pueda exponer Cite this repository con formatos APA y BibTeX generados.

Para trabajo de investigación o evaluación, cita la versión o el commit que realmente usaste y registra la versión del modelo, el acceso a herramientas, el número de ejecuciones y el protocolo de evaluación. La versión actual v0.2.0 está archivada en Zenodo con DOI 10.5281/zenodo.22858477. Consulta CITING.md para la citación canónica legible por humanos y codemeta.json para los metadatos de software CodeMeta.

Preservación

NiceTryGPT separa distribución, preservación y citación:

  • GitHub Releases proporciona versiones de proyecto versionadas;
  • Software Heritage preserva el repositorio independientemente de GitHub; la primera instantánea completada es swh:1:snp:6c77799e7623abf2653ab9363d3e2f57899174cf;
  • Zenodo preserva el archivo fuente v0.2.0 bajo DOI 10.5281/zenodo.22858477; las versiones futuras pueden usar la integración conectada GitHub/Zenodo.

Consulta docs/preservation.md para la estrategia de preservación e identificadores persistentes.

Lo que NiceTryGPT no hará

No hará intencionalmente que un desafío sea molesto solo para frenar a una IA.

Eso significa nada de:

  • CAPTCHA o trucos de verificación humana;
  • fuerza bruta como requisito de diseño;
  • inundación de tokens/contexto;
  • capas de codificación sin sentido;
  • trivia oscura;
  • flags falsos o trampas destructivas;
  • cadenas de exploit artificiales de cinco etapas;
  • montones de honeypots.

Si la resistencia a LLM y la experiencia humana entran en conflicto, el jugador humano gana.

Qué significa “resistente a LLM” aquí

NiceTryGPT no afirma probar que un desafío sea a prueba de IA.

En v0.2.0, “resistencia” significa reducir un atajo barato identificado mientras se preserva el desafío previsto. Una auto-revisión con el mismo modelo no es evidencia de resistencia; la resolución en contexto nuevo o entre modelos se informa por separado cuando realmente se realiza.

Estructura del repositorio

NiceTryGPT/
├── README.md
├── CHANGELOG.md
├── VERSION
├── LICENSE
├── CITATION.cff
├── CITING.md
├── codemeta.json
├── SECURITY.md
├── CONTRIBUTING.md
├── .claude-plugin/
│   ├── plugin.json
│   └── marketplace.json
├── skills/
│   └── nice-try-gpt/
│       ├── SKILL.md
│       └── references/
├── nice-try-gpt/
│   ├── SKILL.md
│   └── references/
│       └── resistance-patterns.md
├── examples/
│   ├── mini-idor/
│   ├── mini-traversal/
│   └── mini-sqli/
├── evals/
│   ├── README.md
│   ├── protocol.md
│   ├── solver-prompt.txt
│   ├── results.csv
│   └── summarize.py
├── scripts/
│   ├── package_skill.py
│   └── sync_plugin_skill.py
└── tests/
    ├── test_demo.py
    └── test_release.py

Estado del proyecto

v0.2.0 — variedad sin inflación.

El método está demostrado en IDOR, path traversal e inyección SQL. Los informes de ejemplo ahora siguen un contrato de aceptación impuesto por CI, y la división de contexto se demuestra como un patrón de resistencia primario no basado en tiempo de ejecución. La evaluación independiente entre modelos sigue siendo el próximo hito de evidencia.

Consulta CHANGELOG.md.

Comentarios de autores de CTF

Si diseñas, organizas o enseñas CTFs, los comentarios sobre la metodología son especialmente útiles.

Las preguntas más valiosas son:

  • ¿la puerta de costo humano coincide con las restricciones reales de diseño de desafíos?
  • ¿qué transformaciones se sienten justas versus molestas?
  • ¿qué clases de vulnerabilidad se ven más afectadas por la resolución de una sola vez con LLM?
  • ¿qué evidencia te haría confiar en una transformación antes/después?

Usa el formulario de comentarios de autores de CTF. No se requieren resultados de evaluación de modelos para dar comentarios de diseño.

Contribuciones

Las contribuciones pequeñas y enfocadas son bienvenidas. Lee CONTRIBUTING.md primero.

Alcance y uso responsable

NiceTryGPT está destinado a desafíos CTF, laboratorios de entrenamiento y sistemas que posees o para los que tienes autorización explícita de prueba. No está destinado a automatizar pruebas contra sistemas de terceros sin autorización.

Mantenedor

Mantenido por Alessandro Greco (@aleff-github).

Licencia

GNU General Public License v3.0. Consulta LICENSE.