DEV Community

Cover image for Ծրագրային անվտանգություն՝ SQL Injection (մաս 1)
Narek Babajanyan
Narek Babajanyan

Posted on • Updated on

Ծրագրային անվտանգություն՝ SQL Injection (մաս 1)

SQL injection֊ը հանդիսանում է վեբ֊ծրագրերի ամենատարածված խոցելիություններից (vulnerability) մեկը և գտնվում է OWASP հիմնադրամի 10 ամենատարածված խոցելիությունների ցանկի OWASP Top 10 առաջին հորիզոնականում։

Իրականում OWASP Top 10 ցանկի առաջին հորիզոնականում տեղ է գտել ավելի ընդհանրական Injection տեսակը, իսկ SQL injection֊ը դրա տեսակներից մեկն է։

Փորձենք հասկանալ ինչու է առաջանում խոցելիության այս տեսակը, ինչ հնարավորություններ է ընձեռում հարձկավողին և պաշտպանության ինչ միջոցներ կան։

Օրինական ճանապարհով ծրագրային անվտանգություն ուսումնասիրելու համար կարելի է օգտվել հատուկ այդ նպատակով պատրաստված խոցելի ծրագրերից, ինչպիսիք են օրինակ OWASP Juice Shop֊ը և bWAPP֊ը։ Նշվածներից բացի գոյություն ունեն բազմաթիվ այլ խոցելի ծրագրեր, որոնց ցանկին կարելի է ծանոթանալ այստեղ

Խոցելիության էությունը

Դիտարկենք SQL տվյալների բազայի պարզագույն օրինակ։ Ենթադրենք, ունենք տվյալների բազա, որում պահվում են տվյալ ընկերության ապրանքանիշները, որոնց մի մասը դեռևս չի թողարկվել։

SELECT * FROM products;
Enter fullscreen mode Exit fullscreen mode
ID name released
1 Laptop 1
2 Smartphone 1
3 Time machine 0
4 Teleporter 0
5 Electric vehicle 1
6 3D printer 1
7 Secret product 0

Ընկերության վեբ կայքում թվարկվում են բոլոր թողարկված ապրանքանիշները։

SELECT * FROM products WHERE released=1;
Enter fullscreen mode Exit fullscreen mode

Բացի այդ, կայքում կարելի է կատարել որոնում թողարկված ապրանքանիշների մեջ։ Ենթադրենք, օգտատիրոջ մուտքագրած ցանկացած բանալի բառով անմիջապես կազմվում է հարցում և ուղարկվում տվյալների բազային։ Այս դեպքում օգտատերը կարող է որոնել phone բանալի բառը՝

SELECT * FROM products 
WHERE name LIKE '%phone%' AND released=1;
Enter fullscreen mode Exit fullscreen mode
ID name released
2 Smartphone 1

Իսկ ի՞նչ եթե մուտքագրվի հատուկ պատրաստված այնպիսի "բանալի բառ", որը տվյալների բազայի կողմից դիտարկվի որպես հրաման։

Հենց սրանում էլ կայանում է SQL Injection խոցելիության էությունը։

Ենթադրենք, որոնման դաշտում մուտագրվել հետևյալ տեսքն ունեցող մի արտահայտություն՝ ' OR 1=1; --, ապա տվյալների բազայում կատարվող հարցումը կունենա հետևյալ տեսքը՝

SELECT * FROM products 
WHERE name LIKE '%' OR 1=1; -- %' AND released=1;
Enter fullscreen mode Exit fullscreen mode

Հարցման արդյունքում կվերադարձվեն բոլոր ապրանքանիշները, նույնիսկ դեռևս չթողարկվածները։ Նման արդյունքի պատճառը կայանում է նրանում, որ մուտքագրված արտահայտության առաջին չակերտը փակում է LIKE պնդման չակերտը և ընդհանուր հարցման հրամանի մեջ ավելացնում նոր պնդում՝ OR 1=1 (որը միշտ ճիշտ է), իսկ -- սիմվոլները հարցման AND released=1; հատվածը փոխակերպում են մեկնաբանության (comment), որն առհամարվում է տվյալների բազայի կողմից։

Այսպիսով, SQL injection խոցելիության պարզագույն կիրառմամբ հնարավոր է դառնում չնախատեսված տվյալների ստացումը։ Դժվար չէ պատկերացնել, որ այլ հրամանների մուտքագրման պարագայում հնարավոր կլինի մուտք գործել որպես այլ օգտատեր կամ նույնիսկ ջնջել/փոփոխել տվյալների բազայում պահվող տեղեկատվությունը։

Հաջորդ մասում կդիտարկենք առավել իրատեսական օրինակներ՝ շնորհիվ վերոնշյալ bWAPP և OWASP Juice Shop ծրագրերի։

Top comments (0)