Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pspy — Surveiller les processus Linux sans privilèges root | Kitploit
Outils/GitHubGitHub/dominicbreuker/pspy
Escalade de PrivilègesReconnaissanceCollecte d'InformationsCTFTests d'Intrusion
GitHubdominicbreuker/pspy

pspy

Surveiller les processus Linux sans privilèges root

Voir le dépôt
6.1k5673il y a 6 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

pspy - espionnage de processus Linux sans privilèges

Go Report Card Maintainability Test Coverage CircleCI

pspy est un outil en ligne de commande conçu pour espionner les processus sans besoin de permissions root. Il vous permet de voir les commandes exécutées par d'autres utilisateurs, les tâches cron, etc. au moment où elles s'exécutent. Idéal pour l'énumération de systèmes Linux dans les CTF. Également idéal pour démontrer à vos collègues pourquoi passer des secrets en arguments sur la ligne de commande est une mauvaise idée.

L'outil recueille les informations à partir des analyses de procfs. Des watchers Inotify placés sur des parties sélectionnées du système de fichiers déclenchent ces analyses pour capturer les processus de courte durée.

Pour commencer

Téléchargement

Obtenez l'outil sur la machine Linux que vous souhaitez inspecter. Commencez par obtenir les binaires. Téléchargez les binaires publiés ici :

  • version 32 bits grande et statique : pspy32 téléchargement
  • version 64 bits grande et statique : pspy64 téléchargement
  • version 32 bits petite : pspy32s téléchargement
  • version 64 bits petite : pspy64s téléchargement

Les fichiers compilés statiquement devraient fonctionner sur n'importe quel système Linux mais sont assez volumineux (~4 Mo). Si la taille est un problème, essayez les versions plus petites qui dépendent de libc et sont compressées avec UPX (~1 Mo).

Construction

Utilisez Go installé sur votre système ou exécutez le processus de construction basé sur Docker qui a été utilisé pour créer la release. Pour cette dernière option, assurez-vous que Docker est installé, puis exécutez make build-build-image pour construire une image Docker, suivi de make build pour construire les binaires avec celle-ci.

Vous pouvez exécuter pspy --help pour découvrir les flags et leur signification. Le résumé est le suivant :

  • -p : active l'affichage des commandes sur stdout (activé par défaut)
  • -f : active l'affichage des événements du système de fichiers sur stdout (désactivé par défaut)
  • -r : liste des répertoires à surveiller avec Inotify. pspy surveillera tous les sous-répertoires récursivement (par défaut, surveille /usr, /tmp, /etc, /home, /var et /opt).
  • -d : liste des répertoires à surveiller avec Inotify. pspy surveillera uniquement ces répertoires, pas les sous-répertoires (vide par défaut).
  • -i : intervalle en millisecondes entre les analyses de procfs. pspy analyse régulièrement à la recherche de nouveaux processus indépendamment des événements Inotify, au cas où certains événements ne seraient pas reçus.
  • -c : affiche les commandes en différentes couleurs. Les événements du système de fichiers ne sont plus colorés, les commandes ont différentes couleurs basées sur l'UID du processus.
  • --debug : affiche des messages d'erreur verbeux qui sont autrement cachés.

Les paramètres par défaut devraient convenir pour la plupart des applications. Surveiller les fichiers dans /usr est le plus important car de nombreux outils accèdent aux bibliothèques qui s'y trouvent.

Quelques exemples plus complexes :

root@kitploit:~
# print both commands and file system events and scan procfs every 1000 ms (=1sec)
./pspy64 -pf -i 1000 

# place watchers recursively in two directories and non-recursively into a third
./pspy64 -r /path/to/first/recursive/dir -r /path/to/second/recursive/dir -d /path/to/the/non-recursive/dir

# disable printing discovered commands but enable file system events
./pspy64 -p=false -f

Exemples

Surveillance de tâches cron

Pour voir l'outil en action, clonez simplement le dépôt et exécutez make example (Docker nécessaire). Il est connu que passer des mots de passe en arguments de ligne de commande n'est pas sûr, et l'exemple peut être utilisé pour le démontrer. La commande démarre un conteneur Debian dans lequel une tâche cron secrète, exécutée par root, change le mot de passe d'un utilisateur chaque minute. pspy s'exécute en premier plan, en tant qu'utilisateur myuser, et analyse les processus. Vous devriez voir une sortie similaire à celle-ci :

root@kitploit:~
~/pspy (master) $ make example
[...]
docker run -it --rm local/pspy-example:latest
[+] cron started
[+] Running as user uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),27(sudo)
[+] Starting pspy now...
Watching recursively    : [/usr /tmp /etc /home /var /opt] (6)
Watching non-recursively: [] (0)
Printing: processes=true file-system events=false
2018/02/18 21:00:03 Inotify watcher limit: 524288 (/proc/sys/fs/inotify/max_user_watches)
2018/02/18 21:00:03 Inotify watchers set up: Watching 1030 directories - watching now
2018/02/18 21:00:03 CMD: UID=0    PID=9      | cron -f
2018/02/18 21:00:03 CMD: UID=0    PID=7      | sudo cron -f
2018/02/18 21:00:03 CMD: UID=1000 PID=14     | pspy
2018/02/18 21:00:03 CMD: UID=1000 PID=1      | /bin/bash /entrypoint.sh
2018/02/18 21:01:01 CMD: UID=0    PID=20     | CRON -f
2018/02/18 21:01:01 CMD: UID=0    PID=21     | CRON -f
2018/02/18 21:01:01 CMD: UID=0    PID=22     | python3 /root/scripts/password_reset.py
2018/02/18 21:01:01 CMD: UID=0    PID=25     |
2018/02/18 21:01:01 CMD: UID=???  PID=24     | ???
2018/02/18 21:01:01 CMD: UID=0    PID=23     | /bin/sh -c /bin/echo -e "KI5PZQ2ZPWQXJKEL\nKI5PZQ2ZPWQXJKEL" | passwd myuser
2018/02/18 21:01:01 CMD: UID=0    PID=26     | /usr/sbin/sendmail -i -FCronDaemon -B8BITMIME -oem root
2018/02/18 21:01:01 CMD: UID=101  PID=27     |
2018/02/18 21:01:01 CMD: UID=8    PID=28     | /usr/sbin/exim4 -Mc 1enW4z-00000Q-Mk

D'abord, pspy affiche tous les processus en cours d'exécution, chacun avec le PID, l'UID et la ligne de commande. Lorsque pspy détecte un nouveau processus, il ajoute une ligne à ce journal. Dans cet exemple, vous trouvez un processus avec le PID 23 qui semble changer le mot de passe de myuser. C'est le résultat d'un script Python utilisé dans le crontab privé de root /var/spool/cron/crontabs/root, qui exécute cette commande shell (consultez crontab et script). Notez que myuser ne peut voir ni le crontab ni le script Python. Avec pspy, il peut néanmoins voir les commandes.

Exemple CTF de Hack The Box

Voici un exemple de la machine Shrek de Hack The Box. Dans ce défi CTF, la tâche consiste à exploiter une tâche cron cachée qui change la propriété de tous les fichiers d'un dossier. La vulnérabilité est l'utilisation non sécurisée d'un wildcard avec chmod (détails pour le lecteur intéressé). Cela nécessite beaucoup de suppositions pour la trouver et l'exploiter. Avec pspy cependant, la tâche cron est facile à trouver et à analyser :

animated demo gif

Comment ça marche

Il existe des outils pour lister tous les processus exécutés sur les systèmes Linux, y compris ceux qui sont terminés. Par exemple, il y a forkstat. Il reçoit des notifications du noyau sur les événements liés aux processus tels que fork et exec.

Ces outils nécessitent des privilèges root, mais cela ne devrait pas vous donner un faux sentiment de sécurité. Rien ne vous empêche d'espionner les processus en cours d'exécution sur un système Linux. Beaucoup d'informations sont visibles dans procfs tant qu'un processus est en cours d'exécution. Le seul problème est que vous devez attraper les processus de courte durée dans le très court laps de temps où ils sont vivants. Scanner le répertoire /proc à la recherche de nouveaux PID dans une boucle infinie fait l'affaire mais consomme beaucoup de CPU.

Une façon plus discrète est d'utiliser l'astuce suivante. Les processus ont tendance à accéder à des fichiers tels que les bibliothèques dans /usr, les fichiers temporaires dans /tmp, les fichiers journaux dans /var, ... En utilisant l'API inotify, vous pouvez recevoir des notifications lorsque ces fichiers sont créés, modifiés, supprimés, accédés, etc. Linux n'exige pas d'utilisateurs privilégiés pour cette API car elle est nécessaire pour de nombreuses applications innocentes (comme les éditeurs de texte qui vous montrent un explorateur de fichiers à jour). Ainsi, bien que les utilisateurs non-root ne puissent pas surveiller directement les processus, ils peuvent surveiller les effets des processus sur le système de fichiers.

Nous pouvons utiliser les événements du système de fichiers comme déclencheur pour analyser /proc, en espérant pouvoir le faire assez rapidement pour attraper les processus. C'est ce que fait pspy. Il n'y a aucune garantie de ne pas en manquer un, mais les chances semblent bonnes dans mes expériences. En général, plus les processus durent longtemps, plus la probabilité de les attraper est grande.

Divers

Logo : "By Creative Tail [CC BY 4.0 (http://creativecommons.org/licenses/by/4.0)], via Wikimedia Commons" (lien)

Télécharger l’outil