Փորձարկման համար SQL ներարկման խոցելիությունը

SQL ներարկման հարձակումները վտանգավոր ռիսկեր են առաջացնում վեբ ծրագրերի համար, որոնք կախված են տվյալների բազայի պահեստից `դինամիկ բովանդակություն ստեղծելու համար: Այս տեսակի հարձակման ժամանակ հաքերները շահագործում են վեբ հավելված, փորձելով իրենց SQL հրահանգները ներդնել տվյալների բազայում: Օրինակ, տեսեք SQL- ի ներարկման հարձակումները տվյալների բազաների վրա: Այս հոդվածում մենք նայում ենք մի քանի ձեւով, որը կարող եք ստուգել ձեր վեբ հավելվածները `որոշելու, թե արդյոք դրանք խոցելի են SQL ներարկման հարձակումներից:

Ավտոմատացված SQL ներարկման սկանավորում

Մեկ հնարավորությունը օգտագործում է ավտոմատացված վեբ հավելվածի խոցելիության սկաների, ինչպիսիք են HP- ի WebInspect, IBM- ի AppScan կամ Cenzic's Hailstorm- ը: Այս գործիքները բոլորն առաջարկում են հեշտ, ավտոմատացված եղանակներ վերլուծելու Ձեր վեբ հավելվածները պոտենցիալ SQL ներարկման խոցելիության համար: Այնուամենայնիվ, նրանք բավականին թանկ են, մինչեւ 25000 դոլար աշխատատեղ:

Manual SQL ներարկման փորձարկումներ

Ինչ է աղքատ ծրագրերի մշակողը: Դուք իրականում կարող եք իրականացնել որոշ հիմնական թեստեր, գնահատելու ձեր վեբ դիմումները SQL ներարկման խոցելիության համար, ոչ այլ ինչ, քան վեբ բրաուզերը: Նախ, զգուշությամբ պահեք. Ես նկարագրում եմ միայն SQL- ի ներարկման սխալները: Նրանք չեն հայտնաբերելու առաջադեմ տեխնիկան եւ մի փոքր հոգնեցուցիչ են օգտագործել: Եթե ​​դուք կարող եք թույլ տալ այն, գնացեք ավտոմատ սկաների հետ: Սակայն, եթե դուք չեք կարողանում կարգավորել այդ գինը, ձեռքով փորձարկումը մեծ առաջին քայլն է:

Ամենահեշտ ձեւն այն է, թե արդյոք դիմումը խոցելի է, փորձարկելու անմարդկային ներարկման հարձակումները, որոնք փաստացի վնաս չեն հասցնում ձեր տվյալների շտեմարանին, եթե դրանք հաջողության են հասնում, բայց ձեզ կհաջողվի ապացուցել, որ դուք պետք է ուղղեք խնդիրը: Օրինակ, ենթադրենք, որ ունեիք մի պարզ վեբ ծրագիր, որը անհատին նայում է տվյալների բազայում եւ արդյունքում ապահովում է կոնտակտային տվյալներ: Այդ էջը կարող է օգտագործել հետեւյալ URL ձեւաչափը.

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Կարող ենք ենթադրել, որ այս էջը իրականացնում է տվյալների բազայի որոնում ` օգտագործելով հետեւյալը,

Ընտրեք հեռախոսը FROM դիրեկտորիայում WHERE lastname = 'chapple' եւ firstname = 'mike'

Փորձենք մի քիչ փորձարկել: Վերոնշյալ մեր կանխատեսմամբ կարող ենք պարզ փոփոխություն կատարել URL- ի համար, որը փորձարկում է SQL ներարկման հարձակումները.

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Եթե ​​վեբ հավելվածը պատշաճ կերպով չի պահպանվել SQL- ի ներարկման միջոցով, այն պարզապես մաղում է այս կեղծ անունը SQL- ի մեջ, որն իրականացնում է տվյալների բազան, որի արդյունքում.

Ընտրեք հեռախոսը FROM դիրեկտորիայից WHERE lastname = 'chapple' եւ firstname = 'mike' AND (ընտրեք հաշվարկը (*) կեղծից)> 0 OR '1' = '1'

Դուք նկատում եք, որ վերը նշված սինթետիկան մի փոքր այլ է, քան բնօրինակ URL- ում: Ես վերցրեցի URL- կոդավորված փոփոխականի վերափոխելու իրենց ASCII- ի համարժեքները, որպեսզի ավելի հեշտ դնեք օրինակին: Օրինակ,% 3d- ը '=' բնույթի URL- կոդավորումը: Ես նաեւ ավելացրեցի մի շարք տողեր, նման նպատակների համար:

Գնահատելով արդյունքները

Թեստը գալիս է այն ժամանակ, երբ փորձում եք բեռնել էջը վերը նշված URL- ով: Եթե ​​վեբ հավելվածը լավ վարվել է, ապա կպահանջվի մուտքագրման մեջ գտնվող միակ մեջբերումները, նախքան հարցումը տվյալների բազան անցնելը: Սա պարզապես կհանգեցնի տարօրինակ որոնման համար այն անունով մեկին, որը ներառում է SQL- ի մի խումբ: Ստորեւ ստորեւ նշված նմանատիպ դիմումից կտեսնեք սխալ հաղորդագրություն:

Խախտում. Ոչ մի օգտվող չի գտել անունով mike + AND + (ընտրեք + count (*) + ից + կեղծ) +% 3e0 + OR + 1% 3d1 Chapple!

Մյուս կողմից, եթե կիրառումը խոցելի է SQL ներարկման համար, ապա այն կներկայացվի անմիջապես տվյալների բազայում, ինչը հանգեցնում է երկու հնարավորություններից մեկի: Նախ, եթե ձեր սերվերը ունենա մանրամասն սխալի հաղորդագրություններ (որը դուք չպետք է կատարեք), ապա կտեսնեք նման բան:

Microsoft OLE DB Provider համար ODBC վարորդների սխալ '80040e37' [Microsoft] [ODBC SQL Server վարորդ] [SQL Server] Անվավեր օբյեկտի անունը 'կեղծ': / datalogory.asp, տող 13

Մյուս կողմից, եթե ձեր վեբ սերվերը չի ցուցաբերում մանրամասն սխալի հաղորդագրություններ, դուք կստանաք ավելի ընդհանուր սխալ, ինչպիսիք են `

Ներքին սերվերի սխալը Սերվերը հանդիպեց ներքին սխալի կամ սխալ կազմաձեւման եւ չկարողացավ ավարտել ձեր հայցը: Խնդրում ենք դիմել սերվերի ադմինիստրատորին `տեղեկացնելով, որ տեղի է ունեցել սխալը եւ այն ամենը, ինչ դուք կարող եք արել, որը կարող է առաջացնել սխալ: Այս սխալի մասին ավելի շատ տեղեկություններ կարող են մատչելի լինել սերվերի սխալների մատյանում:

Եթե ​​վերցնեք վերը նշված երկու սխալներից մեկը, ձեր դիմումը խոցելի է SQL ներարկման հարձակումից: Որոշ քայլեր, որոնք կարող եք ձեռնարկել ձեր դիմումները պաշտպանելու համար, SQL Injection հարձակումներից են.