0

پیشگیری از حملات با روش تزريق كد SQL با ذكر مثال – بخش دوم

 
kosarsh
kosarsh
کاربر برنزی
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1138
محل سکونت : خوزستان

پیشگیری از حملات با روش تزريق كد SQL با ذكر مثال – بخش دوم

 
 

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

مسیر دهی فیلد الگو

اولین گامها حدس زدن برخی نامهای فیلد می باشند: انصافا ما متمئن هستیم که پرس و جو شامل "آدرس ایمیل" و "کلمه عبور" می باشد، و ممکن است چیزهایی شبیه "آدرس پستی ایالات متحده" یا "شناسه کاربری" یا "شماره تلفن" وجود داشته باشند. ما بسیار عاشق اجراء کردن فرمان SHOW TABLE هستیم، اما علاوه بر اینکه نام جدول را نمی دانیم، برای بدست آوردن خروجی این فرمان هیچ وسیله مشخصی به ما کمک ننمی نماید.


از این رو، ما این فرمان را طی مراحلی اجراء خواهیم کرد. در هر مورد، کل پرس و جو را نمایش می دهیم چون مخصوصا ما می دانیم که آن با جزئیات ما نشان داده میشود. ما می دانیم که انتهای پرس و جو مقایسه ای است با آدرس ایمیل، پس بیایید ایمیل را به عنوان نام فیلد فرض کنیم:

SELECT fieldlist
FROM table
WHERE field= ‘x’ AND email is NULL’;--‘;‘

منظور استفاده از یک نام فیلد مطرح شده)ایمیل( در پرس و جوی ساخته شده و فهمیدن اینکه آیا SQL صحیح می باشد یا نه است. ما به مطابقت کردن آدرس ایمیل )که چرا ما یک ‘x’ زائد یا ساختگی را بکار می بریم( و علائم – آغاز توضیح و تفسیر SQL توجهی نمی نماییم. این روشی موثر برای استفاده از نشانه نقل قول پایانی که توسط برنامه ایجاد گردیده می باشد و برای مطابقت کردن با آنها نگران نباشید.


اگر ما یک خطای سرور دریافت کنیم، این بدآن معناست که SQL ما ناقص و ناهنجار است و یک خطای نحوی ظاهر گردیده: به احتمال خیلی زیاد این بخاطر نام بد فیلد می باشد. اگر ما هرگونه پاسخ معتبری را دریافت نماییم، ما آن نام را بطور صحیح حدس می زنیم. این مسئله ای است که آیا ما پاسخ"ایمیل ناشناخته" یا "کلمه عبو ارسال شده" را دریافت می نماییم یا نه.


توجه کنید، هرچند هم که ما از حرف ربط AND بجای OR استفاده کنیم، این کار از روی عمد می باشد. در فاز مسیر دهی الگوی SQL، ما واقعا نگران حدس زدن هر آدرس ایمیل بخصوصی نیستیم، و ما کاربران نامنظم و بی هدف را که با ایمیلهایی از طرف برنامه اشباع شده اند نمی خواهیم"کلمه عبورتان اینجا است"- این قطعا بخاطر هدف بد بدگمانیها را افزایش می دهد. با استفاده از حر ف ربط AND با یک آدرس ایمیلی که هرگز نمی توانسته معتبر باشد، ما مطمئنیم که پرس و جو همیشه ردیفهای صفر را برمی گرداند و هرگز یک ایمیل بیاد آورنده، کلمه عبور ایجاد نخواهد کرد.


تایید کردن مورد فوق درحقیقت به ما پاسخ"آدرس ایمیل مجهول یا ناشناخته است" را داد، از این رو، اکنون ما می دانیم که آدرس ایمیل در یک فیلد ایمیل ذخیره میشود. اگر این روش کار نمی داد، ما email_adress یا mail یا چیزی مشابه را امتحان می کردیم. این فرآیند تماما مستلزم مقدار زیادی حدس و گمان است.


سپس، ما برخی از نامهای واضح دیگر را حدس خواهیم زد: کلمه عبور، شناسه کاربر، نام و نظیر آنها. تمامی اینها یکی یکی انجام میشود، و هرچیزی غیر از "عیب و نقص سرور" به این معنا است که ما نام را بطور صحیح حدس زده ایم.

SELECT field
FROM table
WHERE email=’x’ AND userid is NULL ;--‘;

درنتیجه این فرآیند ما چندین نام فیلد معتبر پیدا کردیم:


ایمیل (email)


کلمه عبور (passwd)


شناسه لاگ این (login_id)


نام کامل (full_name)


قطعا بیشتر هم وجود دارند)و نامهای فیلدها در فرمها یک منبع خوبی از سر نخها هستند(، اما اندکی کند و کاو چیزی را مشخص ننمود. اما ما هنوز نام جدولی را که این فیلدها در آن یافت میشوند نمی دانیم- این را چطور بفهمیم؟

چهارشنبه 17 خرداد 1391  11:17 PM
تشکرات از این پست
دسترسی سریع به انجمن ها