آموزش باگ XPATH Injection

در این قسمت از آموزش قصد داریم شما را با آسیب پذیری یا باگ XPATH Injection اشنا کنیم با ما همراه باشید.
باگ XPATH Injection
یکی از زیر مجموعه های حملات Injection حمله XPATH Injection یا به عبارتی دیگر XML Injection است که این حمله بر روی اسناد XML پیاده سازی می شود؛ دستور XPATH دستوری است که در اسناد XML مورد استفاده قرار می گیرد و برای جستجو و پیدا کردن یک دیتا در فایل های XML بسیار پر استفاده است . حملات XPath Injection مشابه SQL Injection زمانی رخ خواهد داد که یک وب سایت از اطلاعات تأمین شده کاربر برای ساخت یک پرس و جو XPath برای داده XML استفاده کند.
با ارسال اطلاعات نادرست به وب سایت ، نفوذگر می تواند نحوه ساخت داده های XML را پیدا کند یا به داده هایی دسترسی پیدا کند که ممکن است به طور عادی به آن ها دسترسی نداشته باشد ، حتی اگر از داده های XML برای تایید اعتبار استفاده شود ممکن است نفوذگر بتواند سطح دسترسی خود را در وب سایت بالا ببرد.
همانگونه که پیش تر گفته ایم پرس و جو XML با XPath انجام می شود ، نوعی عبارت توصیفی ساده که به جستجوی XML اجازه می دهد بخشی از اطلاعات را پیدا کند، مانند : SQL ، می توانید ویژگی های خاصی را برای یافتن و الگوها مشخص کنید. هنگام استفاده از XML برای یک وب سایت باید مقداری از ورودی در رشته پرس و جو را برای شناسایی محتوا ، یافتن و نمایش در صفحه بپذیرید. این ورودی باید تأیید شود که پرس و جوی XPath را خراب نمی کند و داده های اشتباه را برنمی گرداند.
اما قبل از آن که وارد مباحث بشویم بهتر است در ابتدا شما با xml آشنا شوید
که در ادامه توضیحاتی را برای شما نیز شرح خواهیم داد .
XML چیست ؟

فایل های xml دقیقا مانند فایل های html هستند اما با این تفاوت که زبان نشانه گذاری html برای نمایش اطلاعات مورد استفاده قرار می گیرد اما زبان xml برای ذخیره و نگه داشتن اطلاعات مورد استفاده قرار می گیرد . جالب است که بدانید حمله XPATH Injection تقریبا همانند باگ SQL Injection است به این صورت که برای باگ SQLI می توان اطلاعات را با استفاده از کوئری های مخرب استخراج کرد اما در باگ XPATH Injection می توان اطلاعات را از داخل داکیومنت های XML استخراج کرد و داکیومنت های XML دقیقا نقش دیتابیس SQL در حمله SQLI را دارند .
برای درک بهتر XML به قطعه کد زیر دقت کنید :
<?xml version=”1.0″ encoding=”utf-8″?>
<Employees>
<Employee ID=”1″>
<FirstName>Arnold</FirstName>
<LastName>Baker</LastName>
<UserName>ABaker</UserName>
<Password>SoSecret</Password>
<Type>Admin</Type>
</Employee>
<Employee ID=”2″>
<FirstName>Peter</FirstName>
<LastName>Pan</LastName>
<UserName>PPan</UserName>
<Password>NotTelling</Password>
<Type>User</Type>
</Employee>
</Employees>
همانگونه که مشاهده می کنید در اولین خط از کد بالا کد زیر است :
<?xml version=”1.0″ encoding=”utf-8″?>
این کد باعث می شود تا مشخص شود که دستوراتی که در ادامه وارد شده است کد xml است و در ادامه مشاهده می کنید که نوع encoding ان را مشخص کرده است؛ سپس در سطر های بعدی کد مورد نظر ما ، خواهید دید که اطلاعاتی از یک شخصی مانند نام و نام خانوادگی و همچنین یوزرنیم و پسورد فرد را در خود ذخیره کرده است و همچنین در نهایت مقدار type را admin وارد کرده است به همین دلیل متوجه خواهیم شد که اطلاعات مورد نظر مربوط به ادمین است و اطلاعات حساس است که باید به خوبی مورد حفاظت قرار گیرد .
منطق حمله XPATH Injection

حال نیز تصور کنید که ما یک سیستم تأیید هویت کاربر در یک صفحه وب داریم که از یک پرونده داده از این نوع برای ورود به سیستم کاربران استفاده کرده است، پس از تعیین نام کاربری و رمز عبور ، این نرم افزار ممکن است از XPath برای جستجوی کاربر استفاده کند . با استفاده از نام کاربری و رمزعبور معمولی XPath کار می کند ، اما یک نفوذگر زمانی که نام کاربری و پسورد ادمین را نمی داند می تواند در صورت آسیب پذیر بودن وب سایت به باگ XPATH Injection اقدام به ارسال عبارت های True کند و بدون آن که از یوزرنیم و پسورد خبر داشته باشد وارد پنل مدیریت شود.
نکته : در این حالت , فقط قسمت اول XPath باید عبارت True داشته باشد
و نیازی نیست در فیلد پسورد عبارت True قرار دهید و می تواند قسمت گذرواژه کاملا بی ربط باشد .
برای درک بهتر این موضوع در ادامه با یک مثال عملی شما را با این باگ آشنا می کنیم
اما قبل از هرچیزی بهتر است اول این موضوع را درک کنیم که
چگونه باید حملات XPATH Injection را تشخیص دهیم ؟
نحوه تشخیص باگ XPATH Injection
برای تشخیص و پیدا کردن باگ XPATH Injection میتوانید دقیقا مانند باگ SQI عمل کنید
و در ورودی ها با استفاده از یک تک کوتیشن اقدام به پیدا کردن باگ XPATH Injection کنید.
حال نیز یک اپلیکیشن تحت وب در لوکال پیاده سازی کرده ایم تا بتوانیم
این باگ را با مثال عملی نیز برای شما شرح دهیم :

حال اگر به تصویر بالا دقت کنید و URL را با دقت بررسی کنید خواهید دید که در URL متدی تحت عنوان genre نیز ورودی می گیرد , به همین منظور میتوانید با استفاده از یک تک کوتیشن اقدام به تست کردن باگ XPATH Injection کنید و اگر با وارد کردن تک کوتیشن با ارور زیر مواجه شدید ، متوجه می شوید سایت مورد نظر شما دارای باگ XPATH Injection است.
به تصویر زیر دقت کنید :

در تصویر بالا مشاهده می کنید که با قرار دادن تک کوتیشن در مقابل متد genre
ارور مربوط به باگ XPATH Injection را دریافت کرده ایم.
نکته : در web encoding عبارت %27 مساوی است با کاراکتر تک کوتیشن. ( ‘ )
حال نیز تصور کنید یک اپلیکیشن تحت وب وجود دارد که از XPath برای جستجوی یک سند XML استفاده می کند و شماره حساب کاربری را که نام و رمز عبور از مشتری دریافت کرده است بازیابی می کند ، چنین برنامه ای ممکن است این مقادیر را مستقیماً در پرس و جو XPath جاسازی کند ، در این حالت است که آسیب پذیری XPATH Injection به وجود می اید .
همچنین برای اشنایی بیشتر با انوع باگ ها می توانید اموزش باگ XSS را هم در پن تست کور مشاهده کنید.
اقدام به حمله XPATH Injection

حال نیز فرم ورودی آسیب پذیر به باگ XPATH Injection را راه اندازی کرده ایم
و حال نیز اگر در فیلد یوزرنیم عبارت True وارد کنید و پسورد دلخواه را وارد کنید
خواهید دید که شما میتوانید از فرم لاگین به راحتی عبور کنید :

نکته: تزریق XPath ممکن است حتی بیشتر از SQL Injections خطرناک باشد زیرا XPath فاقد کنترل دسترسی است و امکان جستجوی بانک اطلاعاتی کامل ( سند XML ) را فراهم می کند ، در حالی که بسیاری از بانکهای اطلاعاتی SQL دارای جدول های متا هستند که توسط نمایش داده شدگان به طور منظم قابل دسترسی نیستند.
توضیحی مختصر در رابطه با حمله Blind XPath Injection
حملات Blind XPath Injection را می توان برای استخراج داده ها از برنامه ای که داده های تهیه شده توسط کاربر را به روشی نا امن تعبیه می کند ، مورد استفاده قرار داد. هنگامی که ورودی به طور صحیح ایجاد نشده باشد ، نفوذگر می تواند کد XPath را اجرا کند. این نوع حمله در شرایطی به کار می رود که مهاجم هیچ آگاهی از ساختار سند XML نداشته باشد ، یا شاید پیام خطا سرکوب شده باشد ، و فقط قادر است با پرسیدن سؤالات صحیح یا نادرست به هدف خود نیز برسد دقیقا همانند باگ Blind SQLI .
Payload های XPATH Injection
همچنین پیلود هایی برای تست آسیب پذیری XPATH Injection وجود دارد
که چند عدد از این پیلود ها را در ادامه برای آشنایی بیشتر شما با ان ها نیز قرار داد ایم :
‘ or ‘1’=’1
‘ or ”=’
x’ or 1=1 or ‘x’=’y
معرفی ابزار Xpath
همچنین ابزاری در گیت هاب وجود دارد که میتوانید عملیات XPATH Injection را
با کمک این ابزار نیز به صورت اتوماتیک انجام دهید و در تست های نفوذ خود از این ابزار کمک بگیرید .
لینک ابزار : https://github.com/r0oth3x49/Xpath
نتیجه گیری

در این قسمت از آموزش شما را با آسیب پذیری XPATH Injection آشنا کرده ایم و نیز متوجه شده اید که این باگ شباهت زیادی به باگ SQLI دارد , سپس در ادامه شما را با یک مثال عملی آشنا کرده ایم و توضیحی کوتاه و مختصر در رابطه با آسیب پذیری Blind SQL Injection داده ایم و در نهایت این آموزش را با معرفی یک ابزار به پایان رساندیم ، دقت داشته باشید که امنیت هیچ گاه صد درصد نیست.
موفق باشید.