در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

از SQL Injection نترسیم! - آموزش مقدماتی حمله SQL Injection

سلام به دوستان عزیز ITPro ای و علاقه‌مندان به مباحث امنیت شبکه. با آموزش مقدماتی موضوع شیرین و پرطرفدارSQL Injection در خدمت شما هستم. همانطور که میدانید، هزاران اکسپلویت برای تهدید کردن و در نهایت حمله به وب سرورها طراحی شده اند که در میان این تهدیدات بالقوه، SQL Injection توانسته است به عنوان تاثیرگذارترین، ساده ترین و فراگیرترین آن ها یک سر و گردن از سایر رقبا جلوتر و معروف‌تر باشد. حملات SQL Injection، روزانه بر روی تعداد زیادی از وب سایت های اینترنتی که اطلاعات Dynamic (پویا) را به مخاطبان خود ارائه میدهند، گزارش میشوند. چرا Dynamic؟ ساختار و طراحی Dynamic سایت‌ها باعث میشود که از دیتابیس MySQL و یا هر دیتابیس دیگری که مرتبط با SQL است، استفاده کنیم، بنابراین همین موضوع باعث میشود که آن ها سوژه جذابی برای حمله باشند. از آنجایی که حمله SQL Injection مستقیما با دیتابیس در ارتباط است، بنابراین برای یادگیری SQL Injection و شروع صحبت های آتی،، باید فهم درستی از SQL داشته باشیم. سعی میکنم که این سری از مقالات، برای آندسته از دوستانی که با این مبحث آشنایی کمی دارند و یا در حد یک اسم به آن برخورد کرده اند، سورس خوبی برای شروع آشنایی و تخصص در زمینه زبان کوئری ساختاریافته باشد.

SQL Injection چیست؟


SQL Injection یک روش تزریق (injection) کد است که از یک آسیب پذیری امنیتی در لایه دیتابیسِ یک اپلیکیشن، در جهت حمله استفاده میکند. اگرچه SQL Injection غالبا در حمله به وب سایت ها کاربرد دارد اما از آن میتوان در حمله به هر دیتابیس SQL ای استفاده کرد.

انتخاب قربانی (مقصد حمله)


اولین قدم در اجرای یک حمله SQL Injection، پیدا کردن یک وب سایت آسیب پذیر است. این مرحله ممکن است از لحاظ زمانی بیشترین تایم را از کل زمان مورد نیاز برای حمله کامل بخود اختصاص دهد. امروزه اکثر وب سایت ها با استفاده از روش ها و تکنیک های مختلف خودشان را از تهدیدات SQL Injection مصون نگه داشته اند. این بدان معنی است که این مرحله یعنی پیدا کردن یک وب سایت آسیب پذیر، وقت زیادی را از شما میگیرد.یکی از ساده ترین راه های پیدا کردن وب سایت های آسیب پذیر "Google Dorking" نام دارد. یک Dork، در واقع یک درخواست جستجوی خاص برای پیدا کردن وب سایت هایی است که با پارامترهای ورودیِ درون این درخواست، مطابقت دارند. در زیر مثال هایی از Dork هایی آورده شده است که شما میتوانید بوسیله آن ها سایتی آسیب پذیر در برابر حمله SQL Injection پیدا کنید. فقط کافیست که هرکدام از این درخواست ها را درون گوگل سرچ کنید.

Inurl:index.php?id=
Inurl:trainers.php?id=
Inurl:buy.php?category=
Inurl:article.php?id=
Inurl:play_old.php?id=
Inurl:declaration_more.php?decl_id=
Inurl:pageid=
Inurl:games.php?id=
Inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num= andinurl:index.php?id=
inurl:trainers.php?id=
inurl:buy.php?category=
inurl:article.php?ID=
inurl:play_old.php?id=
inurl:declaration_more.php?decl_id=
inurl:pageid=
inurl:games.php?id=
inurl:page.php?file=
inurl:newsDetail.php?id=
inurl:gallery.php?id=
inurl:article.php?id=
inurl:show.php?id=
inurl:staff_id=
inurl:newsitem.php?num=

این ها فقط نمونه کمی از Dork هایی بود که میتوان از آن ها برای پیدا کردن وب سایت های آسیب پذیر استفاده کرد. اگر دقت کرده باشید، نکته کلیدی در میان تمامی این Dork ها این است که تمامی آن ها بر روی وب سایت هایی تمرکز کرده اند که با استفاده از اسکریپت های php، محتوای Dynamic را از دیتابیس SQL تولید میکنند. به یاد داشته باشید که یک حمله SQL Injection بر روی هر دیتابیس SQL ای کار میکند اما در این میان وب سایت های php- based معمولا هدف مناسب تری برای این کار هستند چرا که کاربری آن ها در مورد هر زمینه ای صدق میکند و معمولا دارای اطلاعات ارزشمندی در دیتابیس‌شان هستند که شما قصد هک آن را دارید. در مورد نتایجی که Dork ها بر میگردانند این نکته را بیاد داشته باشید که الزاما وب سایت هایی که در نتیجه سرچ یک Dork به خروجی میایند، آسیب پذیر نیستند و باید در مرحله بعد هرکدام از آن را تست کنیم تا ببینیم که کدامیک از آن ها آسیب پذیری مورد نظر را داراست.با یکی از وب سایت هایی که در نتیجه سرچ Dork به خروجی آمده است، کار را دنبال میکنیم؛ فرض کنید که وب سایت

http://www.udemi.com/index.php?catid=1

، یکی از وب سایت هایی که در خروجی سرچ Dork آمده است. برای آن که متوجه شویم که این سایت در برابر حمله SQL Injection آسیب پذیر است یا خیر، کاراکتر ' به آخر URL مانند زیر اضافه میکنیم:

http://www.udemy.com/index.php?catid=1’

کلید اینتر را میزنیم و منتظر میمانیم تا عکس العمل وب سایت را ببینیم. اگر صفحه بشما ارور SQL برگرداند، وب سایت در برابر حمله SQL Injection آسیب پذیر است. در غیر اینصورت اگر صفحه بطور عادی لود شد، این وب سایت کاندیدای خوبی برای حمله SQL Injection نیست و باید از لیست وب سایت های پیدا شده، وب سایت دیگری را تست کنید.گفتیم که اگر صفحه بما ارور SQL برگرداند، به معنی آسیب پذیر بودن آن است. این که محتوای ارور چیست، اصلا اهمیتی ندارد. بطور کلی صحبت سر اینست که اگر صفحه بما هر ارور SQL ای برگرداند، در برابر تکنیک های SQL Injection آسیب پذیر است.در همین لحظه است که درک صحیح SQL نقطه قوت ادامه کار ما میشود. اگر با ساختار و مفاهیم SQL آشنا باشیم، میتوانیم از این صفحه اسیب پذیر، مستقیما محتوای دیتابیس را دستکار کنیم.

شروع حمله


بعد از آنکه وب سایت اسیب پذیر را شناسایی کردید، نوبت آنست که از تعداد ستون های موجود در دیتابیس SQL آن سایت مطلع شوید و این که چه تعداد از این ستون ها قابلیت پذیرش کاراکتر و یا عبارت ورودی از طرف شما را دارند. عبارت "order by" را در انتهای URL اضافه میکنیم:

http://www.udemy.com/index.php?catid=1 order by 1

عددی که پس از "order by" میآوریم در واقع حدس ما از تعداد ستون های دیتابیس است. همین طور این عدد را یکی یکی افزایش میدهیم تا به ارور بخوریم. تعداد ستون های دیتابیس، بزرگترین عددی است که قبل از ارور تست کردیم و جواب گرفتیم.در حالت دیگر ممکن است که با افزایش یک به یک عدد، تنها روی یک عدد به ارور نخوریم که در اینجا نیز آن عدد نشانگر تعداد ستون های دیتابیس است. فرض میکنیم که تعداد ستون های دیتابیس عدد 6 است. علاوه بر این مورد نیاز داریم تا بفهمیم که کدامیک از ستون های دیتابیس درخواست های ورودی سایت را قبول میکنند. ما این کار را با اضافه کردن عبارت "Union Select" به انتهای URL انجام میدهیم:

http://www.udemy.com/index.php?catid=-1 union select 1,2,3,4,5,6

در مثال بالا دو نکته هست که باید آن ها را توضیح دهم. اول آن که قبل از عدد 1 (بعد از catid) باید یک کاراکتر "-" اضافه کنیم. علاوه بر این تعداد ستون های دیتابیسی که در مثال قبل آن ها را بدست آوردیم، همان ارقامی است که بعد از عبارت union select آورده ایم. برای مثال اگر شما در مثال قبل متوجه شدید که دیتابیس 12 ستون دارد، باید URL را بصورت زیر وارد کنید:

http://www.udemy.com/index.php?catid=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12

نتیجه ای که این کوئری بر میگرداند، تعداد ستون هایی که از سایت ورودی قبول میکنند را نشان میدهد. شما میتوانید ازهرکدام از این ستون ها را برای تزریق (Inject) به SQL استفاده کنید.

اکسپلویت کردن دیتابیس


در این مرحله شما میدانید که از طریق کدام ستون ها باید مستقیما درخواست خود را تزریق کنید؛ بنابراین میتوانید کار اکسپلویت کردن دیتابیس را اغاز کنید. از این جا به بعد برای اجرای بسیاری از دستورالعمل ها به عبارت union select بسیار نیاز پیدا خواهید کرد. خوب دوستان دیدید انجام SQL Injection آنقدرها هم که از دور به نظر میاد، ترسناک نیست و میشود با یادگیری قواعد بازی و دستورالعمل ها تا حد زیادی کار را به جلو برد. اما یادمان باشد که در کنار این سادگی، اجرای موفقیت آمیز یک SQL Injection همیشه در غالب دستورالعمل ها و مراحل از پیش تعریف شده نمیگنجد و در واقع میتوان گفت که هسته اصلی کار کاملا بسته به هوش و خلاقیت و صد البته درک کامل از ساختار SQL و هدف دارد. اگر با دستورات SQL و نحوه استفاده از آن ها برای به پایان رساندن اکسپلویت آشنایی ندارید، باید دستورات مختلف در این زمینه را مطالعه و بعد از آن اقدام به اجرای SQL Injection کنید.

پایان

مانا باشید.

نویسنده: احسان امجدی

منبع: جزیره امنیت اطلاعات و ارتباطات وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#آموزش_sql_injection #sql_injection_چیست #حمله_به_وب_سایت #ٍٍاکسپلویت_چیست؟ #آموزش_امنیت_اطلاعات #تزریق_کد_به_دیتابیس #data_base_vulnerability_چیست؟ #sql_injection_چیست؟ #آموزش_امنیت_شبکه #آسیب_پذیری_دیتابیس
3 نظر
فرهاد مهریاری

با سلام

خیلی آموزش جالبی بود

با استفاده از دورک اولی یک وب سایتی رو آورد ' رو که به آخرش اضافه کردم این خطا رو داد

http://www.tadspec.com/index.php?id=15

خطا :

Warning: main(languages//headlines.php): failed to open stream: No such file or directory in varwwwhtmlincludes/connect_site.php on line 50

Fatal error: main(): Failed opening required 'languages//headlines.php' (includepath='.:phpincludes:usrsharephp') in varwwwhtmlincludesconnectsite.php on line 50

مشکلی که بود وقتی order by رو اضافه می کردم فاصله تبدیل به کاراکتر میشد و خطایی نداد !

احسان امجدی

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

مانا باشی.

مهرناز معروف

سلام

من هنوز این مفهوم برام ابهام داره،

sql injection یک روش هست که میتوان به دیتابیس های وب سایت ها یا دیگر دیتابیس ها نفوذ کرد و سپس چیکار کرد؟ یعنی به کلیه ی محتوای دیتابیس دسترسی پیدا میکنیم و مثلا اطلاعات شخصی و محرمانه تا حساب های بانکی رو شامل میشه؟

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....