¿Cómo ganar un shell?

8

Estoy haciendo un ejercicio (exploit-exercises.com) que me obliga a obtener acceso a un shell que se ejecuta como otro usuario.

Mi pregunta es esta: puedo crear una aplicación que está garantizada para ser ejecutada por el otro usuario. ¿Cómo puedo usar esto para obtener acceso al shell bajo sus privilegios / cuenta?

Es menos útil para mí solo poder ejecutar comandos como ellos y más útil para poder realmente soltar en un shell como , porque hay una aplicación que verifica si ' He logrado comprometer la cuenta correctamente, por lo que me gustaría ejecutarlo de forma interactiva.

Lo primero que se me ocurrió fue crear un demonio netcat y ejecutar mis comandos a través de eso, pero la opción -e no parece existir en esta VM comprometida.

¿Pensamientos / ideas? He estado atormentando mis cerebros aquí por un tiempo, ¡y sé que esto es simple!

EDITAR: No estoy buscando una respuesta / spoiler para el ejercicio en el que estoy atascado, pero siento que hay una brecha en la comprensión fundamental que tengo de la seguridad del sistema. Me imagino que si no puedo descubrir cómo explotar este agujero, me falta algo de información. Quiero esa información fundamental, no una respuesta al problema real al que me estoy enfrentando.

    
pregunta Harv 03.03.2012 - 01:54
fuente

3 respuestas

6

Si puede crear un proceso que se ejecutará como el usuario víctima, ya tiene acceso de shell bajo sus privilegios. Cualquier cosa que la víctima pueda hacer, su programa puede hacer. ¡Así que ya has ganado, simplemente no te has dado cuenta todavía!

(Un ejemplo simple: ¿Por qué necesita un shell? Si hay algo que quiere hacer con los privilegios de la víctima, ¿por qué no inscribe en el programa qué acciones desea hacer?)

Si realmente quieres configurar un shell interactivo, eso también es factible. Podría decirte varias formas de hacerlo, pero dijiste que no quieres spoilers, así que déjame intentar darte algunos consejos sin responder de forma directa.

  1. Usted mencionó que ejecutar netcat sería una forma de lograr sus objetivos, sin embargo, la versión de netcat instalada en su sistema no está actualizada. Si Alice quisiera instalar un programa para su propio uso, ¿podría? Si tienes acceso a la cuenta de Alice y puedes hacer cualquier cosa que Alice pueda hacer, ¿te da alguna idea?

  2. ¿Cómo se implementa netcat internamente? ¿Como funciona? ¿Podrías hacer algo así por ti mismo?

  3. Digamos que has comprometido la cuenta de Alice. ¿Cuáles son algunas maneras en que Alice podría iniciar sesión en su cuenta? Claro, ella podría iniciar sesión con su contraseña de inicio de sesión, pero ¿qué más?

  4. ¿Hay algo que Alice pueda hacer para dar a uno de sus amigos la posibilidad de iniciar sesión en su cuenta, si quisiera? ¿Cuáles son algunas maneras en que ella podría hacer eso? Si tienes la capacidad de hacer lo que Alice puede hacer, ¿te da alguna idea de algo que podrías hacer para acceder a su cuenta?

  5. Si ejecuta ls -a desde el directorio de inicio de algún usuario, ¿qué ve? ¿Qué hacen esos archivos locos? ¿Eso te da alguna idea?

¡Espero que sea suficiente para que pienses!

    
respondido por el D.W. 03.03.2012 - 06:59
fuente
2

Una forma de obtener un shell como usuario es encontrar un ejecutable setuid corriendo como ese usuario. Lo ideal es que este ejecutable sea un shell, como / bin / bash, en este caso, se colocaría en un shell que se ejecuta como ese usuario. Si este no es el caso, siempre puede corromper la memoria del ejecutable en tiempo de ejecución utilizando un desbordamiento de búfer. Tener un ejecutable setuid que también se pueda escribir globalmente nunca ocurrirá en un archivo real, pero este es un juego de guerra poco realista, por lo que nunca se sabe.

Otra opción es escribir en el archivo /home/USER/.bashrc , que podría ser de escritura global o podría modificarse si puede ejecutar un comando como ese usuario. Este script será ejecutado por ese usuario cada vez que inicie sesión. Si este usuario es un sudo'er, puede modificar el archivo .bashrc para controlar la variable de entorno $PATH y engañar al usuario para que ejecute ejecutable de proxy sudo falso para obtener privilegios root .

    
respondido por el rook 03.03.2012 - 04:57
fuente
1

La forma más sencilla que he visto es simplemente compilar un ejecutable simple que escuche en un puerto de red, y en conectar bifurca una copia de /bin/bash , asignando el socket de red como entrada / salida estándar para shell ( vea man dup2 ). Luego, cuando te conectas, te presentan un shell bash. Son alrededor de 10 a 20 líneas de código o algo así, en total.

Esta es la funcionalidad básica detrás de la opción -e de netcat, que generalmente está deshabilitada en el momento de la compilación, por lo que no se puede usar [tan fácilmente] para ayudar a las violaciones de seguridad.

En mi experiencia, sin embargo, la mayoría de los piratas informáticos prefieren crear su propio "shell" personalizado en perl, que tiene un conjunto de comandos especializado, autenticación y un montón de inglés terrible. Además, conectarse a un servidor IRC privado y escuchar los comandos de esa manera es muy popular por razones que no creo que tenga que explicar.

    
respondido por el tylerl 03.03.2012 - 21:49
fuente

Lea otras preguntas en las etiquetas