Rm -rf "sobreviviente"

  
 

Para el entretenimiento, decidí iniciar un servidor Linux, luego ejecutar el comando " rm – rf /" como usuario root, y luego observar qué archivos o instrucciones sobrevivirán. ¡El resultado es nada! Así que tiene que agregar — no-preserce-root para volver a intentarlo: # rm -rf --no-preserve-root /

Al presionar " Ingresar ", algunas herramientas importantes como /Bin /ls /bin /cat /bin /chmod /usr /bin /file

desaparecerá! Pero su conexión SSH actual y su terminal bash aún están allí, lo que significa que todas las instrucciones integradas relacionadas con bash no se ven afectadas, como el eco.

Conviértase en Bash Daren root @ rmrf: /# ls-bash: /bin /ls: No existe tal archivo o directorio

Ejecute el comando anterior y descubra que no hay ls disponible, pero echo y fileglobs Todavía Con estos "sobrevivientes", ¿qué podemos hacer? Raíz @ rmrf: /# echo * dev proc run sys # echo /dev /pts /* /dev /pts /0 /dev /pts /3 /dev /pts /ptmx

¡Nota! /dev, /proc, /run, /sys todavía están allí, debemos guardarlos. Si tiene el comando ls, será más fácil leer el contenido del directorio. Root @ rmrf: /# para ii en /dev /pts /*; echo echo $ ii; done /dev /pts /0 /dev /pts /3 /dev /pts /ptmx

Muchos usuarios de Reddit señalan , printf todavía está disponible. CAMH dice: printf formateará los parámetros en la cadena de salida a su vez. Root @ rmrf: /# ls () {printf '% s \\ n' $ {1: + $ {1% /} /} *;}

Ya que podemos definir funciones en bash, entonces podemos Herramienta ls autoconstruida, aunque la función no es perfecta. Raíz @ rmrf: /# ls () {printf '% s \\ n' $ {1: + $ {1% /} /} *;} -bash: error de sintaxis cerca del token inesperado `('

No, esta operación debería ser completamente legal. ¿Ya se asignó ls, o es un alias para otros comandos? Root @ rmrf: /# type lsls tiene un alias de `ls --color = auto '

Por lo tanto, nuestras instrucciones anteriores se han extendido a ls – color = auto () {printf ‘% s \\ n ’ $ {1: + $ {1% /} /} *;}. Así podemos comenzar Use la directiva unalias para eliminar la asociación entre ls y ls — color. Root @ rmrf: /# ls () {for ii in $ 1 /*; do echo $ ii; done} root @ rmrf: /# ls /dev /proc /run /sysroot @ rmrf: /# ls /dev /dev /pts

Almacene la función en el archivo utils.sh root @ rmrf: /# echo 'ls () {for ii in $ 1 /*; echo echo $ Ii; hecho} '> > utils.shroot@rmrf: /# source utils.sh

¿Cómo se implementa el comando cat? Con lectura! Lea uno de los sobrevivientes, usando lectura combinada con tuberías y pesado ¡Orientación, se forma básicamente un gato básico! Root @ rmrf: /# (mientras se lee la línea; haga eco de " $ line "; hecho) < utils.shls () {for ii in $ 1 /*; Echo $ ii; done}

En combinación con el método anterior de "survivor", algunos métodos pueden restaurarse y echo puede escribir cualquier característica de múltiples bytes, podemos reconstruir el sistema de herramientas de Linux. Y puede obtener el binario que queremos directamente a través de curl o wget. En primer lugar, remítase a otros para obtener busybox. Busybox es la navaja suiza para Linux incrustado, wget incrustado, dd, tar y muchas otras herramientas. Eusebe î Cómo obtener una versión escapada de un busybox, no entraré en detalles aquí.

Pero todavía hay un problema.

Incluso si hacemos eco de todos los bytes necesarios para el binario completo, estos archivos binarios no se ejecutarán. No se puede iniciar la casilla de ocupado! La primera solución a este problema fue encontrar algunos programas ejecutables y luego sobrescribirlos con eco. Hemos realizado dichas modificaciones a los archivos en /usr y /bin, pero esto es un poco más complicado.

Puede usar el comodín de shell y bash para filtrar archivos con grupos ejecutables, recuerde excluir el directorio. Ejecutable () {si [[(! -D $ 1) &&-x $ 1]]; luego echo " $ 1 "; fi}

¡Encontré el ejecutable! Raíz @ rmrf: /# para ii en /*; hacer ejecutable $ ii; doneroot @ rmrf: /# para ii en /* /*; hacer ejecutable $ ii; doneroot @ rmrf: /# para ii en /* /* /*; ejecutable $ ii; done /proc /1107 /exe /proc /1136 /exe /proc /1149 /exe /proc /1179 /exe /proc /1215 /exe /proc /1217 /exe /proc /1220 /exe /proc /1221 /exe /proc /1223 /exe /proc /1248 /exe /proc /1277 /exe /proc /1468 /exe /proc /1478 /exe /proc /1625 /exe /proc /1644 /exe /proc /1 /exe /proc /374 /exe /proc /378 /exe /proc /471 /exe /proc /616 /exe /proc /657 /exe /proc /self /exe

¡Genial! Pero no se preocupe, estos son solo archivos de enlace vinculados al ejecutable. El archivo original ya no existe en el disco. Entonces ahora tenemos que reescribir el archivo ejecutable () para excluir estos enlaces blandos. Raíz @ rmrf: /# ejecutable () {si [[(! -D $ 1) &&(! -H $ 1) &&-x $ 1]]; luego echo " $ 1 "; fi} raíz @rmrf: /# for ii in /* /* /*; do ejecutable $ ii; doneroot @ rmrf: /# for ii in /* /* /* /*; do ejecutable $ ii; doneroot @ rmrf: /# for Ii in /* /* /* /* /do; haga ejecutable $ ii; doneroot @ rmrf: /# for ii in /* /* /* /* /* /*; do ejecutable $ ii; done

pérdida, sin salida. Tal vez puedas aprovechar las cosas del nivel del kernel. Después de todo, podemos usar la combinación de teclas Magic Sysrq para reiniciar el busybox. Raíz @ rmrf: /# echo 1 > /proc /sys /kernel /sysrqroot @ rmrf: /# echo " b " > /proc /sysrq-trigger

Hemos estado montando el tigre ahora, viernes Seguiré estudiando. Gracias por su atención, si encuentra una buena manera de obtener grupos ejecutables, hágamelo saber.

ACTUALIZACIÓN: el usuario de Reddi throw_away5046 propone una solución: una solución completa para esto.

Obtenga un cuadro de confianza $ mkdir para arquitectura nativa $ (xxd -p -l 16 /dev /urandom) $ cd $ _ $ apt-get descargue busybox-static $ dpkg -x * .deb. $ alias encode = '{tr -d \\\\ n

Copyright © Conocimiento de Windows All Rights Reserved