Share
## https://sploitus.com/exploit?id=3024F48C-9E1A-575E-A40B-05AFFA839464
# WordPress Plugin - Elementor 3.6.0 3.6.1 3.6.2 Thực thi mã từ xa

```

Ngày: 16 tháng 4 năm 2023
Khai thác Tác giả: Việt Hùng (https://github.com/phanthibichtram12)
Trang chủ của nhà cung cấp: https://elementor.com/
Link phần mềm: https://wordpress.org/plugins/elementor/advanced/ (kéo xuống chọn phiên bản)
Phiên bản: 3.6.0, 3.6.1, 3.62
Đã thử nghiệm trên: WordPress 5.9.3 (không phụ thuộc vào hệ điều hành vì cách khai thác này KHÔNG cung cấp tải trọng)
CVE : CVE-2022-1329
```

## MÔ TẢ LỖI

Plugin WordPress có tên Elementor (v. 3.6.0, 3.6.1, 3.6.2) có một lỗ hổng cho phép bất kỳ người dùng được xác thực nào tải lên và thực thi bất kỳ tệp PHP nào.

Lỗ hổng này, trong OWASP TOP 10 2021, được đặt ở vị trí số 1 (Kiểm soát truy cập bị hỏng)

Tệp chứa lỗ hổng này là elementor/core/app/modules/onboarding/module.php

Ở cuối tập tin này, bạn có thể tìm thấy mã này:
```
add_action( 'admin_init', function() {
  nếu ( wp_doing_ajax() &&
  isset( $_POST['action'] ) &&
  isset( $_POST['_nonce'] ) &&
  wp_verify_nonce( $_POST['_nonce'], Ajax::NONCE_KEY )
  ) {
  $this->maybe_handle_ajax();
  }
  } );
```

Mã này được kích hoạt bất cứ khi nào BẤT KỲ tài khoản người dùng nào truy cập /wp-admin
Để làm việc chúng ta cần 4 điều sau:

1. Cuộc gọi phải là "cuộc gọi ajax" (wp_doing_ajax()) và phương thức phải là POST. Để thực hiện việc này, chúng ta chỉ cần gọi /wp-admin/admin-ajax.php
2. Tham số "action" phải là "elementor_upload_and_install_pro" (xem hàm có tên Maybe_handle_ajax() trong cùng một tệp)
3. Tham số "_nonce" phải được truy xuất sau khi đăng nhập bằng cách kiểm tra trang /wp-admin (lỗi khai thác này thực hiện điều này trong chức năng DoLogin)
4. Tham số "fileToUpload" phải chứa kho lưu trữ ZIP mà chúng tôi muốn tải lên (xem hàm có tên upload_and_install_pro() trong cùng một tệp)

Tệp chúng tôi tải lên phải có cấu trúc sau:

1. Nó phải là tệp ZIP. Bạn có thể đặt tên nó theo ý muốn.
2. Nó phải chứa một thư mục có tên "elementor-pro"
3. Thư mục này phải chứa file có tên "elementor-pro.php"

Tệp này sẽ là tải trọng CỦA BẠN (ví dụ: PHP Reverse Shell hoặc bất kỳ thứ gì khác)
CẢNH BÁO: Plugin giả mạo mà chúng tôi tải lên sẽ được Elementor kích hoạt, điều này có nghĩa là mỗi lần chúng tôi truy cập bất kỳ trang nào, chúng tôi sẽ kích hoạt tải trọng của mình.
Ví dụ: nếu nó cố gắng kết nối với máy chủ ngoại tuyến, điều đó có thể dẫn đến Từ chối Dịch vụ.
Để ngăn chặn điều này, tôi khuyên bạn nên sử dụng một số biến để kích hoạt tải trọng.
Một cái gì đó như thế này (truy cập Anypage.php?activate=1 để tiếp tục với tải trọng thực tế):

```
if (!isset($_GET['activate']))
return;
```