تیم امنیت سایبری حامیان ولایت

اللهم إیّاک نعبد و إیّاک نستعین

تیم امنیت سایبری حامیان ولایت

اللهم إیّاک نعبد و إیّاک نستعین

تیم  امنیت سایبری حامیان ولایت

تیم امنیت سایبری حامیان ولایت در سال 1392 فعالیت خود را در زمینه های هک و امنیت آغاز کرد و به زودی به کمک کاربران فعال و مدیران لایق یکی از بزرگ ترین انجمن های هک و امنیت ایران خواهد شد . تیم امنیت سایبری ولایت فقط جهت اشنایی و بالا بردن سطح اطلاعات هم وطنان عزیزمان در زمینه ی هک و امنیت و طبق قوانین جمهوری اسلامی ایران فعالیت میکند. گروه ما از همین جا اعلام می دارد که هدف ما ارتقای امنیت سایت های ایرانی است وبه هیچ عنوان به سایت های ایرانی حمله نخواهیم کرد و هرگونه حمله ای بنام تیم ما، مورد تایید گروه ما نیست.

پیوندهای روزانه

در این بخش، ما انواع روش های شناخته شده حملات تزریق SQL را بیان و تشریح خواهیم کرد. برای هر نوع حمله، یک نام، یک یا چند هدف حمله، یک توصیف از حمله، و یک مثال بیان خواهند شد.
انواع مختلف حملات بسته به اهداف مهاجم، گاهی با هم و گاهی به صورت متوالی و پشت سر هم نیز مورد استفاده قرار می گیرند. همچنین باید به این نکته نیز توجه کرد که نسخه های متعددی از هر نوع حمله نیز وجود دارد.


Tautology

هدف حمله:


عبور از مکانیزم های تایید اعتبار کاربر، مشخص کردن آسیب پذیری های برنامه وب یا پارامترهای قابل تزریق، به دست آوردن داده های ارزشمند، حساس و مفید از پایگاه داده.
توصیف:
هدف معمول یک حمله مبتنی بر tautology این است که کدی را به یک یا چند جمله شرطی تزریق نماید، به صورتی که آن شرط ها همواره صحیح باشند. نتیجه این حمله به این بستگی دارد که نتیجه پرس و جوها چگونه در برنامه مورد استفاده قرار گیرد. موارد استفاده معمول این حملات در عبور از صفحات تایید اعتبار و به دست آوردن داده است. در این نوع تزریق، یک فرد مهاجم از یک فیلد قابل تزریق که در یک پرس و جوی شرطی WHERE مورد استفاده قرار می گیرد، سوء استفاده می کند. تبدیل جمله شرطی به یک tautology باعث می شود که تمامی سطرهای جدول پایگاه داده که هدف پرس و جو بوده اند، به عنوان نتیجه باز گردانده شوند. در کل برای اینکه یک حمله مبتنی بر tautology بتواند کار کند، یک فرد مهاجم نه تنها باید پارامترهای قابل تزریق یا آسیب پذیر را در نظر بگیرد، بلکه ساختارهای کدگذاری که نتایج پرس و جو را ارزیابی می کنند نیز باید در نظر گرفته شوند. نوعا این حمله زمانی موفقیت آمیز خواهد بود که کد تمامی رکوردهای برگردانده شده را نمایش دهد یا اینکه اگر حداقل یک رکورد برگردانده شده است، برخی عملیات را بر روی آن انجام دهد.
مثال:
در این مثال حمله، یک فرد مهاجم ‘ or 1=1 - - را برای فیلد ورودی login ثبت می نماید (ورودی ثبت شده برای سایر فیلدها نامربوط است). پرس و جوی نتیجه این است:

SELECT accounts FROM users WHERE Login=’ ’ or 1=1 - - AND pass=’ ’ AND pin=


کد تزریق شده به جمله شرطی (OR 1=1) کل عبارت WHERE را به یک tautology تبدیل می کند. این پایگاه داده از این جمله شرطی به عنوان مبنای ارزیابی هر سطر و تصمیم گیری در مورد اینکه کدامیک به برنامه برگردانده شوند استفاده می کند. از آنجایی که جمله شرطی یک tautology است، این پرس و جو به ازای هر سطر از جدول مقدار صحیح برمی گرداند و تمامی آنها را برمی گرداند. در مثال ما، مجموعه بازگردانده شده به یک مقدار غیر NULL ارزیابی می شود، که باعث می شود برنامه این طور نتیجه گیری کند که تایید هویت کاربر موفقیت آمیز بوده است. بنابراین این برنامه متد displayAccounts( ) را فراخوانی کرده و تمامی حساب های کاربری مجموعه بازگردانده شده توسط پایگاه داده را نمایش می دهد.

پرس و جوهای نادرست غیر مجاز/غیر منطقی

هدف حمله:

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

توصیف:

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

مثال:
هدف این حمله در این مثال این است که یک خطای تبدیل نوع ایجاد نماید که می تواند داده های مرتبط را افشا نماید. برای انجام این کار، فرد مهاجم متن زیر را به فیلد ورودی pin تزریق می کند:

“convert(int,(select top 1 name from sysobjects where xtype=’u’))”

پرس و جوی نتیجه به این شکل خواهد بود:
SELECT accounts FROM users WHERE login=’ ’ AND Pass=’ ’ AND pin= convert (int, (select top 1 name from sysobjects where xtype=’u’))

در رشته حمله، پرس و جوی تزریق شده تلاش می کند که اولین جدول کاربر (xtype=’u’) را از جدول ابرداده های پایگاه داده بیرون بکشد (فرض کنید که این برنامه از Microsoft SQL Server استفاده می کند که جدول ابرداده در آن sysobjects نامیده می شود). آنگاه این پرس و جو سعی می کند نام این جدول را به یک عدد صحیح تغییر دهد. از آنجایی که این یک تبدیل نوع مجاز نیست، پایگاه داده یک پیغام خطا تولید می کند. در Microsoft SQL Server این پیغام خطا چنین خواهد بود:

“Microsoft OLE DB Provider for SQL Server (0x80040E07) Error converting nvarchar value ‘CreditCards’ to a column of data type int”.


اطلاعات مفیدی که در این پیغام خطا برای فرد مهاجم وجود دارد دو دسته است. اول اینکه فرد مهاجم می تواند ببیند که پایگاه داده از نوع SQL Server است. دوم اینکه این پیغام خطا، مقدار رشته ای که باعث خطای تبدیل نوع شده است را افشا می کند. در این حالت، این مقدار نام اولین جدول تعریف شده توسط کاربر در پایگاه داده نیز هست: «CreditCards». یک استراتژی مشابه می تواند برای استخراج سیستماتیک نام و نوع هر ستون پایگاه داده نیز به کار رود. با استفاده از این اطلاعات درباره مدل پایگاه داده، یک فرد مهاجم می تواند حملات بعدی را که اطلاعات خاصی را هدف قرار می دهند آغاز نماید.

پرس و جوی Union

پرس و جوی نتیجه به این شکل خواهد بود:

 

هدف حمله:

عبور از مکانیزم های تایید اعتبار کاربر، به دست آوردن داده های ارزشمند، حساس و مفید از پایگاه داده

توصیف:

در حملات پرس و جوی Union، یک فرد مهاجم با سوء استفاده از یک پارامتر آسیب پذیر، مجموعه داده های بازگردانده شده برای یک پرس و جو را تغییر می دهد. با این تکنیک، یک فرد مهاجم می تواند برنامه را فریب داده و داده ها را از جدولی غیر از جدول مورد نظر طراح پایگاه داده برگرداند. مهاجمان این کار را با تزریق یک دستور به شکل UNION SELECT <rest of injected query> انجام می دهند. از آنجاییکه مهاجمان به طور کامل دومین پرس و جوی تزریق شده را کنترل می کنند، می توانند از این پرس و جو برای بازیابی اطلاعات از یک جدول خاص استفاده نمایند. نتیجه این حمله این است که پایگاه داده، مجموعه داده ای را برمی گرداند که اشتراک نتایج پرس و جوی اصلی و نتایج پرس و جوی تزریق شده است.

مثال:

یک فرد مهاجم می تواند متن

“UNION SELECT cardNO from CreditCards where acctNO=10032 - -“

را به فیلد login تزریق نماید که پرس و جوی زیر را تولید می کند:
SELECT accounts FROM users WHERE login=’ ’ UNION
SELECT cardNO from CreditCards where acctNO=10032 - - AND pass=’ ’ AND pin=


با فرض اینکه هیچ لاگینی مترادف با “ “ نیست، پرس و جوی اصلی مجموعه null برمی گرداند، در حالیکه پرس و جوی تزریق شده، داده های جدول CreditCards را برمی گرداند. در این حالت، این پایگاه داده ستون «cardNo» را برای حساب «10032» برمی گرداند. این پایگاه داده ها نتایج این دو پرس و جو را می گیرد، اشتراک آنها را به دست می آورد، و آنها را به برنامه باز می گرداند. در بسیاری از برنامه ها، تاثیر این عملیات این است که مقدار «cardNo» همراه با اطلاعات حساب کاربری نمایش داده می شود.

پردازه های ذخیره شده

را به فیلد login تزریق نماید که پرس و جوی زیر را تولید می کند:

 

هدف حمله:

عبور از مکانیزم های تایید اعتبار کاربر، به دست آوردن داده های ارزشمند، حساس و مفید از پایگاه داده

توصیف:

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

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

مثال:

روال ذخیره شده برای چک کردن اعتبارات:

CREATE PROCEDURE DBO. isAuthenticated
@userName varchar2, @pass varchar2, @pin int
AS
EXEC(“SELECT accounts FROM users
WHERE login=’ “ +@userName+ “ ’ and pass=’ “ +@password+

“ ’ and pin=” +@pin);
GO

این مثال نشان می دهد که چگونه یک روال ذخیره شده پارامتری می تواند توسط یک حمله تزریق SQL مورد سوء استفاده قرار گیرد. در این مثال، ما فرض می کنیم که رشته پرس و جوی ساخته شده در خطوط 5، 6 و 7 مثال ما، توسط یک فراخوانی به روال ذخیره شده فوق جایگزین می گردد. این روال ذخیره شده یک مقدار True/False را برمی گرداند که نشان می دهد آیا اعتبار کاربر به درستی تایید شده است یا خیر. برای راه اندازی یک حمله تزریق SQL، این مهاجم به سادگی “ ‘ ; SHUTDOWN;--“ را به فیلدهای username یا password تزریق می کند. این تزریق باعث می شود که روال ذخیره شده پرس و جوی زیر را تولید نماید:

SELECT accounts FROM users WHERE login=’doe’ AND pass=’ ’; SHUTDWON; -- AND pin=

در اینجا، اولین پرس و جو به صورت عادی اجرا می گردد، و سپس دومین پرس و جوی خرابکار اجرا می شود، که باعث خاموش شدن پایگاه داده می گردد.

استنتاج

 

هدف حمله:

مشخص کردن آسیب پذیری های برنامه وب یا پارامترهای قابل تزریق، به دست آوردن داده های ارزشمند، حساس و مفید از پایگاه داده، به دست آوردن الگوی پایگاه داده مانند نام جداول، نام ستون ها، و نوع داده ستون ها

توصیف:

در این حمله، پرس و جو طوری تغییر می کند که به شکل یک کنش که بر اساس پاسخ به یک سوال True/Flase درباره ارزش های داده ها در پایگاه داده اجرا می شود، درآید. در این نوع تزریق، مهاجمان معمولا سعی می کنند که به یک سایت که به اندازه کافی امن شده است حمله نمایند، بنابراین زمانی که تزریق موفق اتفاق می افتد، هیچ فیدبک قابل استفاده ای از طریق پیغام های خطای پایگاه داده وجود ندارد. از آنجاییکه پیغام های خطای پایگاه داده فیدبکی در اختیار مهاجم قرار نمی دهد، مهاجمان باید از یک روش متفاوت برای به دست آوردن جواب از پایگاه داده استفاده کنند. در این شرایط، فرد مهاجم دستورات را به سایت تزریق می کند و سپس مشاهده می کند که چگونه تابع/پاسخ وب سایت تغییر می کند. با توجه به اینکه سایت چه زمانی مانند همیشه و به حالت عادی و چه زمانی به صورتی متفاوت رفتار می کند، یک فرد مهاجم می تواند نتیجه بگیرد که که کدام پارامترها آسیب پذیر هستند و نیز می تواند اطلاعات دیگری راجع به مقادیر موجود در پایگاه داده به دست آورد. دو تکنیک حمله شناخته شده مبتنی بر استنتاج وجود دارند. این دو تکنیک به فرد مهاجم اجازه می دهند که داده ها را از یک پایگاه داده به دست آورده و پارامترهای آسیب پذیر را شناسایی نماید. محققان گزارش کرده اند که با استفاده از این تکنیک ها، توانسته اند با سرعتی معادل 1 B/s داده ها را استخراج نمایند.

تزریق کور:

در این تکنیک، اطلاعات باید از رفتار صفحه و با پرسیدن سوالاتی با پاسخ های True/Flase از سرور استنتاج گردد. اگر دستور تزریق شده صحیح ارزیابی گردد، سایت به فعالیت خود به صورت عادی ادامه می دهد. اما اگر این دستور غلط ارزیابی گردد، با اینکه هیچ پیغام خطایی نمایش داده نمی شود، ولی صفحه با وضعیت عادی بسیار تفاوت دارد.

حملات زمان بندی:

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

مثال:

دو روش برای استفاده از حملات استنتاج وجود دارد. در روش اول، پارامترهای قابل تزریق با استفاده از تزریق کور به دست می آیند. دو تزریق ممکن را به فیلد login در نظر بگیرید. اولی “legalUser’ and 1=0 - -” و دومی “legalUser’ and 1=1 - -”. این تزریق ها به دو پرس و جوی زیر منجر می شوند:

SELECT accounts FROM users WHERE login=’legalUser’ and 1=0 - - ’ AND pass=’ ’ AND pin=0
SELECT accounts FROM users WHERE login=legalUser’ and 1=1 - - ’ AND pass=’ ’ AND pin=0

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

روش دوم حملات مبتنی بر استنتاج برای به دست آوردن داده از پایگاه داده ها مناسب است. در اینجا ما با یک مثال، نشان می دهیم که چگونه از حملات زمان بندی برای به دست آوردن نام یک جدول پایگاه داده استفاده می کنیم. در این حمله، دستور زیر به پارامتر login تزریق می شود:

‘ ‘legalUser’ and ASCII (SUBSTRING((select top 1 name from sysobjects),1,1)) > X WAITFOR 5 - -’ ’.

این تزریق، پرس و جوی زیر را تولید می کند:
SELECT accounts FROM users WHERE login=’legalUser’ and ASCII (SUBSTRING((select top 1 name from sysobjects),1,1)) > X WAITFOR 5 - - ’ AND pass=’ ’ AND pin=0 AND pin=0

در این حمله، تابع SUBSTRING برای به دست آوردن اولین کاراکتر نام اولین جدول استفاده می شود. سپس با استفاده از استراتژی جستجوی دودویی، فرد مهاجم می تواند مجموعه ای از پرس و جوها را در مورد این کاراکتر انجام دهد. در این مثال، فرد مهاجم این پرس و جو را ایجاد می کند که آیا کد اسکی کاراکتر مورد نظر، بزرگتر، کوچکتر، یا مساوی مقدار X است. اگر مقدار مورد نظر بزرگتر باشد، فرد مهاجم آن را با 5 ثانیه تاخیر اضافه شده به پاسخ پایگاه داده متوجه خواهد شد. سپس فرد مهاجم می تواند با استفاده از یک جستجوی دودویی با تغییر مقدار X، مقدار آن کاراکتر را پیدا نماید.

این تزریق، پرس و جوی زیر را تولید می کند:

 

  • مدیرکل

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی