SQL injection֊ը հանդիսանում է վեբ֊ծրագրերի ամենատարածված խոցելիություններից (vulnerability) մեկը և գտնվում է OWASP հիմնադրամի 10 ամենատարածված խոցելիությունների ցանկի OWASP Top 10 առաջին հորիզոնականում։
Իրականում OWASP Top 10 ցանկի առաջին հորիզոնականում տեղ է գտել ավելի ընդհանրական Injection տեսակը, իսկ SQL injection֊ը դրա տեսակներից մեկն է։
Փորձենք հասկանալ ինչու է առաջանում խոցելիության այս տեսակը, ինչ հնարավորություններ է ընձեռում հարձկավողին և պաշտպանության ինչ միջոցներ կան։
Օրինական ճանապարհով ծրագրային անվտանգություն ուսումնասիրելու համար կարելի է օգտվել հատուկ այդ նպատակով պատրաստված խոցելի ծրագրերից, ինչպիսիք են օրինակ OWASP Juice Shop֊ը և bWAPP֊ը։ Նշվածներից բացի գոյություն ունեն բազմաթիվ այլ խոցելի ծրագրեր, որոնց ցանկին կարելի է ծանոթանալ այստեղ
Խոցելիության էությունը
Դիտարկենք SQL տվյալների բազայի պարզագույն օրինակ։ Ենթադրենք, ունենք տվյալների բազա, որում պահվում են տվյալ ընկերության ապրանքանիշները, որոնց մի մասը դեռևս չի թողարկվել։
SELECT * FROM products;
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;
Բացի այդ, կայքում կարելի է կատարել որոնում թողարկված ապրանքանիշների մեջ։ Ենթադրենք, օգտատիրոջ մուտքագրած ցանկացած բանալի բառով անմիջապես կազմվում է հարցում և ուղարկվում տվյալների բազային։ Այս դեպքում օգտատերը կարող է որոնել phone բանալի բառը՝
SELECT * FROM products
WHERE name LIKE '%phone%' AND released=1;
ID | name | released |
---|---|---|
2 | Smartphone | 1 |
Իսկ ի՞նչ եթե մուտքագրվի հատուկ պատրաստված այնպիսի "բանալի բառ", որը տվյալների բազայի կողմից դիտարկվի որպես հրաման։
Հենց սրանում էլ կայանում է SQL Injection խոցելիության էությունը։
Ենթադրենք, որոնման դաշտում մուտագրվել հետևյալ տեսքն ունեցող մի արտահայտություն՝ ' OR 1=1; --
, ապա տվյալների բազայում կատարվող հարցումը կունենա հետևյալ տեսքը՝
SELECT * FROM products
WHERE name LIKE '%' OR 1=1; -- %' AND released=1;
Հարցման արդյունքում կվերադարձվեն բոլոր ապրանքանիշները, նույնիսկ դեռևս չթողարկվածները։ Նման արդյունքի պատճառը կայանում է նրանում, որ մուտքագրված արտահայտության առաջին չակերտը փակում է LIKE
պնդման չակերտը և ընդհանուր հարցման հրամանի մեջ ավելացնում նոր պնդում՝ OR 1=1
(որը միշտ ճիշտ է), իսկ --
սիմվոլները հարցման AND released=1;
հատվածը փոխակերպում են մեկնաբանության (comment), որն առհամարվում է տվյալների բազայի կողմից։
Այսպիսով, SQL injection խոցելիության պարզագույն կիրառմամբ հնարավոր է դառնում չնախատեսված տվյալների ստացումը։ Դժվար չէ պատկերացնել, որ այլ հրամանների մուտքագրման պարագայում հնարավոր կլինի մուտք գործել որպես այլ օգտատեր կամ նույնիսկ ջնջել/փոփոխել տվյալների բազայում պահվող տեղեկատվությունը։
Հաջորդ մասում կդիտարկենք առավել իրատեսական օրինակներ՝ շնորհիվ վերոնշյալ bWAPP և OWASP Juice Shop ծրագրերի։
Top comments (0)