Comment résoudre ce casse-tête de sécurité dans bash?

Dans le cadre de ma pratique avec les outils Linux, j’ai essayé des “défis bash” aléatoires et je suis coincé avec. Je suis dans un shell bash restreint où je ne peux pas cd , et je ne peux pas exécuter de commandes avec des barres obliques. La redirection de sortie est également indisponible. La variable d’environnement PATH est également définie pour désigner un sous-ensemble d’outils très limité. À savoir:

 awk,cmp,cut,egrep,find,grep,gzip,hostname,less,lsof,netstat,nm,ps,sed,ssh-agent, sum,tar,uname,vi,whoami,xz,zcat,cat,column,diff,fgrep,gdb,gzcat,head, ifconfig,ls,mv,nl,ping,sort,ssortingngs,tail,top,uniq,xargs,xzcat 

Maintenant, en utilisant awk je peux accéder à un shell illimité – et la question du puzzle est la suivante: “Si vous disposez d’un temps limité avant que awk soit retiré de la liste des commandes utilisables – existe-t-il un moyen de shell sans ressortingction à l’avenir? Le répertoire de base sous cet utilisateur n’est pas accessible en écriture.

Sous le shell awk sans ressortingction, j’ai essayé de faire une copie de /bin/sh dans un autre emplacement /tmp/writable … mais cela ne fonctionne pas parce que je ne peux plus cd dans / tmp / writable and i can't run / tmp / writable / sh` car il contient des barres obliques. Je ne peux pas simplement faire un lien logiciel, pour la même raison. En supposant que je ne peux pas laisser quelque chose de permanent dans les scripts de connexion (facilement détectable), y a-t-il une autre approche?

Puisque chsh est setuid root, vous pouvez modifier votre shell de connexion pour qu’il soit illimité en utilisant awk (je suppose que vous pouvez l’exécuter, car vous pouvez exécuter le shell non restreint). Ensuite, la prochaine fois que vous vous connecterez, vous n’aurez plus de shell restreint.

Autrement, comme le souligne Brian Campbell, il existe d’autres moyens d’accéder à une coquille sans ressortingction en plus de awk .

Si vous disposez de GDB, vous pouvez simplement appeler l’une des fonctions exec partir de là pour obtenir un shell illimité

 $ gdb cat (gdb) run ^C (gdb) call execl("/bin/sh", 0); $ 

Et maintenant vous êtes dans une coquille sans ressortingction.