¿Cómo puedo entender este extracto, relacionado con el desbordamiento básico del montón?

3

Desafortunadamente, no entiendo un concepto menor en el libro "Art of Exploitation", relacionado con el desbordamiento del montón: se está agregando una nueva shell de root al archivo passwd. De página 168 :

  

Sin embargo, la naturaleza de este exploit de desbordamiento de montón en particular no permitirá que se escriba esa línea exacta en /etc/passwd , porque la cadena debe terminar con /etc/passwd . Sin embargo, si ese nombre de archivo se agrega simplemente al final de la entrada, la entrada del archivo de contraseña será incorrecta. Esto se puede compensar con el uso inteligente de un enlace de archivo simbólico, por lo que la entrada puede terminar con /etc/passwd y seguir siendo una línea válida en el archivo de contraseña. Así es como funciona:

reader@hacking:~/booksrc $ mkdir /tmp/etc
reader@hacking:~/booksrc $ ln -s /bin/bash /tmp/etc/passwd
reader@hacking:~/booksrc $ ls -l /tmp/etc/passwd
lrwxrwxrwx 19 2007-09-09 16:25 /tmp/etc/passwd -> /bin/bash
     

Ahora /tmp/etc/passwd apunta al shell de inicio de sesión / bin / bash. Esto significa que un shell de inicio de sesión válido para el archivo de contraseña también es /tmp/etc/passwd , lo que hace que la siguiente línea de archivo de contraseña sea válida:

myroot:XXq2wKiyI43A2:0:0:me:/root:/tmp/etc/passwd
     

Los valores de esta línea solo deben modificarse ligeramente para que la parte antes de /etc/passwd tenga exactamente 104 bytes de longitud:

  1. Entiendo la parte cuando el autor afirma que /tmp/etc/passwd se puede usar para vincular a /bin/bash , pero no entiendo cómo funciona esto (no hay una explicación de mkdir , ln -s etc)

  2. También, esto es probablemente muy simple, pero ¿por qué el autor declara que: "los valores de esta línea solo deben modificarse ligeramente para que la parte antes de que /etc/passwd tenga exactamente 104 bytes de longitud "? ¿Por qué se omitió /tmp en la línea anterior (es decir, por qué no se indica:" la porción antes de /tmp/etc/passwd tiene exactamente 104 bytes de longitud "? En la página siguiente, la nueva cuenta raíz se escribe en /etc/passwd , pero ¿por qué no en /tmp/etc/passwd ? He revisado, y hay 2 carpetas diferentes etc en el sistema; ¿por qué es así?

pregunta Ruslan Mushkaev 29.05.2016 - 16:52
fuente

1 respuesta

2

Hay una explicación en el libro real (quizás este sitio 'leaksource' no es confiable ;-).

  1. Usted escribe comandos: mkdir /tmp/etc ; %código%
  2. (A) El montón contiene dos búferes y 104 bytes es la distancia máxima entre el primer búfer y el búfer de asignación de archivos de datos. (B) ln -s /bin/bash /tmp/etc/passwd no se omitió, /tmp se agregará al final de la cadena que se muestra en negrita. La última parte de esa cadena que se muestra en negrita lee /etc/passwd . Entonces, cuando se complete con lo anterior, se escribirá ... :/root:/tmp en el primer búfer y :/root:/tmp/etc/passwd se rebasará en el archivo de datos del búfer @ 0x804a070 como se muestra en la página siguiente. (C & D) No escribirá a /etc/passwd porque es solo un enlace simbólico a / bin / bash.

La idea general es agregar el archivo /tmp/etc/passwd que tiene un ID de usuario de 0 para que pueda recibir privilegios de root. La forma en que se lleva a cabo esta vulnerabilidad: "el desbordamiento que necesita ser el archivo de destino" / etc / passwd "no nos permite adjuntar el archivo usando /etc/passwd (si lo usáramos como parte del desbordamiento que escribiría codificar%). Está creando myroot:XXq2wKiyI43A2:0:0:me:/root:/bin/bash por dos razones:

  1. para tener un desbordamiento en el búfer de asignación de archivos de datos de /bin/bash (es decir, el archivo en el que desea escribir).
  2. para tener un shell de inicio de sesión válido para su entrada en el archivo de contraseña SIN arruinar el sistema de destino & realmente arruinando todo tu archivo de contraseña.

una publicación de blog que podría ayudarlo. Si no está familiarizado con los comandos de linux como mkdir y ln, permítame recomendar Curso de línea de comandos de CodeAcademy o una línea de comando tutorial de entre muchos de los que puedes buscar en Google.

    
respondido por el eTo-san 29.05.2016 - 20:34
fuente

Lea otras preguntas en las etiquetas