Skip to content
reverseshell

Quoting de payloads reverse shell: donde JSON, YAML y formularios rompen todo

Por qué los comandos reverse shell fallan al cruzar parsers, wrappers, variables CI y entradas web.

Publicado el 2 min de lectura

El quoting es donde mueren los comandos limpios de laboratorio. Un reverse shell que funciona en tu terminal puede fallar al pasar por JSON, YAML, un formulario web, una variable CI, un wrapper shell y finalmente el intérprete objetivo.

El payload no cambió. Cambiaron los parsers.

Cada capa interpreta algo

Piensa en una orden con comillas, espacios, redirecciones y caracteres especiales. Tu shell local la interpreta una vez. Una API JSON exige escapar comillas. Un runner YAML puede tratar dos puntos y barras invertidas de otra forma. Una aplicación web puede recortar espacios. Un wrapper vulnerable puede colocar tu valor dentro de comillas que nunca ves.

Cuando llega a /bin/sh, quizá ya no sea la orden que generaste.

Por eso un generador útil debe mostrar variantes: raw shell, comillas simples, comillas dobles, URL-encoded, forma segura para JSON y escape específico para PowerShell. No existe un payload universal.

Depura con comandos inofensivos

Antes de enviar una shell por una ruta compleja, prueba algo aburrido:

id
pwd
uname -a

Luego valida caracteres controlados:

printf 'quote-test\n'

Si eso falla, el reverse shell no añadirá información. Primero necesitas entender cómo se transforma la entrada. En un laboratorio, registra la orden recibida. En una prueba black-box autorizada, infiere a partir de salida, tiempo y efectos permitidos.

Codificar no elimina el contexto

Base64 reduce problemas de quoting, sobre todo con PowerShell o wrappers shell. También hace que el comando sea menos legible para quien revisa la prueba. Y no evita la ejecución: algo tiene que decodificar y lanzar el contenido.

Usa codificación para preservar bytes a través de parsers hostiles, no para evitar entender el contexto.

Etiquetas claras ganan

La aplicación debería enseñar la misma payload en varias formas y nombrarlas con precisión. El usuario no debería adivinar cuál sirve para JSON y cuál es para shell raw.

Muchos errores de quoting vienen del cansancio. Una interfaz clara evita más fallos que una colección enorme de one-liners.

Artículos relacionados

Cómo depurar callbacks que no llegan por problemas de rutas, egreso, listeners, runtimes ausentes y comandos mal escapados.
La elección del payload debe seguir runtime, shell disponible, ruta de egreso, quoting y necesidad de evidencia.