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/passwdLos valores de esta línea solo deben modificarse ligeramente para que la parte antes de
/etc/passwd
tenga exactamente 104 bytes de longitud:
-
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 demkdir
,ln -s
etc) -
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 diferentesetc
en el sistema; ¿por qué es así?