
cve-2017-5487 wp rest api ثغرة
: ثغرة في تطبيق REST API في الملف wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php في إصدارات ووردبريس قبل 4.7.1، حيث لا يتم تقييد قائمة الناشرين، مما يسمح للمهاجم عن بعد بالحصول على معلومات مهمة عبر طلب wp-json/wp/v2/users.
( مرجع : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
لأننا لا نفهم ما يعنيه هذا، دعنا نتعرف على المعرفة الأساسية ثم نتعلم من خلال التطبيق العملي.
إذا كنت تعتقد أن المعرفة الأساسية غير ضرورية، يمكنك البدء من [3].
: باختصار، API الذي يحدد "ماذا وكيف تفعل شيئًا" يمكن أن يسمى REST API.
: بمزيد من التفصيل، REST API هو كيفية القيام بشيء ما باستخدام مورد معرف بواسطة HTTP URI باستخدام HTTP Method و Payload.
: REST = اختصار لـ REpresentational State Transfer
2.1 المورد المعرف بواسطة HTTP URI
: المورد يعني الشيء الذي تتم معالجته
مثال: مستندات JSON، XML، ملفات صور مثل jpg، ملفات فيديو مثل mp4، إلخ.
: URI هو اختصار لـ Uniform Resource Identifier، وهو معرف الموارد الموحد. عنوان URL الذي نراه عادةً هو جزء من URI، ويشير إلى تعريف مورد ما.
مثال: إذا كان بإمكاننا الحصول على معلومات حول مستخدم باسم test عبر http://rootable.tistory.com/user/test، فإن هذا أيضًا يعتبر URI.
2.2 طريقة HTTP
: هذه الطريقة تعمل بنفس الطريقة بغض النظر عن تنسيق المورد.
: الطرق المستخدمة في REST API تشمل POST، GET، PUT، PATCH، DELETE وغيرها. النقطة المهمة هي أنها تختلف عن الوظائف التي نعتقدها. على سبيل المثال، في حالة POST، نعتقد أنها طريقة تستخدم لطلب بيانات أو مستندات من الخادم، ولكن في REST API، تقوم بوظيفة الإنشاء (create).
طريقة HTTP
عمليات CRUD
POST
create
GET
read
PUT
update / replace
PATCH
update / modify
DELETE
delete
مثال: REST API لإضافة مستخدم باسم doni إلى users في http://rootable.tistory.com
POST http://rootable.tistroy.com/users/doni
مثال: عند إنشاء مستخدم، إذا كانت هناك حاجة إلى خصائص متنوعة مثل المهنة والعمر والجنس، يتم تحديد لغات تعبير متنوعة مثل XML أو JSON في جزء Body للتسجيل
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
: لقد قيل أن REST API هو API محدد مسبقًا لكيفية التعامل مع المورد. إذن، ما هي REST API المعرفة في ووردبريس؟
أرجع إلى الجدول أدناه.
Resource Base Route Posts /wp/v2/posts Post Revisions /wp/v2/revisions Categories /wp/v2/categories Tags /wp/v2/tags Pages /wp/v2/pages Comments /wp/v2/comments Taxonomies /wp/v2/taxonomies Media /wp/v2/media Users /wp/v2/users Post Types /wp/v2/types Post Statuses /wp/v2/statuses Settings /wp/v2/settings
يمكننا رؤية العديد من REST API المعرفة. هنا يمكننا أن نرى أن /wp/v2/users الذي ظهر في CVE الذي سننظر إليه هذه المرة موجود.
4.1. الحصول على معلومات كاتب المقال
أدناه هو الكود الذي تم العثور عليه في EXPLOIT DB. ( https://www.exploit-db.com/exploits/41497/ )
كما يظهر من الكود، فهو فقط ينظف نتائج المعالجة ويعرضها على الشاشة. لا حاجة لاستخدام كود الاستغلال هذا، حيث يمكن الحصول على المعلومات بالوصول المباشر، لذلك لا أعتقد أننا بحاجة للذهاب إلى ثغرة FU لجعلها تبدو نظيفة.
#!usr/bin/php
إذا قمت بحفظ هذا ككود PHP في مكان تثبيت ووردبريس وقمت بتشغيله، فستظهر النتيجة كما يلي.
عند الوصول المباشر، يبدو كما يلي. (إذا لم يكن واضحًا، انقر)
المعلومات التي يمكن الحصول عليها من خلال هذا تشمل معرف المستخدم (ID)، الاسم (name) للمستخدم الذي كتب المقال.
ملاحظة) اعتقدت أن جميع المستخدمين المسجلين سيظهرون، ولكن نتائج الاختبار أظهرت فقط حسابات كتاب المقالات. في وصف CVE، هناك كلمة 'author' والتي يبدو أنها تعني 'كاتب'.
4.2 الحصول على مسار تحميل الملف
من بين REST API في ووردبريس، هناك /wp/v2/posts. عند الوصول إليه، ستظهر معلومات حول المقالات المنشورة كما هو أدناه، ومن بينها يمكن الحصول على مسار تحميل الملف كما هو محدد. إذا تم اكتشاف ثغرة FU، فسيكون ذلك مفيدًا للغاية.
في الإصدار 4.7 أيضًا، يبدو أنه من المستحيل عرض الإعدادات أو تعديل المقالات.
مراجع)
REST API 설명 : http://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=220986337770
다운그레이드 (لأنه لم ينجح التقدم أثناء القيام بذلك وأعدت التثبيت، أنصح بعدم التثبيت الجديد) : http://www.bbsetheme.co.kr/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EB%B2%84%EC%A0%84-%EB%8B%A4%EC%9A%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0/