pedia-learning

ورود

گذرواژه‌تان را فراموش کرده‌اید؟

ثبت نام

ثبت نام
انجمن عمومی گسترش فناوری آگو

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

ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش Sql Injection ( توضيح كوتاه در مورد SQL INJECTION)
02-28-2013, 06:39 PM (آخرین ویرایش در این ارسال: 03-06-2013 03:35 PM، توسط agotd.)
ارسال: #4
RE: آموزش Sql Injection (بدست آوردن تیبلها)
سلام دوستان به دلیل یه سری مسائل نمیتونم زود به زود تاپیک رو آپدیت کنم اگر کمی طول میکشه عذر خواهی میکنم از دوستانی که منتظر ادامه آموزشات هستند ... ، یه نکته رو هم بگم دوستان همینطور که در اولین پست گفتم لطفا اگر سوالی دارید یا از طریق تاپیک جامع سوالات SQL Injection یا از طریق پیغام به یوزر من در انجمن با ایدی بنده سوال خودتونو مطرح کنید لطفا در این تاپیک سوالی نپرسید .

در قسمت های قبل سایتی رو که مشکل امنیتی مورد نظرمونو داشت پیدا و تست کردیم و دیدیم که میتونیم حملمونو ادامه بدیم در قدم بعد تعداد ستون های سایت رو بدست آوردیم و ستون هایی که به ما میتونستند کمک کنند را فراخوانی کردیم و از ستون های آزاد برای بدست آوردن اطلاعاتی همچون ورژن و نام دیتابیس و یوزر سایت استفاده کردیم در این قسمت از آموزش به بدست آوردن Table ها و بعد از آن به بدست آوردن Column های هر تیبل و موضوعات دیگر میپردازیم .

برای اینکه بهتر با Table و Column های آنها آشنا بشید و ببینید Information_Schema اصلا چیه و کجاست و ورژنی که گفتیم مهمه ورژن چیه و در حقیقت کجاست و... همراه با توضیحات عکس های از قسمت هایی از یک بانک اطلاعاتی هم قرار میدم که شاید در بهتر متوجه شدن مطلب بهتون کمک کند. (البته اینقد ریز شدن فقط برای بهتر متوجه شدن دوستانی است که با این مطالب آشنایی ندارند و دوستانی که حق استادی در گردنمون دارند لطفا مشکلات توضیحات رو بهم اطلاع بدند ...)

تصویر اول یک تصویر از صفحه نخست مدیریت یک بانک اطلاعاتی براتون قرار میدم phpMyAdmin یکی از معروف ترین برنامه های مدیریت دیتابیس ها است .


در عکس بالا که صفحه نخست مدیریت یک بانک اطلاعاتی را نمایش میدهد در سمت چپ 4 بانک اطلاعاتی مشاهده میکنید، بانک اطلاعاتی اول یعنی information_schema به صورت خودکار در ورژن 5 به بعد MySQL نصب میشود و 3 بانک اطلاعاتی بعدی هم که به نام های only.amniat_site ، only.amniat_mail و only.amniat_test میباشد به صورت دستی یا خودکار توسط سیستم های مدیریت محتوا (مانند phpnuke و ...) بر روی هاست نصب شده اند .

در سمت راست بالای صفحه ورژن سرور رو براتون قرار داده که ما با دستور ()version و version@@ آن را بدست می آوریم و پایین تر از آن یوزر سایت در سرور را نمایش میدهد که ما توسط دستور ()user آنرا بدست می آوریم .

تصویر دوم تصویری از مدیریت دیتابیس information_schema است که برای درک بهتر آن این عکس راقرار دادم :


تصویر سوم از مدیریت یکی از بانک های اطلاعاتی است که صاحب سایت آنرا نصب کرده و اطلاعات سایت در آن ذخیره شده است :


همانطور که در تصویر بالا میبینید در سمت چپ Table های سایت قرار گرفته اند، که هر کدام نگهدارنده اطلاعات قسمتی از سایت هستند بعضی از تیبل ها اطلاعات کاربران هستند بعضی دیگر اطلاعات مدیران بعضی دیگر تنظیمات سایت هستند و ... .

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



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

خوب تا اینجا مقدمه این پست بود و فقط میخواستم مطلب را بهتر درک کنید حالا میریم سر خود آموزش :

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

برای بدست آوردن Table ها و Column ها در ورژن 5 به بالا از دیتابیس information_schema اسفاده میکنیم به این صورت که بعد از استفاده از دستور union select و و استخراج ستون هایی که میتونستن به ما کمک کنند از دستور :

کد php:
+from+information_schema.X-- 


استفاده میکنیم که X متغیر است و به نسبت به درخواستمون اونو تغییر میدیم، (یه نکته رو هم بگم from به معنای از ، از روی ، بواسطه است ) در این جا ما نیاز به Table های سایت داریم که به جای X کلمه tables رو که یکی از تیبل های دیتابیس information_schema است را تایپ میکنیم یعنی شکل کلی به این صورت است :

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,4,5,6+from+information_schema.tables-- 

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

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,table_name,5,6+from+information_schema.tables-- 

با دستور بالا فقط یکی از تیبل های سایت را بدست می آوریم که امکان دارد تیبل مورد نظر ما نباشد و اطلاعاتی که ما به آن نیاز داریم را در اختیار ما قرار ندهد ! برای رفع این مشکل و بدست آوردن بقیه تیبل ها چندین راه وجود دارد که ما در این بحث به 3 روش متداول آن میپردازیم :

1. استفاده از دستور ()group_concat ا
2. استفاده از دستور limit و دستور offset ا
3. استفاده از دستور : like

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

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat(table_name),5,6+from+information_schema.t​ables-- 

2. استفاده از دستور limit و دستور offset : استفاده از این دستور شایت کمی وقت گیر باشد ولی در بعضی مواقع خیلی کمک میکند توسط این دستور شما اطلاعاتی که میخواید (در اینجا ما تیبل هارا میخوایم ولی میتونه اطلاعات چیزای دیگه ای هم باشه ...) را به صورت تکی به دست میارید یعنی اول تیبل اول بعد دوم بعد سوم و الی آخر ... .

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

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,table_name,5,6+from+information_schema.tables+limit+1+​offset+X-- 

در دستور بالا X متغیر است و باید X را از 0 شروع کرد و تک تک 0 را به 1 و بعد از بدست آوردن تیبل بعدی 1 را به 2 و الی آخر تیبل هارا بدست آورد تا به تیبل مورد نظر رسید. مثلا اگر شما به دنبال اطلاعات کاربران سایت هستید مانند یوزر و پسورد ادمین سایت باید به دنبال تیبلی به اسم User یا admin یا user_admin یا administrators یا کلماتی مشابه این ها باشید، معمولا در تیبلی که اطلاعات کاربران در آن ذخیره میشود کلمه user موجود است اگر سایتی را چک کردید و اصلا چیزی شبیه به اینا ندیدید احتمال داره یا تیبل مورد نظر در دیتابیس های دیگر باشد (یعنی سایت دارای چند دیتابیس از طرف مدیر باشد) یا اینکه اسم تیبل اسم عمومی نباشد مثلا اسمش باشه miomio که اصلا ارتباطی با هفته بسیج نداره ... ! برای همینم شاید کار یکم مشکل بشه و شما ناچار بشید تمام تیبل هارو چک کنید .


3. استفاده از دستور like : با استفاده از دستور like کار شما خیلی راحت میشه و به سادگی میتونید تیبل مورد نظرتونو پیدا کنید، نحوه کار این روش اینطوریه که ما میدونیم که اطلاعات کاربران معمولا در تیبل هایی با اسم های مشخص هستند مانند user یا admin و یا ... و شایدم همین کلمات عمومی فقط با کمی تغییر مثلا شده باشه phpuser یا مثلا admin_panel یا member_list یا ... ، این روش با ما این امکان رو میده که ما بگیم دنبال تیبلی هستم که در آن مثلا user به کار رفته باشد حالا فرقی نمیکه اولش چیزی اضافه شده باشه یا آخرش .

شکل دستوری آنرا قرار میدم و قسمت به قسمت دستور رو توضیح میدم :

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat(table_name),5,6+from+information_schema.t​ables+where+table_name+like+'%admin%'-- 

. در دستور بالا همانظور که مشاهده میکنید در ستونی که Table_name را قرار دادیم ()group_concat را هم اضافه کردیم این به این معناست که همه تیبل هایی که مثلا کلمه admin در قسمتی از اسم آنها وجود دارد را به ما نشان بده .
2. بعد از information_schema کلمه where را اضافه کردیم که به معنای "کجا" یا "در کجا" است .
3. بعد از کلمه where تایپ کردیم table_name یعنی بین تیبل ها بگرد .
4. بعد کلمه like که به معنای مانند است را وارد کردیم که دستور اصلی این روش است .
5. بعد از like یک کوتیشن ( ' ) و بعد از کوتیشن یک علامت درصد ( % ) و پس از آن کلمه ای که میخوایم میون اسم های تیبل ها به دنبال آن بگردیم مثلا admin و مجددا علامت درصد و بعد از آن هم یک کوتیشن دیگر و دستور به پایان میرسد . در این دستور کوتیشن به معنای تاکید است و درصد معنای آزاد بودن کلمه از هر دو طرف است یعنی اگر به admin کلمه یا حروفی از قبل یا بعد از آن اضافه شده باشد هم به ما نشان بده اگر ما درصد ها را وارد نکنیم فقط به دنبال کلمه Admin میگردد و اگر کلمه ای به اسم cpadmin وجود داشت را به ما نشان نمیدهد !

نکته مهمی پیرامون این دستور وجود دارد که در بعضی سایت ها این دستور محدود شده است و زمانی که شما این دستور را تزریق میکنید ساید ارور میدهد برای مثال همین سایت تارگت ما که برای مثال درسمان ازش استفاده میکنیم همین مشکل را داراست و نمی گذارد که دستور اجرا شود برای Baypass کردن یا همان دور زدن این قابلیت سایت ها میتونید از چند روش استفاده کنیم :

1. HEX کردن کلمه مورد نظر
2. تبدیل کلمه مورد نظر به CHAR
3. و روش های دیگر که به آنها نمی پردازیم ...

1. Hex کردن کلمه مورد نظر : HEX کردن متن یعنی رمزی کردن متن مورد نظرمون ، برای این کار میتونیم از نرم افزار های مختلفی استفاده کنید و حتی سایت های آنلاینی که میتونید با یک جستوجو ساده در موتور های جستوجو سایت هایی که این کارو به صورت آنلاین انجام میدند رو پیدا کنید .

=> برنامه تبدیل TEXT به HEX :
- برنامه ای رو براتون قرار میدم که بتونید به سادگی متن هاتونو به HEX تبدیل کنید => برای دانلود کلیک کنید
- آموزش کار با برنامه : متن مورد نظر را در تکس باکس اول قرار میدهید و Convert را میفشارید و کد HEX شده در تکس باکس دوم براتون قرار داده میشود که میتونید آن را کپی کنید .
- پسورد :www.ago.ir

2. تبدیل کلمه مورد نظر به CHAR : این روش هم نوع دیگر رمزی کردن متن است ولی با یک الگوریتم دستوری دیگر که به HEX کردن بسنده میکنیم ...

خوب برای بایپس کردن به این صورت عمل میکنیم که کلمه مورد نظرمان را مثلا admin را همراه با علامت درصد دو طرف کلمه تبدیل به HEX یا CHAR میکنیم و کد HEX یا CHAR شده را بعد از کلمه like بدون کوتیشن ( ' ) قرار میدهیم، شکل کلی دستور :

کد php:
http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat%28table_name%29,5,6+from+information_sche​ma.tables+where+table_name+like+0x2561646D696E25-- 

با تزریق کد بالا میبینیم که سایت تمام تیبل هایی که کلمه admin در آنها وجود دارد را به ما نشان میدهد .

خوب این قسمت از آموزشات هم به پایان رسید امید وارم مفید واقع شده باشه ...

موفق باشید


فایل‌(های) پیوست شده
.zip  text2hex.zip (اندازه: 212.16 KB / تعداد دفعات دریافت: 4)
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پیام‌های داخل این موضوع
RE: آموزش Sql Injection (بدست آوردن تیبلها) - agotd - 02-28-2013 06:39 PM

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان


Persian Translation by MyBBIran.com - Ver: 4.1
Powered by MyBB, © 2002-2024 MyBB Group.
Theme designed by Marvel (Sidebar created by Yaldaram - Yaldaram.com)
Theme Translation by Mt Edition