Admin-ajax php khai thác db

Vào tháng 10 năm nay, chúng tôi đã nhận được báo cáo từ ngocnb và khuyenn từ Công ty cổ phần GiaoHangTietKiem về lỗ hổng SQL injection trong WordPress. Lỗi này có thể cho phép kẻ tấn công để lộ dữ liệu được lưu trữ trong cơ sở dữ liệu được kết nối. Lỗ hổng này gần đây đã được giải quyết là CVE-2022-21661 (ZDI-22-020). Blog này đề cập đến nguyên nhân gốc rễ của lỗi và xem xét cách nhóm WordPress đã chọn để giải quyết nó. Đầu tiên, đây là một video nhanh chứng minh lỗ hổng

lỗ hổng

Lỗ hổng xảy ra trong lớp WordPress Query (WP_Query). Đối tượng WP_Query được sử dụng để thực hiện các truy vấn tùy chỉnh tới cơ sở dữ liệu WordPress. Đối tượng này được sử dụng bởi các plugin và chủ đề để tạo hiển thị bài đăng tùy chỉnh của họ.  

Lỗ hổng xảy ra khi plugin sử dụng lớp dễ bị tấn công. Một plugin như vậy là Elementor Custom Skin. Đối với bài đăng này, chúng tôi đã kiểm tra lỗ hổng trên WordPress phiên bản 5. 8. 1 và plugin Elementor Custom Skin phiên bản 3. 1. 3

Trong plugin này, lớp WP_Query dễ bị tấn công được sử dụng trong phương thức get_document_data của phân trang ajax. php

Hình 1- - wordpress/wp-content/plugins/ele-custom-skin/includes/ajax-pagination. php

Phương thức get_document_data được gọi khi yêu cầu được gửi tới wp-admin/admin-ajax. php và tham số hành động là ecsload.  

Hình 2 - wordpress/wp-admin/admin-ajax. php

quản trị-ajax. trang php kiểm tra xem yêu cầu có được thực hiện bởi người dùng được xác thực hay không. Nếu yêu cầu đến từ người dùng không được xác thực, admin-ajax. php gọi một hành động Ajax không được xác thực. Ở đây, yêu cầu được gửi mà không cần xác thực để hành động Ajax không được xác thực được gọi, đó là wp_ajax_nopriv_ecsload

Tìm kiếm chuỗi “wp_ajax_nopriv_ecsload” cho thấy rằng đó là một tên hook có trong phân trang ajax. trang php

Hình 3 - wordpress/wp-content/plugins/ele-custom-skin/includes/ajax-pagination. php

Tên hook wp_ajax_nopriv_ecsload đề cập đến chức năng gọi lại get_document_data. Điều này có nghĩa là phương thức do_action gọi phương thức get_document_data

Phương thức get_document_data tạo một đối tượng WP_Query. Việc khởi tạo đối tượng WP_Query gọi phương thức get_posts sau

Hình 4 - wordpress/wp-gồm/class-wp-query. php

Trước tiên, phương thức get_posts phân tích cú pháp các tham số do người dùng cung cấp. Tiếp theo, nó gọi phương thức get_sql, phương thức này cuối cùng sẽ gọi get_sql_for_clause để tạo các mệnh đề của câu lệnh SQL từ dữ liệu do người dùng cung cấp. get_sql_for_clause gọi clean_query để xác thực chuỗi do người dùng cung cấp. Tuy nhiên, phương pháp không thể xác thực tham số thuật ngữ nếu tham số phân loại trống và giá trị của tham số trường là chuỗi “term_taxonomy_id”. Giá trị của tham số thuật ngữ sau này được sử dụng trong câu lệnh SQL

Hình 5 - wordpress/wp-includes/class-wp-tax-query. php

Lưu ý rằng biến sql được trả về bởi get_sql() được thêm vào câu lệnh SQL SELECT và được tập hợp bằng các chuỗi được trả về từ phương thức WP_Tax_Query->get_sql(). Sau đó, trong phương thức get_posts, truy vấn này được thực thi bằng phương thức $wpdb->get_col(), khi xảy ra điều kiện SQL injection

Lỗ hổng này có thể bị khai thác để đọc cơ sở dữ liệu WordPress

Xem kích thước đầy đủ

Mảnh vụn

Bản vá cho địa chỉ CVE-2022-21661 thêm một số kiểm tra bổ sung vào tham số điều khoản để giúp ngăn chặn các lần tiêm SQL tiếp theo xảy ra

Xem kích thước đầy đủ

Hình 7 - Phương thức clean_query của wordpress/wp-includes/class-wp-tax-query. php

Phần kết luận

Các cuộc tấn công tích cực vào các trang web WordPress thường tập trung vào các plugin tùy chọn hơn là cốt lõi của chính WordPress. Đó là trường hợp đầu năm nay khi một lỗi trong plugin Trình thiết kế sản phẩm ưa thích được báo cáo là đang bị tấn công tích cực. Tương tự, một lỗ hổng tải lên tệp trong plugin Contact Form 7 cũng được phát hiện là bị khai thác bởi các cảm biến của Trend Micro. Trong trường hợp này, lỗi được phát hiện thông qua các plugin, nhưng tồn tại trong chính WordPress. Mặc dù đây là vấn đề tiết lộ thông tin hơn là thực thi mã nhưng dữ liệu bị lộ có thể chứng minh giá trị đối với những kẻ tấn công. Chúng tôi sẽ không ngạc nhiên khi thấy lỗi này trong các cuộc tấn công tích cực trong tương lai gần. Chúng tôi khuyên bạn nên áp dụng bản vá hoặc thực hiện hành động khắc phục khác càng sớm càng tốt. Đặc biệt cảm ơn ngocnb và khuyenn từ GiaoHangTietKiem JSC đã báo cáo điều này với ZDI. Bạn có thể đọc phân tích của họ về lỗi tại đây

Trang này chứa thông tin chi tiết về plugin WordPress check_ajax_referer() Function SQL Injection Nessus bao gồm các khai thác và PoC có sẵn được tìm thấy trên GitHub, trong Metasploit hoặc Exploit-DB để xác minh lỗ hổng này

Tổng quan về plugin


TÔI. 25291
Tên. WordPress check_ajax_referer() Chức năng SQL Injection
tên tệp. wordpress_ajax_referer_sql_injection. mũi
Lỗ hổng được xuất bản. 2007-05-21
Plugin này đã được xuất bản. 2007-05-23
Thời gian sửa đổi cuối cùng. 2021-01-19
Phiên bản plugin. 1. 23
Loại plugin. Xa xôi
Gia đình plugin. lạm dụng CGI
phụ thuộc. wordpress_detect. mũi
Mục KB bắt buộc [?]. đã cài đặt_sw/WordPress, www/PHP

Thông tin lỗ hổng


mức độ nghiêm trọng. Cao
Lỗ hổng được xuất bản. 2007-05-21
Bản vá đã xuất bản. 2007-05-21
CVE [?]. CVE-2007-2821
CPE [?]. cpe. /Một. báo chí. báo chí

Tóm tắt

Máy chủ web từ xa chứa tập lệnh PHP dễ bị tấn công SQL injection

Sự miêu tả

Phiên bản WordPress trên máy chủ từ xa không thể vệ sinh đầu vào đúng cách cho tham số 'cookie' của 'wp-admin/admin-ajax. php' trước khi sử dụng nó trong chức năng 'check_ajax_referer' trong các truy vấn cơ sở dữ liệu. Bất kể cài đặt 'magic_quotes_gpc' của PHP là gì, kẻ tấn công từ xa, không được xác thực có thể lợi dụng vấn đề này để khởi chạy các cuộc tấn công SQL injection đối với ứng dụng bị ảnh hưởng, bao gồm cả việc phát hiện mật khẩu băm của người dùng WordPress

Giải pháp

Nâng cấp lên phiên bản 2. 2. 1 hoặc muộn hơn

Khai thác công cộng


(Các) Cổng Mạng Mục tiêu. 80
(Các) Tài sản Mục tiêu. Dịch vụ/www
Khai thác có sẵn. Đúng (Khai thác-DB, GitHub)
Khai thác dễ dàng. Không cần khai thác

Dưới đây là danh sách các khai thác và PoC đã biết công khai để xác minh lỗ hổng WordPress check_ajax_referer() Function SQL Injection

Trước khi chạy bất kỳ khai thác nào đối với bất kỳ hệ thống nào, hãy đảm bảo rằng bạn được chủ sở hữu của (các) hệ thống đích ủy quyền để thực hiện hoạt động đó. Trong mọi trường hợp khác, đây sẽ được coi là một hoạt động bất hợp pháp

CẢNH BÁO. Cẩn thận với việc sử dụng các khai thác chưa được xác minh từ các nguồn như GitHub hoặc Exploit-DB. Những khai thác và PoC này có thể chứa phần mềm độc hại. Để biết thêm thông tin, xem

Thông tin rủi ro


Vectơ CVSS V2 [?]. AV. không áp dụng. L/Âu. không áp dụng. SỐ PI. P/A. THỂ DỤC. H/RL. CỦA/RC. Điểm cơ sở CCVSS. 7. 5 (Cao)Điểm phụ tác động. 6. 4Điểm phụ về khả năng khai thác. 10. 0CVSS Điểm tạm thời. 6. 5 (Trung bình)Điểm môi trường CVSS. NA (Không có)Chỉ số phụ tác động đã sửa đổi. NAĐiểm CVSS tổng thể. 6. 5 (Trung bình)

Đi

Nguồn plugin


Đây là wordpress_ajax_referer_sql_injection. mã nguồn plugin nasl nessus. Tập lệnh này là Bản quyền (C) 2007-2021 Tenable Network Security, Inc

#%NASL_MIN_LEVEL 70300
#
# (C) Tenable Network Security, Inc.
#

include('deprecated_nasl_level.inc');
include('compat.inc');

if (description)
{
  script_id(25291);
  script_version("1.23");
  script_set_attribute(attribute:"plugin_modification_date", value:"2021/01/19");

  script_cve_id("CVE-2007-2821");
  script_bugtraq_id(24076);
  script_xref(name:"EDB-ID", value:"3960");

  script_name(english:"WordPress check_ajax_referer() Function SQL Injection");
  script_summary(english:"Attempts to generate a SQL error.");

  script_set_attribute(attribute:"synopsis", value:
"The remote web server contains a PHP script that is prone to a SQL
injection attack.");
  script_set_attribute(attribute:"description", value:
"The version of WordPress on the remote host fails to properly sanitize
input to the 'cookie' parameter of the 'wp-admin/admin-ajax.php'
script before using it in the 'check_ajax_referer' function in
database queries. Regardless of PHP's 'magic_quotes_gpc' setting, an
unauthenticated, remote attacker can leverage this issue to launch SQL
injection attacks against the affected application, including the
discovery of password hashes of WordPress users.");
  script_set_attribute(attribute:"see_also", value:"http://www.waraxe.us/advisory-50.html");
  script_set_attribute(attribute:"see_also", value:"https://seclists.org/bugtraq/2007/May/316");
  script_set_attribute(attribute:"solution", value:"Upgrade to version 2.2.1 or later.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P");
  script_set_cvss_temporal_vector("CVSS2#E:H/RL:OF/RC:C");
  script_set_attribute(attribute:"exploitability_ease", value:"No exploit is required");
  script_set_attribute(attribute:"exploit_available", value:"false");

  script_set_attribute(attribute:"vuln_publication_date", value:"2007/05/21");
  script_set_attribute(attribute:"patch_publication_date", value:"2007/05/21");
  script_set_attribute(attribute:"plugin_publication_date", value:"2007/05/23");

  script_set_attribute(attribute:"plugin_type", value:"remote");
  script_set_attribute(attribute:"cpe", value:"cpe:/a:wordpress:wordpress");
  script_end_attributes();

  script_category(ACT_ATTACK);
  script_family(english:"CGI abuses");

  script_copyright(english:"This script is Copyright (C) 2007-2021 Tenable Network Security, Inc.");

  script_dependencies("wordpress_detect.nasl");
  script_require_keys("installed_sw/WordPress", "www/PHP");
  script_require_ports("Services/www", 80);

  exit(0);
}

include("audit.inc");
include("global_settings.inc");
include("misc_func.inc");
include("http.inc");
include("url_func.inc");
include("install_func.inc");

app = "WordPress";
get_install_count(app_name:app, exit_if_zero:TRUE);

port = get_http_port(default:80, php:TRUE);

install = get_single_install(
  app_name : app,
  port     : port
);

dir = install['path'];
install_url = build_url(port:port, qs:dir);

# Try to exploit the flaw to generate a SQL error.
exploit = "'" + SCRIPT_NAME;
# nb: this works as long as the USER_COOKIE and PASS_COOKIE are
#     derived from COOKIEHASH / site url as in wp-settings.php.
site = "http://" + get_host_name();
if (port != 80) site = site + ":" + port;
if (strlen(dir)-1 == '/') dir = substr(dir, 0, strlen(dir)-2);
site = site + dir;
cookiehash = hexstr(MD5(site));

# nb: we need to encode (twice) the single quote.
cookie = urlencode(
  str        : exploit,
  unreserved : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_!~*()-]/"
);
cookie =
  "wordpressuser_" + cookiehash + "=" + cookie + "; " +
  "wordpresspass_" + cookiehash + "=x";

u = dir + "/wp-admin/admin-ajax.php?cookie=" + urlencode(str:cookie);
r = http_send_recv3(method: "GET", port:port, item: u, exit_on_fail: TRUE);

# There's a problem if we see an error involving our exploit for the user name.
if ("WordPress database error" >< r[2])
{
  res2 = str_replace(find:"'", replace:"'", string:r[2]);
  if (" WHERE user_login = '" + exploit + "'" >< res2)
  {
    set_kb_item(name: 'www/'+port+'/SQLInjection', value: TRUE);
    security_hole(port);
    exit(0);
  }
}
else audit(AUDIT_WEB_APP_NOT_AFFECTED, app, install_url);

Phiên bản mới nhất của tập lệnh này có thể được tìm thấy ở những vị trí này tùy thuộc vào nền tảng của bạn

  • Linux / Unix
    /opt/nessus/lib/nessus/plugins/wordpress_ajax_referer_sql_injection.nasl
  • các cửa sổ
    C:\ProgramData\Tenable\Nessus\nessus\plugins\wordpress_ajax_referer_sql_injection.nasl
  • hệ điều hành Mac
    /Library/Nessus/run/lib/nessus/plugins/wordpress_ajax_referer_sql_injection.nasl

Đi

Làm thế nào để chạy


Đây là cách chạy WordPress check_ajax_referer() Function SQL Injection như một plugin độc lập thông qua giao diện người dùng web Nessus (https. //máy chủ cục bộ. 8834/)

  1. Nhấp để bắt đầu Quét mới
  2. Chọn Quét nâng cao
  3. Điều hướng đến tab Plugin
  4. Ở góc trên cùng bên phải, nhấp để Tắt tất cả các plugin
  5. Ở bảng bên trái, chọn họ plugin lạm dụng CGI
  6. Trên bảng bên phải, chọn WordPress check_ajax_referer() Hàm plugin SQL Injection ID 25291
  7. Chỉ định mục tiêu trên tab Cài đặt và nhấp để Lưu quá trình quét
  8. Chạy quét

Dưới đây là một vài ví dụ về cách chạy plugin trong dòng lệnh. Lưu ý rằng các ví dụ bên dưới minh họa cách sử dụng trên nền tảng Linux/Unix

sử dụng cơ bản

/opt/nessus/bin/nasl wordpress_ajax_referer_sql_injection.nasl -t 

Chạy plugin với thông báo theo dõi kiểm toán trên bảng điều khiển

/opt/nessus/bin/nasl -a wordpress_ajax_referer_sql_injection.nasl -t 

Chạy plugin với việc thực thi tập lệnh theo dõi được ghi vào bảng điều khiển (hữu ích để gỡ lỗi)

/opt/nessus/bin/nasl -T - wordpress_ajax_referer_sql_injection.nasl -t 

Chạy plugin bằng cách sử dụng tệp trạng thái cho mục tiêu và cập nhật nó (hữu ích khi chạy nhiều plugin trên mục tiêu)

Quản trị viên Ajax PHP là gì?

Quản trị viên-ajax. tệp php chứa tất cả mã để định tuyến các yêu cầu Ajax trên WordPress . Mục đích chính của nó là thiết lập kết nối giữa máy khách và máy chủ bằng Ajax. WordPress sử dụng nó để làm mới nội dung của trang mà không cần tải lại, do đó làm cho nó trở nên năng động và tương tác với người dùng.

Các lỗ hổng trong WordPress 5 là gì. 8 3?

Nhóm phát triển WordPress đã phát hành phiên bản WordPress 5. 8. 3 để giải quyết bốn lỗ hổng, hai trong số đó được đánh giá là có mức độ nghiêm trọng cao. Bộ này bao gồm một lần tiêm SQL trên WP_Query, một lần tiêm SQL mù qua WP_Meta_Query, một cuộc tấn công XSS qua sên bài đăng và một lần tiêm đối tượng quản trị viên .

Lỗ hổng trong WordPress 5 là gì. 8 2?

Lỗ hổng được thảo luận ( CVE-2022-21662 ) là lỗ hổng Stored Cross-Site Scripting ảnh hưởng đến các phiên bản WordPress tối đa và bao gồm 5. 8. 2. Nó cho phép kẻ tấn công tiêm trọng tải JavaScript.