Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

305
Visualizações
Aprendiendo python por seguridad, teniendo problemas con su

Prefacio: Soy plenamente consciente de que esto podría ser ilegal si no es en una máquina de prueba. Estoy haciendo esto como un ejercicio de aprendizaje para aprender python para pruebas de seguridad y penetración. Esto SOLO se hará en una máquina Linux que poseo y sobre la que tengo control total.

Estoy aprendiendo python como mi primer lenguaje de secuencias de comandos, con suerte, para usarlo en un puesto de seguridad. Al pedir ideas de scripts para ayudarme a aprender, alguien sugirió que creara uno para la enumeración de usuarios. La idea es simple, eliminar los nombres de usuario de /etc/passwd de una cuenta que NO tiene privilegios de sudo e intentar 'su ' en esas cuentas usando la única contraseña que tengo. Una especie de fuerza bruta inversa, en lugar de un solo usuario con una lista de contraseñas, estoy usando una sola contraseña con una lista de usuarios.

Mi problema es que no importa cómo lo haya abordado, el script se bloquea o se detiene en el mensaje "Contraseña:". He probado varios métodos, desde usar os.system y hacer eco de la contraseña, pasarla como una variable y usar el módulo pexpect. Nada parece estar funcionando.

Cuando lo busco en Google, todas las recomendaciones apuntan a usar sudo, que en este escenario no es una opción válida ya que el usuario al que tengo acceso no tiene privilegios de sudo.

Estoy más que desesperado con esto, solo para terminar el desafío. He preguntado en reddit, en IRC y en todos mis amigos magos de la programación, y más allá de echo "password" |sudo -S su, que no puede funcionar porque el usuario no está en el archivo sudoers, me estoy quedando corto. Cuando intento lo mismo con solo echo "contraseña" | su Obtengo su: debe ejecutarse desde una terminal. Esto es en un símbolo del sistema # y $.

¿Es esto posible?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El problema es que su y sus amigos leen la contraseña directamente desde la terminal de control del proceso, no desde la entrada estándar. La forma de evitar esto es lanzar su propio "pseudoterminal" ( pty ). En python, puedes hacer eso con el módulo pty . Darle una oportunidad.

Editar: la documentación para el módulo pty de python realmente no explica nada, así que aquí hay un poco de contexto de la página de manual de Unix para el dispositivo pty :

Un pseudo terminal es un par de dispositivos de caracteres, un dispositivo maestro y un dispositivo esclavo. El dispositivo esclavo proporciona a un proceso una interfaz idéntica a la descrita en tty(4). Sin embargo, mientras que todos los demás dispositivos que proporcionan la interfaz descrita en tty(4) tienen algún tipo de dispositivo de hardware detrás, el dispositivo esclavo tiene, en cambio, otro proceso que lo manipula a través de la mitad maestra del pseudo terminal. Es decir, cualquier cosa escrita en el dispositivo maestro se entrega al dispositivo esclavo como entrada y cualquier cosa escrita en el dispositivo esclavo se presenta como entrada en el dispositivo maestro. [énfasis mío]

La forma más sencilla de hacer que tu pty funcione es con pty.fork() , que usas como una bifurcación normal. Aquí hay un ejemplo simple (REALMENTE mínimo). Tenga en cuenta que si lee más caracteres de los que hay disponibles, su proceso se bloqueará: intentará leer desde una tubería abierta, pero la única forma en que el proceso en el otro extremo generará resultados será ¡si este proceso le envía algo!

 pid, fd = pty.fork() if pid == 0: # We're the child process: Switch to running a command os.execl("/bin/cat", "cat", "-n") print "Exec failed!!!!" else: # We're the parent process # Send something to the child process os.write(fd, "Hello, world!\n") # Read the terminal's echo of what we typed print os.read(fd, 14) , # Read command output print os.read(fd, 22)

Si todo va bien deberías ver esto:

 Hello, world! 1 Hello, world!

Dado que este es un ejercicio de aprendizaje, aquí está mi lista de lecturas sugeridas para usted: man fork , man execl , y los módulos subprocess y os de python (dado que ya está ejecutando subprocess, es posible que ya sepa algo de esto). Tenga en cuenta la diferencia, en Unix y en python, entre un descriptor de archivo (que es solo un número) y un objeto de file , que es un objeto de python con métodos (en C es una estructura o algo así). ¡Diviértete!

over 4 years ago · Santiago Trujillo Relatório

0

Si solo quiere hacer esto para aprender, puede crear fácilmente un entorno falso con su propio archivo passwd falso. Puede usar algunos de los métodos de cifrado integrados de Python para generar contraseñas. esto tiene la ventaja de los casos de prueba adecuados, usted sabe lo que está buscando y dónde debe tener éxito o fallar.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda