Sql Injection

مرجع کامل آموزش SQL Injection – فصل ۱

جهت آموزش SQL Injection یا تزریق SQL  ابتدا مروری بر SQL خواهیم داشت . SQL یک پایگاه اطلاعاتی است که شامل ردیف ها و ستون ها می باشد ردیفها گاهی اوقات به عنوان Tuples نیز تکرار میشوند. در DBMS (سیستم مدیریت پایگاه داده) ۳ قسمت اصلی وجود دارد :

  • ایجاد ساختار جدول
  • وارد کردن اطلاعات
  • ساخت پرس و جو (و گرفتن نتایج معنی دار از داده ها)

پرسشها (Queries) مهمترین بخش هر پایگاه داده است که به کاربران یک برنامه وب امکان دریافت نتایج معنی داری را از پایگاه داده می دهد بنابراین اهداف در این که چگونه می توان از پرس و جو ها برای دستکاری در پایگاه داده و فریب آن به دادن اطلاعات ارزشمند با یک روش Un-Authorized جالب خواهد بود .

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

این سایت احتمالا اطلاعاتی درباره تی شرت در یک جدول با ستون هایی مانند BrandName، Price، Company، Size، Fabric و غیره ذخیره خواهد کرد و به شما اجازه می دهد تا برای ایجاد یک پرس و جو با استفاده از یک نوع کاربری مبتنی بر فرم که شامل جعبه چک یا چک باکس است قیمت خود را انتخاب کنید

سپس پرس و جو را ایجاد کرده و داده ها را از سرورهای SQL خود درخواست کنید . خوب این فرایند عالی است و دقیقا همان چیزی است که یک هکر به دنبال یک برنامه وب است .

در حال حاضر نکته اصلی در اینجا این است که پرس و جوهای SQL را می توان حتی بدون ثبت نام نیز ارسال کرد . بنابراین سرورهای SQL برای تعامل با بازدیدکنندگان وب باز هستند .

در حال حاضر این روش خودکار برای ایجاد پرس و جو برای شما نسبتا امن است اما روش های دیگری برای ایجاد پرس و جو که می تواند توسط تست نفوذ گنندگان و یا هکرها مورد سوء استفاده قرار گیرد وجود دارد .

یک URL که  به php. منتهی میشود یک نشانه مستقیم است که وب سایت یا وبلاگ از sql برای ارائه بسیاری از داده های آن استفاده می کند و شما می توانید مستقیما با تغییر آدرس آن را اجرا کنید .

به طور معمول اساسا داده ها در جداول SQL محافظت می شوند

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

این حمله ( SQL Injection ) یا تزریق SQL می تواند برای به دست آوردن اطلاعات محرمانه مانند لیست نام کاربری و کلمه عبور تمام کاربران در یک وب سایت مورد استفاده قرار گیرد.

معرفی :

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

در این مقاله من در مورد روش های معمول استفاده شده توسط هکرها و تست نفوذ کننده ها برای جلوگیری و دور زدن IDS، IPS، WAF مانند Modsecurity، dotdefender و غیره صحبت خواهم کرد .

مقاله آموزش SQL Injection  در ۴ فصل ارائه خواهد شد که فصل ۱ آن در این پست گردآوری شده است .

فصل اول

  • تزریق SQL چیست؟
  • تزریق SQL: یک توضیح عمیق
  • چرا امکان ارسال پرس و جو SQL به طور مستقیم به یک پایگاه داده که پشت یک فایروال و مکانیزم امنیتی پنهان است وجود دارد ؟
  • آیا پایگاه داده من در معرض خطر تزریق SQL است؟
  • تزریق SQL چه تاثیری دارد؟
  • مثال یک حمله SQL Injection
  • فایروال های Web Application
  • تشخیص WAF
  • پیام سریع
  • Dotdefender
  • مشاهده پاسخ HTTP

فصل اول آموزش SQL Injection

تزریق SQL چیست؟

تزریق SQL یکی از بسیاری از مکانیزم های حمله به وب است که هکرها برای سرقت اطلاعات از سازمان ها استفاده می کنند. شاید این یکی از رایج ترین تکنیک های حمله به لایه کاربردی باشد .

در آموزش sql injection تزریق SQL یک نوع حمله ای است که نفوذگر از برنامه نویسی برنامه های وب شما استفاده می کند تا با استفاده از  اجازه دسترسی که از ضعف برنامه نویسی ایجاد گردیده بتواند دستورات SQL خود را به شکل فرم ورودی تزریق کند

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

تزریق SQL در آموزش sql injection : یک توضیح عمیق

برنامه های کاربردی وب به بازدیدکنندگان مشروع وب سایت ها امکان ارسال و بازیابی اطلاعات را از یک پایگاه داده با استفاده از مرورگر وب مورد نظر خود می دهند.

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

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

برنامه های کاربردی وب و پایگاه های داده به شما اجازه می دهند تا به طور منظم کسب و کار خود را اداره کنید .

تزریق SQL در مقاله آموزش sql injection ما ، مدلی از تکنیک هک است که تلاش می کند دستورات SQL را (دستور العمل ها) را از طریق یک برنامه وب برای اجرا توسط پایگاه داده اجرا کند .

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

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

این ویژگی های وب سایت نمونه هایی از برنامه های وب است که ممکن است به صورت غیرقابل خرید یا توسعه یافته به صورت برنامه های سفارشی باشند.

این ویژگی های وب سایت همه حساس به حملات تزریق SQL هستند زیرا زمینه های موجود ذکر شده که برای ورود کاربر میباشند اجازه می دهند تا SQL بیانیه ها را مستقیما از طریق پایگاه داده عبور داده و عملیات پرس و جو را انجام دهد .

در این جا یک پرسش پیش می آید که چرا امکان ارسال پرس و جو SQL به طور مستقیم به یک پایگاه داده وجود دارد در حالی که پایگاه داده پشت یک فایروال و یا مکانیزم های امنیتی دیگر پنهان شده است؟

فایروال ها و مکانیزم های تشخیص نفوذ مشابه، تقریبا دفاع کاملی در برابر حملات SQL Injection ارائه نمی دهند.

از آنجا که وبسایت شما باید عمومی باشد، مکانیزم های امنیتی اجازه می دهند تا ترافیک عمومی وب برای ارتباط با برنامه وب خود  (معمولا از پورت های ۸۰/۴۴۳) عبور کنند . نرم افزار وب دارای دسترسی آزاد به پایگاه داده برای بازگرداندن اطلاعات درخواست شده (تغییر یافته) است.

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

زبان SQL یا Structured Query Language زبان کامپیوتری است که به شما اجازه ذخیره، دستکاری و بازیابی اطلاعات ذخیره شده در یک پایگاه داده ارتباطی (یا مجموعه ای از جداول که سازماندهی شده و دارای ساختار داده ها می باشد ) را بازیابی می کند.

SQL، در واقع، تنها راهی است که یک برنامه وب (و کاربران) میتوانند با پایگاه داده ارتباط برقرار کنند. نمونه هایی از پایگاه داده های ارتباطی عبارتند از: اوراکل،MS SQL سرور و Filemaker Pro که همه آنها از SQL به عنوان بلوک های اصلی ساختمان خود استفاده می کنند.

دستورات SQL عبارتند از SELECT، INSERT، DELETE و DROP TABLE. جدول DROP

در سناریوی آموزش sql injection مشروع مثال صفحه ورود به سیستم ، دستورات SQL برنامه ریزی شده برای برنامه وب ممکن است مانند موارد زیر باشند :

 

SELECT count(*) FROM users_list_table

WHERE username=’FIELD_USERNAME’ AND

”password=’FIELD_PASSWORD

هر کدام از برنامه های کاربردی وب که با درخواست های SQL با انجام وظایف قانونی و ارتباط با پایگاه داده اجرا می شوند، اجرای سختگیرانه ایی دارند .

اگر هر فیلد ورودی برنامه وب به خوبی آنالیز نشده باشد، ممکن است یک هکر دستورات اضافی SQL را وارد کند و این تزریق ( Sql Injection )  می تواند طیف وسیعی از دستورات SQL را که برنامه وب اجرا می کند را گسترش دهد .

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

آیا پایگاه داده من در معرض خطر تزریق SQL است؟

تزریق  ( Sql Injection ) یکی از رایج ترین لایه های کاربردی است که در حال حاضر در اینترنت استفاده می شود. با وجود این واقعیت همچنان تعداد زیادی از برنامه های وب وجود دارند که این آسیب پذیر را دارند .

با توجه به کنسرسیوم امنیت برنامه های کاربردی وب (WASC) , نه درصد از کل حملاتی که منجر به هک شده در رسانه ها به علت تزریق SQL یا Sql Injection بوده است .

پژوهش های جدیدتر از تحقیقات تخصصی ما نشان می دهد که حدود ۵۰ درصد از وب سایت هایی که ما در سال جاری اسکن کرده ایم، حساس به آسیب پذیری SQL Injection هستند.

اگر شما یک برنامه نویس نیستید و یا تخصصی در زمینه برنامه های وب خود ندارید ممکن است برایتان دشوار باشد به این سوال پاسخ دهید که آیا وب سایت و برنامه های کاربردی وب خودتان به تزریق SQL یا Sql Injection آسیب پذیر است یا خیر.

پژوهش های کسب شده در علم امنیت ما را به این باور رسانده که احتمال دارد اطلاعات شما در حمله SQL Injection دارای آسیب پذیری بوده و در معرض خطر باشد.

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

در صورت عدم رعایت نحوه صحیح کد گذاری مطمئنا مهاجم قادر خواهد بود دستورات SQL یا ( Sql Injection ) دلخواه خود را بر روی سیستم آسیب پذیر اجرا کند یا برای به دست آوردن اطلاعات آن را به مخاطره اندازد .

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

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

تزریق SQL یا Sql Injection چه تاثیری دارد؟

هنگامی که یک مهاجم پی به وجود یک سیستم آسیب پذیر به تزریق SQL یا Sql Injection  ببرد قادر به تزریق SQL Query / Commands از طریق یک فیلد فرم ورودی خواهد بود . این روند به مهاجم اجازه می دهد دستورات مختلف SQL از جمله DROP TABLE را به پایگاه داده اعمال کند .

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

بسته به نوع پایگاه داده (back-end) در حال استفاده ، آسیب پذیری های تزریق SQL منجر به دسترسی سطوح مختلفی از داده ها در سیستم برای مهاجم می شود.

 این دسترسی ها ممکن است دستکاری داده های موجود ، داده های دلخواه UNION (برای انتخاب اطلاعات مرتبط از دو جدول استفاده می شود ) ، استفاده از subselects یا اضافه کردن درخواست های متفرقه باشد و در بعضی موارد ممکن است خواندن یا نوشتن در فایل ها یا اجرای دستورات shell در سیستم عامل پایه امکان پذیر باشد .

بعضی از سرورهای SQL مانند Microsoft SQL Server شامل رویه های ذخیره شده و گسترش یافته (توابع پایگاه داده سرور) هستند .

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

متاسفانه تاثیر Sql Injection یا تزریق SQL تنها زمانی مشخص می شود که سرقت اطلاعات کشف شده باشد و داده های ناخواسته از طریق حملات هک مختلف به سرقت رفته باشد و خاطر نشان میگردد که یک متخصص هکر به ندرت در این نوع حملات گرفتار می شوند و به راحتی می توانند قصر در بروند .

مثال یک حمله SQL Injection

در اینجا یک نمونه فرم HTML پایه نمونه با دو ورودی ( ورود و رمز عبور ) است.

<form method=”post” action=”http://testasp.vulnweb.com/login.asp>

<“input name=”tfUName” type=”text” id=”tfUName>

<“input name=”tfUPass” type=”password” id=”tfUPass>

<form/>

ساده ترین راه جهت login.asp برای کار با ایجاد یک پرس و جو پایگاه داده است که به نظر می رسد

like this: SELECT id

FROM logins

’WHERE username = ‘$username’ AND password = ‘$password

اگر متغیرهای $ username و $ password به طور مستقیم از ورودی کاربر درخواست شوند ، به راحتی می تواند دارای آسیب پذیری باشد . فرض کنید که نام ” Joe” را به عنوان یک نام کاربری و رشته زیر به عنوان یک رمز عبور ارائه شده است : anything’ OR ‘x’=’x

SELECT id

FROM logins

‘WHERE username = ‘Joe

‘AND password = ‘anything’ OR ‘x’=’x

همانطور که  مشاهده می کنید روی ورودی برنامه وب به درستی کار نشده است، واستفاده از نقل قول ها دستور WHERE SQL را به دو جزء تبدیل کرده است.’x’ = ‘x’

این به مهاجم اجازه می دهد تا بدون استفاده از نام کاربری و رمز عبور معتبر، فرم ورود را از بین ببرد.

فایروال های Web Application

فایروال وب برنامه کاربردی (WAF) : یک دستگاه واسطه ای است که بین یک وب سایت و یک وب سرور قرار می گیرد و پیام های OSI Layer-7 را برای نقض قوانین محرمانه برنامه ها تجزیه و تحلیل می کند .

فایروال نرم افزار وب به عنوان یک دستگاه امنیتی محافظت از وب سرور از حملات مختلف را عهده دار می باشد .

sql injection

 

تقریبا تمام فایروال های Webapplication و IDS ها و IPS ها ، از مکانیزم های مبتنی بر امضا استفاده می کنند ، جایی که آنها از ورودی های معمولی مانند “Or 1=1”, “Or x=x” و غیره استفاده می کنند.

اما به نظر من، فایروال های webapplication صرفا جهت تشخیص ابزارهای خودکار و اسکریپت kiddies ها کارایی دارند .

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

  • تشخیص WAF:

قبل از یادگیری در مورد دور زدن WAF، شما باید بدانید چگونه یک فایروال Webapplication را شناسایی کنید. روش های متعددی برای تشخیص اینکه آیا وب سایت هدف از فایروال Webapplication استفاده می کند وجود دارد.

پیام سریع:

  1. اگر به یک وب سایت حمله میکنید و خطایی مانند “تشخیص هک شدن” یا “صفحه یافت نشد” دریافت میکنید، شما در مقابل WAF هستید .
  • Dotdefender :

اگر شما در مقابل Dotdefender هستید، پیغام زیر را دریافت خواهید کرد:

sql injection

  • مشاهده پاسخ HTTP :

اگر هر زمان که یک درخواست http مخرب ایجاد می کنید و یک پاسخ HTTP مشابه را دریافت کردید ، شما احتمالا در برابر MODSecurity WAF است.

HTTP/1.1 501 Method Not ImplementedDate: Fri, 12 Jun 218 23:30:54 GMTAllow: TRACEContent-Length: 279Connection: closeContent-Type: text/html; charset=iso-8859-1http://ws

  • مثال از IDS و امضا WAF :

alert tcp any any -> $HTTP_SERVERS $HTTP_PORTS (msg: “SQL Injection attempt detected, Your IP has been logged”;flow: to_server, established; content: “’ or 1=1 –”; nocase; sid: 1; rev:1

امضای بالا به WAF می گوید که اگر مهاجمان محتوای زیر را در صفحه وب وارد می کند

OR 1=1′  

پیام “تزریق SQL یا Sql Injection  شناسایی شده است، “.

ویکی

پایان فصل اول آموزش sql injection

ادامه دارد …

 

تهیه کننده : سید محمد اسماعیلی

 

نوشته های مرتبط

CSF Firewall

۲۵

دی
امنیت, همه موضوعات

آموزش نصب و پیکربندی ( CSF ( Config Server Firewall در CentOS 7

 مجموعه برنامه های فایروال برای سرورهای لینوکس است. (Config Server Firewall (CSF نیز یک تشخیص نفوذ ورودی برای برنامه های کاربردی مانند SSH، SMTP، IMAP، Pop3، فرمان su (su command و مواردی دیگر است . برای مثال این فایروال می تواند زمانی که کاربری از طریق SSH به سرور وارد می شود و زمانی که این کاربر […]

Yersinia

۱۹

دی
تست نفوذ, هک و امنیت, همه موضوعات

سناریو ایجاد یک سرور DHCP جعلی و حمله DOS برای تست نفوذ در لایه ۲ شبکه با استفاده از YERSINIA

Yersinia یک ابزار منبع باز شبکه ای است که برای استفاده از برخی نقاط ضعف در پروتکل های مختلف ( حمله DHCP جعلی و حمله DOS و … ) شبکه طراحی شده است و در سیستم عامل کالی لینوکس موجود می باشد . این ابزار ( Yersinia ) یک چارچوب جامع برای تجزیه و تحلیل و آزمایش شبکه[…]