حملات XML-RPC

منتشر شده در دسته : بلاگ

XMLRPC چیست ؟ حملات xmlrpc کدامند؟ حملات xmlrpc در واقع تلاش های بروت فورس برای تست و بدست آوردن اعتبارنامه های کاربران سایت وردپرسی هدف هستند که در بیشتر موارد کاربردی نبوده و نتیجه ای در بر ندارند ولی در صورتیکه سایت هدف به درستی پیکربندی نشده باشند می توانند نتیجه بخش باشند.

در این مطلب ابتدا به توضیح مفهوم XML-RPC پرداخته و در ادامه نحوه پیاده سازی حملات xmlrpc را نمایش می دهیم و در پایان شیوه جلوگیری از این حملات را شرح می دهیم.

XMLRPC چیست ؟

xmlrpc چیست ؟ قبل از اینکه با حملات xml-rpc آشنا شویم بایستی مفهوم xml-rpc را درک کنیم. xml-rpc یک استاندارد ارتباطی درون سیستمی مخصوص سیستم مدیریت محتوا وردپرس می باشد. به زبان ساده اینکه xml-rpc مکانیزمی است که وردپرس با استفاده از آن با سیستم های دیگر و وب سایت های دیگر ارتباط برقرار می کند. در این ارتباط پروتکل http در نقش بستر ارتباطی بوده و زبان ابرمتن xml مکانیزم انکودینگ و حامل ارتباطی می باشد.

وردپرس با استفاده از مکانیزم xml-rpc با دیگر سیستم های مدیریت محتوا همچون بلاگر و کلاینت های موبایل و دسکتاپ ارتباط برقرار می کند. هرچند با معرفی WP API دیگر این سیستم قدیمی طرفداری ندارد. WP API از مکانیزم JSON به جای XML به منظور ارسال و دریافت داده ها استفاده می کند که کارایی به مراتب بهتری دارد. تا وردپرس نسخه 3.5 قابلیت Xml-rpc به صورت پیش فرض غیرفعال بود و شما بایستی از تنظیمات وردپرس آن را فعال می کردید.

xml-rpc در واقع بخشی از هسته اولیه وردپرس بوده و همه چیز در فایل xmlrpc.php تعریف می شد. حجم این فایل در ابتدا 238 کیلوبایت بود که بعد از تغییراتی حجم آن به تنها 3 کیلوبایت کاهش یافت و برخی فعالیت های دیگر آن به کلاس کوچک دیگری با نام wp_xmlrpc_server تقلیل یافت که این کلاس حاوی چندین تابع می باشد.

از آنجایی که وردپرس به سازگاری با نسخه های قدیمی (Backward Compatibility) اهمیت می دهد این قابلیت هم اکنون در وردپرس فعال می باشد.

مشکل XML-RPC

مشکل XML-rpc کجاست. برای درک مشکل xml-rpc بهتر است ابتدا به توضیح مزیت های WP API بپردازیم. همانطور که گفتیم WP API از مکانیزم JSON استفاده کرده که در مقایسه با XML به مراتب بهتر است. مشکل اصلی xml-rpc در استفاده از احرازهویت به شیوه Basic Authentication می باشد. به این معنا که مثلا زمانیکه قصد مدیریت سیستم وردپرس از طریق یک اپلیکیشن موبایل را داریم اعتبارنامه ها یا همان نام کاربری و رمزعبور از طریق BA ارسال و دریافت می شود.

در مقابل WP API از مکانیزم Oauth استفاده می کند که در آن به هیچ وجه نام کاربری و رمزعبور ارسال و دریافت نمی شود بلکه از توکن ها به منظور احرازهویت استفاده کرده که به مراتب امن تر است.

 علاوه بر مسئله امنیت XML-RPC از نظر توسعه پذیری دارای مستندات خوبی نیست و کار توسعه دهندگان وب را با مشکل مواجه می کند.

چرا حملات بروت فورس

XML-RPC متد های مختلفی (در ادامه خواهید دید) را برای ارتباط ایجاد می کند که در این متدها برای احرازهویت نام کاربری و رمزعبور وردپرسی مورد نیاز است. همین قابلیت به دیگر اشخاص این امکان را داده تا به سادگی اقدام به پیاده سازی حملات بروت فورس نمایند. در واقع هیچ آسیب پذیری در کار نیست بلکه درخواست های XML-RPC که توسط مهاجمین به سایت شما ارسال می شود امکان بروت فورس اعتبارنامه های وردپرسی با استفاده از یک لیست از اسامی و پسوردها را فراهم می کند.

بروت فورس xml-rpc

هرچند بروت فورس به دلایلی که در ادامه به آن می پردازیم رویکردی کاربردی نیست ولی جهت آموزش و مشاهده درخواست ها و ریسپانس ها سرور شرح می دهیم. قبل تر گفتیم فایلی که مسئول متدهای Xml-rpc می باشد فایل xmlrpc.php می باشد. وبسایت وردپرسی این فایل را فعال دارد و اگر آن را درون مرورگر باز کنید مشاهده می کنید که سرور تنها درخواست های POST را قبول می کند.


چرا با باز کردن آدرس درون مرورگر با این پیام مواجه شدیم ؟ به این دلیل که مرورگر و درون نوار URL درخواست های GET ارسال می شود.

همین درخواست را اگر به سمت ابزار Burp Suite هدایت کنید, درخواست کامل و خام GET را مشاهده می کنید.

به همین شکل پاسخ سرور به این درخواست به صورت خام نمایش داده می شود.

ولی ما نیاز به ارسال یک درخواست POST به سرور داریم. به همین منظور بر روی درخواست فعلی در برنامه Burp راست کلیک کرده و آن را به سمت یکی دیگر از ابزارهای Burp Suite با نام Repeater ارسال می کنیم. در اینجا کمی درخواست را دستکاری
 می کنیم. ابتدا نوع درخواست را از GET به POST تغییر می دهیم. سپس برای مشاهده متدهای فعال xmlrpc از ساختار دستور زیر استفاده می کنیم . مثال ها را می توانید در کودکس وردپرس مشاهده کنید:

<methodCall>
  <methodName>system.listMethods</methodName>
  <params></params>
</methodCall>

خروجی , پاسخ دریافتی از سرور متدهای قابل استفاده را به ما نمایش می دهد. هر کدام از این متدها عملکرد ویژه ای دارند که توضیح آن خارج از حوصله این مطلب است ولی برای مطالعه بیشتر در این موضوع می توانید به کودکس وردپرس مراجعه کنید.
متد wp.UsersBlogs دارای دو پارامتر username و password می باشد که با استفاده از آن می توان نام کاربری و پسورد را تست کرد. با ارسال این درخواست نام کاربری user-shoma و پسورد password-shoma را تست می کنیم که در اینجا با شکست مواجه می شود.

این تنها آزمون یک اعتبارنامه بود. در صورتیکه لیستی از یوزر پسوردها را در اختیار داشته باشید می توانید به همین روش یک حمله بروت فورس را پیاده سازی کنید. به این منظور کافی است تا درخواست فعلی را به ابزار دیگری از Burp-Suite با نام Intruder ارسال کرده و پارامترها را تعیین کنید , یک لیست کلمات به آن بدهید

و به شیوه دلخواه حملات xmlrpc را پیاده سازی کنید.

ولی هدف ما در اینجا حمله نیست و ابزار Intruder در برپ سوییت نسخه Community Edition هم سرعت پایینی دارد (و اگر قصد حمله را دارید OWASP ZAP گزینه بهتری است)

مقابله با حملات xml-rpc

چرا حملات xmlrpc کاربردی نیستند ؟ حملات بروت فورس آنلاین بر روی سرور به سرعت در لایه های مختلف شناسایی و بلاک می شوند. کافی است تا سرور شما یک فایروال ساده داشته باشد و پس از تعدادی درخواست متوالی , آدرس آیپی به سرعت بلاک می شود. همچنین اگر یک اپلیکیشن امنیتی در وردپرس خود داشته باشید , پس از تعدادی درخواست نادرست آدرس آیپی هدف بلاک می شود. راهکار مقابله با حملات xml-rpc بسیار ساده است. می توانید آن را غیرفعال کنید.

همانطور که گفتیم از وردپرس نسخه 3.5 به بعد امکان غیرفعال سازی Xml-rpc به صورت آپشنی در وردپرس وجود ندارد. هرچند به منظور غیرفعال سازی راهکارهای مختلفی وجود دارد و در صورتیکه نمی خواهید وارد فایل های سرور شوید ساده ترین راهکار نصب یکی از پلاگین های موجود در این زمینه است. کافی است در بخش جستجو افزونه های وردپرس disable xmlrpc را جستجو کنید.

راهکار دیگر اضافه کردن کد فیلتر زیر به فایل functions.php در قالب وردپرسی خودتون می باشد :

add_filter( 'xmlrpc_enabled', '__return_false');

همچنین می توانید اگر سرور آپاچی دارید می توانید با ویرایش فایل پیکربندی
 .htaccess و اضافه کردن کد زیر به آن xml-rpc را غیرفعال کنید.

<Files xmlrpc.php>
order deny,allow
deny from all
allow from address-ip
</Files>

 به همین شکل در nginx می توانید فایل کانفیگ را ویرایش و کد زیر را اضافه کنید :

location ~* ^/xmlrpc.php$ {
return 403;
}

در صورتیکه قصد غیرفعال سازی xml-rpc را ندارید بهترین کار استفاده از یک پلاگین قدرتمند امنیتی همچون Wordfense می باشد. این افزونه به شما این امکان را
می دهد تا با تعیین محدودیت هایی برای درخواست های اشتباه به سرور آدرس آیپی شخص مخرب را به سرعت بلاک کنید. این روش به قدری موثر است که با وجود استفاده از پروکسی های مختلف عملا حمله بی اثر می شود.

نکته پایانی اینکه همیشه برای کاربران سایت خود پالیسی تعریف کنید که امکان استفاده از پسوردهای ساده وجود نداشته باشد. مسلما در صورتیکه کاربری از رمزعبور 123456 استفاده کند با بدست آوردن نام کاربری وی به سادگی بدون نیاز به حتی بروت فورس حساب کاربری وی را می توان در اختیار گرفت.

تعداد پیام ها 2

  1. xml-rpc یه متد داره به نام pingback.ping که برای حمله DOS ازش استفاده میشه
    کاش به طور عملی اینم بررسی میکردین

خوشحال می شویم دیدگاههای خود را در میان بگذارید * فرصت پاسخگویی به سوالات در بلاگ وجود ندارد

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *