Estoy tratando de descubrir cómo imitar el paso de un archivo a un programa y, en lugar de pasar el archivo, pasar una variable de Python que tiene la información que el programa necesita.

La sintaxis que necesito imitar:

msfconsole < setofcommands.txt 2>/dev/null

Lo que me gustaría hacer:

answer = os.system('msfconsole < ' + myvariable + ' 2>/dev/null')

También estaría extremadamente feliz si alguien supiera cómo interactuar con algo como msfconsole durante un período de tiempo para que cuando el shell de msfconsole esté abierto, pueda hacer que Python escriba continuamente diferentes comandos sin tener que reiniciar una nueva aplicación cada vez que quiera. para escribir una serie de comandos

Muchas gracias de antemano.

2
S-Ns-3 4 ene. 2012 a las 05:06
3
 – 
Ignacio Vazquez-Abrams
4 ene. 2012 a las 05:07
Compruebe este hilo espero que ayude: stackoverflow.com/questions/8720838/…
 – 
ASK Arjun
15 ago. 2017 a las 10:20

1 respuesta

La mejor respuesta

En lugar de os.system, debe utilizar subproceso:

import subprocess
p=subprocess.Popen(['msfconsole'], stdin=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate(myvariable)

Tenga en cuenta que la comunicación se bloqueará hasta la terminación. En general, la comunicación de tipo interactivo con otro proceso solo a través de stdin / stdout es un problema difícil, ya que debe saber cómo el otro proceso delimita los extremos de los mensajes.

En el caso de metasploit, debe utilizar la API XMLRPC en lugar de la herramienta interactiva msfconsole.

3
phihag 4 ene. 2012 a las 05:19
El archivo que paso tiene la siguiente sintaxis: db_driver mysql \ n db_connect *: * @ localhost ok. ¿Usaría la misma sintaxis para la variable y cómo agregaría un nuevo comando para interactuar con el shell abierto si mi variable está predefinida puedo agregar nuevos comandos a la variable y se ejecutarán en orden?
 – 
S-Ns-3
4 ene. 2012 a las 05:17
Esto es para el uso del complemento nessus integrado en msfconsole
 – 
S-Ns-3
4 ene. 2012 a las 05:23
Si ya tiene los datos almacenados en un archivo abierto, simplemente pase el identificador del archivo como stdin=. Pero suponiendo que desee tener el mismo efecto que pasar el archivo, su contenido variable debería ser el contenido del archivo. Y por supuesto, si modifica el contenido de antemano, las modificaciones surtirán efecto. Sin embargo, msfconsole tampoco es la forma correcta de crear un script para Nessus. ¿Ha probado pynessus?
 – 
phihag
4 ene. 2012 a las 05:31
Estoy muy emocionado de probar pynessus, muchas gracias por su respuesta, ya que realmente me ha ayudado. ¿Conoce una extensión de Python de msfconsole? La documentación para XMLRPC es muy pobre
 – 
S-Ns-3
4 ene. 2012 a las 05:41
Dado que msfconsole es un programa de línea de comandos y la API XMLRPC es más adecuada para su uso desde Python, no existe una biblioteca de Python para msfconsole. Sin embargo, existen ejemplos y ayudantes para integrar metasploit a través de XMLRPC .
 – 
phihag
4 ene. 2012 a las 05:49