پیاده سازی Sql Injection با استفاده از Query String و روش جلوگیری از آن
چهارشنبه 13 مرداد 1395دراین مقاله شما نفوذ در پایگاه داده و روش جلوگیری از آن را خواهید آموخت .Query String زمانی برای ما کارآمد است و مورد استفاده قرار می گیرد که ما قصد انتقال اطلاعات از صفحه ای به صفحه ای دیگر را داشته باشیم .
Query String زمانی برای ما کارآمد است و مورد استفاده قرار می گیرد که ما قصد انتقال اطلاعات از صفحه ای به صفحه ای دیگر را داشته باشیم .
برای مثال : http://example.com/over/there?id=4
در اینجا ، ما در حال ارسال id = 4 هستیم . که در صفحه اطلاعات مربوط به id =4 نمایش داده خواهد شد.
دلیل استفاده از sql Injection ؟
اطلاعات درون query String برای همه قابل مشاهده است ، که همین امر باعث آسیب پذیری آن میشود . به همین دلیل query string برای انتقال اطلاعات حساس به هیچ وجه مناسب نمی باشد .
SQL Injection
یک تکنیک است که شخص حمله کننده از طریق input های صفحه میتواند به اطلاعات پایگاه داده دسترسی داشته باشد .
SQL Injection در Query String
در حالت کلی ، ما نام کاربری و رمز و شماره عابر بانک و اطلاعات حساس را از طریق Query String ارسال نمی کنیم . اگر شما این کار را انجام دهید ، خواهید دید که هکر ها چگونه اطلاعات حساس کاربران شما را به سرقت خواهند برد .
هکرها براحتی توانایی SQL Injection در Query String ها دارند .
برای مثال : http://testwebsite.com/testdetails.aspx?emailId=testmail@gmail.com
String strEmail = Request.QueryString("emailId") String SqlQuery = "SELECT * FROM temp_table WHERE emailID = '" + strEmail + "'"
SQL query در پایگاه داده اجرا خواهد شد ، کد بالا دقیقا شبیه یک query معمولی ای است که در زیر نمایش داده شده است .
SELECT * FROM temp_table WHERE emailID = testmail@gmail.com
از query ای که در بالا داده شده است ، توقع داریم که ، اطلاعات شخصی را که ایمیل آن در بالا داده شده است را به ما برگرداند . مقادیر داده هایی که در query string موجود هستند رمزگذاری نشده اند ، که این یه مزیت برای Hacker است و براحتی میتواند با اعمال تغییرات بر روی query String به اطلاعات دیگر موجود در پایگاه داده ما دسترسی پیدا کتد .
برای مثال :
Hacker میتواند تغییراتی همانند زیر را بر روی URL با SQL Injection ، اعمال کند :
http://testwebsite.com/testdetails.aspx?emailId=testmail@gmail.com';DROP DATABASE userdb--
توجه داشته باشید که Hacker چگونه ';DROP DATABASE userdb-- vh را به "کوئری بد" در مقادیر query strng ضمیمه کرد ، , و برای پایان دادن به جمله sql فعلی از کاراکتر ";" و در ادامه کوئری دلخواه خودش را به query String اضافه میکند . بعد از ثبت درخواست ، ابتدا ، درخواست ارسالی برای جدول User اجرا خواهد شد ، سپس کل پایگاه داده Userdb را حذف میکند . در اینجا اگر دقت کنید ، Hacker در انتهای SQL Injectione که در query string قرار داده است در انتهای آن -- را ضمیمه کرده است ، که بدین معناست که بعد از این کاراکترها ، بقیه اظهارات و درخواست های Query را نادیده بگیرد .
Hacker همچنین میتواند عمل های ADD ، UPDATE , INSERT , ALTER را بروی پایگاه داده انجام دهد و اطلاعات کاربران را بدست آورد.
در زیر ، کدی در راستای چگونگی جلوگیری کردن از نفوذ و دست کاری پایگاه داده ، آمده است :
مواردی که باید از sql injection در query string مورد بررسی قرار بگیرند :
آدرس حقیقی : http://localhost:2001/querystringinjection.aspx?userName=testUser
تست مورد اول :
اگر کاربر یک پارامتر query string مانند userName = testUser ارسال کرد ، آن کاربر هیچ رکوردی را نخواهد دید ، به این دلیل که ، هیچ داده ای شبیه متنی که در input وارد شده است در پایگاه داده ما وجود ندارد . اگر ما userName = testUser یا 1=1 را ارسال کنیم تمام رکوردهای پایگاه داده را خواهیم دید ، به این دلیل که ، ما 1=1 را ارسال کردیم و این بدان معناست که ، همیشه مقدار True را بازمیگرداند .
تست مورد دوم :
اگر ما در input متن
userName = testUser'; update PO_USER_DETAILS_MASTER set user email='testUser@gmail.com--
را وارد کردیم مقدار فیلد ایمیل تمام کاربران به Email='testUser@gmail.com-- تغییر خواهد کرد .
تست مورد سوم :
اگر ما user Name = sampleUser' drop table sampleTable-- ارسال کنیم ، اطلاعات کاربران را نمیتوانیم ببینیم . در پایگاه داده ، Hacker جدول ما را drop کرده است .
تست مورد چهارم :
اگر ما user Name = sampleUser' or ‘1’=’1’ drop table sampleTable -- را ارسال کنیم ما میتوانیم اطلاعات کاربران را مشاهده کنیم . در پایگاه داده ، جدول ما drop شده است .
تست مورد پنجم :
اگر ما userName = <script src="http://localhost:2001/Attackerscript.js"></script> را ارسال کنیم ما میتوانیم "اسکریپت های بد " را به query string ضمیمه کنیم .
- SQL Server
- 3k بازدید
- 5 تشکر