آشنایی با مفهوم XPATH Injection در اپلیکیشن‌های تحت‌وب

آشنایی با مفهوم XPATH Injection در اپلیکیشن‌های تحت‌وب

زبان XML Path یا به‌اختصار XPath یک زبان مفسری است که برای گشت‌زنی در داکیومنت‌های XML و بازیابی داده‌ها از میان آن‌ها مورد استفاده قرار می‌گیرد و XPATH Injection هم روشی برای هک کردن مستندات تحت‌وب بااستفاده از زبان XPath است.

در اپلیکیشن‌های تحت‌وب که داده‌ها داخل داکیومنت‌های XML ذخیره می‌شوند، این امکان وجود دارد که براساس ورودی کاربران، داده‌ٔ خاصی بااستفاده از زبان XML Path از داخل مستندات مربوطه یافت شود.

حال اگر این ورودی‌ها بدون فیلتر کردن (Filtering) و پاکسازی (Sanitization) داخل کوئری XPath قرار گیرند، یک هکر ممکن است قادر به دستکاری کوئری‌ها برای دخالت در منطق اپلیکیشن یا بازیابی داده‌هایی که مجاز به دسترسی آن‌ها نیست گردد (در کل، اسناد XML تحت هیچ عنوان برای ذخیره‌سازی داده‌های حساس مناسب نیستند).

با این حال، داکیومنت‌های اکس‌ام‌ال اغلب برای ذخیرهٔ داده‌های پیکربندی (کانفیگ) اپلیکیشن‌ها که ممکن است براساس ورودی کاربر بازیابی شوند، مورد استفاده قرار می‌گیرند؛ آن‌ها همچنین می‌توانند توسط اپلیکیشن‌های کوچک‌تر مورد استفاده قرار بگیرند تا اطلاعات ساده‌ای مانند پرمیشن‌ها و دیگر اطلاعاتی از این دست را ذخیره کنند. برای روشن‌تر شدن این مسئله، کد XML زیر که برای ذخیرهٔ داده‌های کی کاربر استفاده می‌شود را در نظر بگیرید:

<addressBook>
<address>
<firstName>William</firstName>
<surname>Gates</surname>
<password>MSRocks!</password>
<email>billyg@microsoft.com</email>
<ccard>5130 8190 3282 3515</ccard>
</address>
<address>
<firstName>Chris</firstName>
<surname>Dawes</surname>
<password>secret</password>
<email>cdawes@craftnet.de</email>
<ccard>3981 2491 3242 3121</ccard>
</address>
<address>
<firstName>James</firstName>
<surname>Hunter</surname>
<password>letmein</password>
<email>james.hunter@pookmail.com</email>
<ccard>8113 5320 8014 3313</ccard>
</address>
</addressBook>

کوئری XPath مورد نیاز برای بازیابی همهٔ آدرس‌های ایمیل از سند فوق به‌صورت زیر است:

//address/email/text()

کوئری مورد نیاز برای دستیابی به اطلاعات کاربری به‌نام Dawes هم به‌صورت زیر است:

//address[surname/text()=’Dawes’]

در بعضی از اپلیکیشن‌ها، اطلاعات ارائه شده توسط کاربر ممکن است مستقیماً درون کوئری‌های XPath قرار بگیرند و نتایج آن کوئری هم ممکن است برخی از جنبه‌های رفتاری اپلیکیشن مورد نظر را که دولوپر اصلاً دوست ندارد کسی آن‌ها را متوجه شود برملا سازد!

در حقیقت، XPath Injection یک روش حمله است که برای بهره‌برداری از اپلیکیشن‌هایی که کوئری‌های XPath را ایجاد می‌کنند -از ورودی‌ ارائه شده توسط کاربر گرفته تا کوئری اسناد XML یا راهیابی به آن‌ها- مورد استفاده قرار می‌گیرند.

منبع


هانیه نیرومند جلالی