درود بر شما عزیزان و کاربران سایت پی وی لرن. با آموزش رایگان هک قانونمند در خدمتتون هستیم.
حمله ی تزریق SQL نوعی از حملات وب است که هکر با اجرای یک سری دستورات مخرب، می تواند عملیاتی را روی پایگاه داده آسیب پذیر انجام می دهد. در این قسمت آموزش آموزش تزریق SQL همراه با مثال خواهیم داشت. با ما همراه باشید.
داده ها یکی از اجزای حیاتی سیستم های اطلاعاتی هستند. برنامه های وب مبتنی بر پایگاه داده توسط سازمان برای گرفتن داده ها از مشتریان استفاده می شوند. SQL مخفف Structured Query Language است. SQL برای بازیابی و دستکاری داده ها در پایگاه داده مورد استفاده قرار می گیرد.
تزریق SQL حمله ایست که به دستورات dynamic SQL برای تشریح بخش های خاصی از این دستورات یا اضافه کردن یک شرط که همیشه درست است، می پردازد. در این حمله از ضعف های طراحی در برنامه های وبی که ضعیف طراحی شده اند، استفاده می کنند تا دستورات SQL را اکسپلویت کنند و کد خرابکارانه SQL را اجرا نمایند.
در این آموزش، تکنیک های تزریق SQL را یاد خواهید گرفت و نحوه ی محافظت از برنامه های کاربردی وب را از چنین حملاتی آموزش خواهیم داد.
انواع حملاتی که می توانند با استفاده از SQL انجام شوند، بسته به نوع موتور پایگاه داده متفاوت است. تزریق SQL با حمله به دستورات پویای SQL کار می کند. دستورات پویا دستوراتی است که در زمان اجرا با استفاده از پارامترهای رمز عبور از یک فرم وب یا رشته ی URI query تولید می شود.
حال بیایید یک برنامه وب ساده با یک فرم ورودی را در نظر بگیریم. کد فرم HTML در زیر نشان داده شده است.
1 2 3 4 5 6 7 8 9 10 11 | <form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form> |
فرض کنید دستورات در backend برای چک کردن شناسه کاربر به صورت زیر است.
;([‘SELECT * FROM users WHERE email = $_POST[’email’] AND password = md5($_POST[‘password
تزریق SQL را با استفاده از sqlfiddle نشان خواهیم داد. /URL http://sqlfiddle.com را در مرورگر وب خود باز کنید. شما پنجره زیر را دریافت خواهید کرد.
توجه: شما بایستی دستورات SQL را بنویسید.
1 2 3 4 5 6 7 8 9 | CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); insert into users (email,password) values ('m@m.com ',md5('abc')); |
;select * from users
فرض کنید کاربر admin@admin.sys و ۱۲۳۴ را به عنوان رمز عبور دارد. دستوراتی که در برابر پایگاه داده اجرا می شود، خواهد بود:
;(‘SELECT * FROM users WHERE email = ‘admin@admin.sys’ AND password = md5(‘1234
کد بالا را می توان با تبدیل به توضیح بخشی از رمز عبور و اضافه کردن یک شرط که همیشه درست باشد، اکسپلویت نمود. فرض کنید یک مهاجم ورودی زیر را در فیلد آدرس ایمیل ارائه می کند.
[‘–xxx@xxx.xxx’ OR 1 = 1 LIMIT 1
xxx برای رمز عبور
دستورات پویای تولید شده به شرح زیر است.
;(‘SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ OR 1 = 1 LIMIT 1 — ‘ ] AND password = md5(‘1234
دستورات بالا را کپی کنید و آن را در SQL FiddleRun SQL Text box پیست کنید، همان طور که در زیر نشان داده شده است.
ما یک برنامه وب ساده در / http://www.techpanda.org داریم که به حملات SQL Injection آسیب پذیر است. کد فرم HTML بالا از صفحه login گرفته شده است. این نرم افزار، امنیت پایه ای مانند نظارت بر فیلد ایمیل را فراهم می کند. این بدان معناست که کد بالا نمی تواند برای دور زدن لاگین به سیستم، مورد استفاده قرار گیرد.
برای دور زدن ، ما به جای آن می توانیم فیلد رمز عبور را اکسپلویت کنیم. نمودار زیر مراحلی را که باید دنبال کنید، نشان می دهد.
فرض کنید که حمله کننده ورودی زیر را فراهم می کند.
دستورات SQL تولید شده به شرح زیر است.
;(‘[–SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ AND password = md5(‘xxx’) OR 1 = 1
نمودار زیر دستور تولید شده را توضیح می دهد.
به طور کلی، یک حمله موفقیت آمیز SQL Injection تلاش می کند تا تعدادی از تکنیک های مختلف مانند مواردی که در بالا نشان داده شده را برای انجام حمله موفق استفاده نماید.
تزریق SQL می تواند آسیب بیش تری فقط با عبور از الگوریتم های ورود به سیستم ایجاد کند. برخی از حملات عبارتند از:
لیست فوق کامل نیست و فقط به شما دیدی از آن چه که تزریق SQL انجام می دهد را خواهد داد.
در مثال فوق، از تکنیک های حمله دستی بر اساس دانش گسترده از SQL استفاده کردیم. ابزارهای خودکاری وجود دارند که می توانند به شما کمک کنند تا حملات را موثرتر و در کوتاه ترین زمان ممکن انجام دهید. این ابزارها شامل :
یک سازمان می تواند سیاست های زیر را برای محافظت از خود در برابر حملات تزریق SQL اتخاذ کند.
فعالیت هک: از Havij برای تزریق SQL استفاده کنید.
در این سناریوی عملی، ما قصد داریم از برنامه Havij Advanced SQL Injection برای اسکن آسیب پذیری یک وب سایت استفاده کنیم.
توجه: نرم افزار ضد ویروس خود را متوقف کنید.
تصویر زیر پنجره اصلی Havij را نشان می دهد.
ابزار فوق می تواند برای ارزیابی آسیب پذیری یک وب سایت / برنامه استفاده شود.
SQL Injection نوعی از حمله است که از دستورات بد SQL استفاده می کند.
تزریق SQL می تواند مورد استفاده برای دور زدن الگوریتم های ورود، بازیابی، قرار دادن، و به روز رسانی و حذف داده ها باشد.
ابزار تزریق SQL شامل SQLMap، SQLPing، و SQLSmack، و غیره است.
یک سیاست امنیتی خوب هنگام نوشتن دستور SQL می تواند به کاهش حملات تزریق SQL کمک کند.
داریوش
سلام ممنون از سایت خوبتون.ببخشید شما گفتید با sql injection میشه داده ها را تغییر،حذف یا اضافه کرد.من زبان sql بلدم که با دستوراتی مثل delete,update,insert into میشه تغییراتی انجام داد در دیتابیس…ولی چطور این دستورات رو به پایگاه داده تارگت یا همون سایتی که بهش حمله کردم تزریق کنم؟و مثلا داده ای رو با دستور insert into به دیتابیس سایت تارگت اضافه کنم؟ واقعا هیج جا تو اینترنت ننوشته حتی منابع انگلیسی.من اتک union based رو بلدم.تو رو خدا با یه مثال بگید که چجوری میتونم اینکارو بکنم.در حال تست نفوذ یک سایت هستم و واقعا هدفم امنیته نه تخریب.اگه میشه برام توضیح بدید یا ایمیل کنید.ممنون
پی وی لرن
سلام
این موارد تخصصی هست که باید در این زمینه به کلاس های آموزش تخصصی هک قانونمند مراجعه کنید.
سپهر
سلام و درود و ممنون از سایت خوبتون اموزنده بود. اقا داریوش ببینید من بهتون پیشنهاد میکنم از sqlmap استفاده کنید هم راحت تره هم پرامکانات تر. اگر دستورات مورد نظرش رو وارد بکنید میتونید وارد ترمینالی بشید که اونجا سرور اکسپلویت شده و دستورات مورد نظر خودتون رو استفاده کنید. همچنین یکی از دستورات دیلیت drop و drop table هم هست. در ضمن این دستوراتی که خودتون عزض کردید رو فقط میشه با اجازه ی خود ادمین سایت یا با اکانت ادمینستیتور این تغییرات رو توی دیتا بیس و جدول ها ایجاد بکنید