sql injection آموزش
هک یک وب سایت هک شده به طریق sql injection .
بعد از پستی که چند روز پیش در مورد sql inection و CSRF نوشته بودم دوستان سوالات بسیار پیچیده ای ازم پرسیدند و البته اخطاری هم دریافت کردم در مورد حذف لبنک دانلود نرم افزار تست نفوذ وب سایتها از طریق SQL INJECTION که به توسط یه نرم افزار روسی انجام می پذیرفت . علی ایحال بخاطر تذکری که دریافت کردم مجبور شدم لینک دانلود این نرم افزار ها رو بردارم – هرچند حدود ۳۴۰ بار هم دانلود شده بود . یکی از دوستان هم آدرس وب سایت خودش رو داده بود که گویا هک شده و اصرار داشت که بدونه آیا میشه براش کاری کرد یا نه , در این خصوص ذکر یه تجربه می تونه مفید باشه .
من که خودم رو در این حیطه مقداری متخصص میدونم اعتراف میکنم ماه قبل یکی از ساب دامین های من هک شد . جریانش به قرار زیره :
من ساب دامینی داشتم به آدرس forum.tablokar.ir که بخش فروم سایت اونجا قرار داشت – حدود یکسالی هم بود که داشتم روش کار میکردم و ۳۴۰۰ عضو داشتیم که در زمینه الکترونیک و تخصصا در زمینه برنامه نویسی arm – avr – pic و از این دست مقاله ها می نوشتیم و میخوندیم – باید بگم یکی از موفق ترین فرومهایی بود که دوستان فرهیخته ای عضو بودند و باعث آشنایی من با مهندسین متخصصی شد که واقعا به دوستی تک تکشون افتخار میکنم .
روزی از روز ها چند ایمیل و زنگ دریافت کردم که انجمن الکترونیک از دسترس خارج شده . من با چک کردن سرور اول فکر کردم که زیر DDOS قرار داریم ، خیلی شیک و مجلسی سرور رو RESET کردم و چون بارها زیر DDOS بودیم و فایروال نداشتیم قهرا IP های غیر از ایران رو غیر فعال کردم – بخیال خودم که از DDOS جلوگیری کنم . این تلفن ها تا ساعت ۸ شب تکرار شد و من میگفتم که زیر DDOS هستیم و آی ÷ی های غیر ایرانی رو محدود کردم و تجویز می کردم بدون آنتی فیلتر وارد وب سایت بشید . دوستان هم میگفتند که آقا جان این سایت کلا از دسترس خارجه .
وارد سرور شدم دیدم باز هم این انجمن ۶۰% از منابع سرور رو مصرف میکنه – در حالی که اصولا نباید بیش از یکی دو درصد می بود . با دیدن آلارم کم بودن حجم مخم سوت کشید ، حجم دیتا بیس انجمن بیش از دویست برابر شده بود .
به این میگن یه حمله اساسی , من هیچ کاری از دستم بر نیومد – هر کاری کردم نتونستم این کدی که هی داشت دیتا بیس رو توی خودش با سرعت وحشتناکی گسترش میداد از کار بندازم – مجبور شدم فایل دیتا بیس رو غیر قابل رایت کنم از همه دوستان متخصص هم کمک خواستم ولی هر کسی یه داستانی بهمون گفت و شد آنکه نباید میشد . انجمن حذف شد .
برای اولین بار تجربه ای تلخ از هک شدن توسط sql injection رو چشیدم و دیگه این جریان رو شوخی نگرفته و نمیگیرم .
البته آی دی و شناسه اون برادری که سایت ما رو فرستاد رو هوا هنوز دارم و هر از گاهی عرض ارادت میکنم و از تحصصش استفاده ها میکنم .
علی ایحال تو آخر این مطلب آموزشی یه فیلم هم گذاشتم برای اینکه با جریان آشنا بشید . وب سایتی هک شده بود – من هم زدم رو دست هکر – یعنی سایت هک شده رو یکبار دیگه هک کردم . البته با روشی کاملا ساده و بچگانه . در عرض کمتر از ده دقیقه .
بریم سر موضوع خودمون – یعنی آموزش و تو۱ضیح دوباره SQL Injection که هر چقدر در موردش بتونم بنویسم کم نوشتم و هر چقدر بگم کمه .
حتما تو فیلمهای سینمایی دیدید که بسیاری از تبهکاران قربانیان خود را با تزریق مواد سمی به جای دارو از میان بر می دارند. آیا در دنیای سایبر نیز چنین ایده هایی وجود دارد؟ در کمال تعجب باید بگویم که بله!! هکرها هم به نوعی از این شگرد استفاده می کنند. می گویید چگونه؟ با تزریق کردن دستورات SQL مورد علاقه خود به Application شما! اجازه دهید تا با یک مثال مطلب را روشن تر کنم:
سیستم Login:
صفحات Login معمولا دارای Fieldهایی هستند که دو مقدار ID و Password را از User گرفته و سپس با استفاده از یک دستور SQL آن را Process می کنند. نمونه ساده ای از این دستور به صورت زیر است:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=’” & UserID.Text & “‘ AND Pass=’” & Password.Text & “‘”
در این مثال UserID و Password دو Control TextBox هستند که مقادیر آنها بایستی مورد Process قرار گیرد. حال فرض می کنیم User مقادیر را به صورت mahdi و ۱۲۳ insert نماید، در این صورت جمله SQL به صورت زیر تولید می شود:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=’mahdi’ AND Pass=’۱۲۳′
خوب تا اینحا مشکلی وجود ندارد. حال فرض کنید که هکر ما به جای کلمه Userی خود عبارت زیر را insert نماید:
‘ OR 1=1 –
در این صورت عبارت SQL زیر تولید خواهد شد:
SELECT COUNT(UserID) FROM tblUsers WHERE UserID=” OR 1=1 – AND PASS=”
احتمالا می دانید که Character – در SQL علامت توضیحات است و عبارت پس از آن دیگر Process نمی شود لذا هنگام Process دستور چون همواره ۱=۱ است و با توجه به OR به کار رفته، بدون توجه به خالی بودن مقدار مقابل UserID 1=1 کافی تلقی شده و کلیه Recordهای DataBase برگردانده می شود و Attacker اصطلاحا Authenticate می شود.
پیش از آنکه به ارائه راه حل این حفره امنیتی خودساخته بپردازیم این نکه شایان ذکر است که این حملات در پایگاه اطلاعاتی SQL Server بسیار پیچیده تر است که در قسمت دوم مقاله مورد بررسی قرار خواهد گرفت.
چاره کار!
ساختار شی گرای ASP.NET و امکانات این ساختار به برنامه نویسان امکان مانور بیشتری را داده است. حال ما Code کامل اصلاح شده را در زیر آورده و سپس توضیحات آن را ذکر می کنیم:
Code:
Dim strSQL As String = “SELECT COUNT(UserID) FROM tblUsers WHERE
UserID=@UserID AND Password=@Password”
Dim cmndCheck As OleDbCommand = New OleDbCommand(strSQL, _Connection)
cmndCheck.Parameters.Add(”@UserID”, UserID.Text);
cmndCheck.Parameters.Add(”@Password”, Password.Text);
cmndCheck.Connection.Open()
Dim IsValid As Integer = cmndCheck.ExecuteScalar()
If IsValid > 0
‘… Some Code here… User is authenticated
Else
‘… Some Code here… User is not aututorized to view the page
End If
تغییر در همان خط اول یعنی دستور SQL مشخص است این بار به جای اینکه مقادیر دریافتی از Fieldها با Single Quote به خورد Processگر دستور داده شود مقادیر با parameterهای تولید شده توسط Object OleDbCommand جایگزین می شود و در آخر cmndCheck Process شده چنانچه مقدار تولید شده توسط ExecuteScalar بزرگتر از صفر باشد بدین معنی است که حداقل یک Record با شرایط مورد نظر ما پیدا شده است.
(متغیر Connection_ که باید برابر ConnectionString شما قرار گیرد دانسته فرض شده است)
تقاوت اصلی این روش نسبت به روش ناامن قبلی این است که در اینجا مقادیر به صورت کاملا” parameterی شده Process می شوند نه به صورت قطعاتی از یک رشته حرفی که در واقع دام اصلی SQL Injection به شمار می آید. در واقع ما در اینجا از تکنیکهای رشته سازی با استفاده از & یا + اجتناب کرده ایم.
نکته مهم دیگری که باید حتما مورد توجه قرار دهید این است که یکی از راههایی که هکرها برای حمله به سایت شما استفاده می کنند خطاسازی صوری در زمان اجرای Application و مطالعه اطلاعات خطای دریافت شده است. برای جلوگیری از این اتفاق که می تواند ساختار بعضی از قسمتهای Code شما را برای حمله کنندگان آشکار کند حتما در Application خود از روال خطایابی Customize شده استفاده کنید.
مثال های تصویری از SQL Injection:
|
|
به راه افتادن دور جدید حملات SQL
بیانیه متخصصان F-Secure حاکی از به راه افتادن دور جدیدی از حملات SQL است که عمدتاً سایتهای چینی را هدف قرار گرفته است.
به گزارش آژانس خبری پرشین هک از مشورت، در این شیوه هکرها با استفاده از آسیبپذیریهای SQL، اقدام به تزریق Codeهای مخرب به صفحات جعلی وب مینمایند. عملکرد Codeهای مخرب این است که User را به صفحات آلودهای هدایت میکند که سعی در سوءاستفاده از Bugهای موجود در رایانه User و نصب بدافزار (malware) دارد.
به گزارش vnunet اگر حمله با موفقیت انجام شود، رایانه User با ویروس خاصی از نوع اسب تروا (Trojan) آلوده میشود که فعالیتهای User را ثبت نموده و اطلاعات مربوط به کلمه عبور او را برای بزهکاران آنلاین ارسال مینماید.
F-Secure میگوید که حملات یادشده متوجه سایتهای چینی زبان و آن دسته از باگهای نرمافزاری است که قبلاً شناسایی شده است.
این شرکت امنیتی در گزارش خود اعلام کرده است: «به دلیل توجهات ویژهای که امروزه به کشور چین میشود، خصوصاً با توجه به برگزاری المپیک ۲۰۰۸ پکن، در حال حاضر کلمه China به یک کلمه جذاب و پرUserد در موتورهای جستجو تبدیل شده است و همین امر توجه ویروسنویسها را جلب کرده و آنها تلاشهای خود را بر حمله به سایتهای چینی متمرکز کردهاند.»
گفتنی است شرکت معتبر و مطرح سنس (Sans) نیز گزارشهایی مبنی بر بروز حملات مختلف SQL injection دریافت کرده است. سنس حدس میزند تاکنون حداقل ۴۰۰۰ سایت دیفیس شده است.
به گزارش vnunet حملات SQL injection در سال گذشته از رشد قابل ملاحظهای برخوردار بوده است