root@system:~# less myfile
-bash: /bin/less: Input/output error
Le système de fichiers racine est mort. Mais mon chat est toujours vivant (dans ma mémoire):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Il est un peu seul cependant, tous ses amis sont partis:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
Le système fonctionne toujours et remplit son objectif. Je sais, je sais, la seule réponse sensée à cela est de faire descendre le système et de remplacer le lecteur racine. Malheureusement, ce n'est pas une option car cela coûterait beaucoup de temps et d'argent. De plus, cela tuerait mon chat et cela me rendrait triste.
J'ai pensé à lui amener ses amis habituels d'un donateur. Je n'ose pas essayer de les scp, au cas où ssh essaie de le charger et coupe la ligne (le binaire a disparu de toute façon). Cela ressemble à un travail pour le cousin de mon chat:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
Malheureusement, il est parti depuis longtemps.
Maintenant, je peux essayer de tromper mon chat pour effectuer un rituel pour le ressusciter:
cat > netcat < /dev/tcp/localhost/9999
Et ce genre de travail. Il est presque vivant:
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Il a juste besoin d'un petit spark de vie. Ce petit +x
incantation magique que je ne peux pas réciter pour le moment.
Pouvez-vous m'aider à ramener les amis de mon chat?
Il existe plusieurs possibilités, toutes en fonction des paramètres exacts de votre situation actuelle. Je vais supposer Linux dans les exemples suivants, le cas échéant, mais des fonctionnalités similaires existent sur d'autres plateformes dans la plupart des cas.
Vous pourrez peut-être demander au chargeur dynamique d'exécuter un exécutable pour vous. En supposant que cat
est lié dynamiquement, l'équivalent de votre plate-forme de /lib/ld-linux.so.2
sera probablement également en mémoire et donc utilisable pour exécuter un binaire:
$ /lib64/ld-linux-x86-64.so.2 ./chmod
chmod: missing operand
Vous pouvez en avoir plusieurs (32 et 64 bits sont probables) et plusieurs copies peuvent être disponibles, ou des liens symboliques doivent être résolus. L'un d'eux peut fonctionner.
Si vous avez un système de fichiers vfat ou NTFS monté, ou un autre qui traite tous les fichiers comme 777, vous pouvez y créer votre exécutable.
$ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
S'il y a une partition montée dont vous ne vous souciez pas du contenu, sur un lecteur qui fonctionne toujours principalement, vous pouvez remplacer le contenu par une nouvelle image du même type de système de fichiers contenant les exécutables que vous souhaitez - cat
devrait être bien pour cela dans le rôle que les gens utilisent généralement dd
pour, et vous pouvez fournir l'image sur le réseau.
$ cat > /dev/sdb1 < ...
Celui-ci est plausible, mais a beaucoup d'endroits pour ne pas fonctionner en fonction de ce qui est exactement en mémoire de cette partition.
S'il existe tout fichier accessible qui dispose d'une autorisation d'exécution sur n'importe quel système de fichiers accessible en écriture, vous pouvez cat >
dedans pour remplacer le contenu par un binaire de votre choix.
$ cat > ~/test.py < ...
ctypes.sh
, qui fournit une interface de fonction étrangère à Bash, puis dlcall chmod ./netcat 511
.Vous pouvez apporter un fichier de bibliothèque dynamique foo.so
de votre construction, puis demandez à cat
de la charger en votre nom au moyen de LD_PRELOAD
, vous permettant d'exécuter du code arbitraire.
$ LD_PRELOAD=./hack.so cat /dev/null
Si vous interceptez, par exemple, open
:
int open(const char *path, int flags, ...) {
chmod(path, 0755);
return -1;
}
alors vous pouvez faire tout ce que vous devez faire là-dedans.
Ma suggestion serait d'apporter un exécutable busybox
lié statiquement comme premier élément (ou vraiment, seul élément) afin que vous ayez la gamme complète des commandes disponibles sans réutiliser le hack qui vous a amené à ce point à l'épuisement.