SQL инъекциясының осалдығы үшін тестілеу

SQL инъекция шабуылдары динамикалық мазмұнды генерациялау үшін дерекқордың сақтық көшірмесіне тәуелді веб-қосымшалар үшін үлкен қауіп тудырады. Бұл шабуылда хакерлер веб-қосымшаны дерекқор арқылы шығарылған өздерінің SQL пәрмендерін енгізуге тырысады. Мысал үшін SQL Injection Attacks дерекқорларға арналған мақаланы қараңыз. Бұл мақалада SQL Injection шабуылдарына осал болып табылатынын анықтау үшін веб-қосымшаларыңызды тексеретін бірнеше әдістерді қарастырамыз.

Автоматтандырылған SQL инъекция сканерлеу

Бір мүмкіндік - HP компаниясының WebInspect, IBM AppScan немесе Cenzic's Hailstorm сияқты автоматтандырылған веб-қосымшалардың осалдығын қарап шығу құралын пайдалану. Бұл құралдар ықтимал SQL Injection осалдықтарына арналған веб-бағдарламаларды талдаудың қарапайым, автоматтандырылған жолдарын ұсынады. Дегенмен, олар өте қымбат, бір орынға $ 25,000 дейін жұмыс істейді.

Manual SQL Injection Tests

Бағдарламаны жасақтаушы нашар деген не? Шын мәнінде, веб-браузерден артық ештеңе жоқ, SQL Injection осалдықтары үшін веб-бағдарламаларды бағалау үшін кейбір негізгі сынақтарды іске қосуға болады. Біріншіден, сақ болыңыз: мен сипаттайтын тесттер тек негізгі SQL инжекциясының кемшіліктерін іздейді. Олар озық техникаларды анықтай алмайды және оларды пайдаланудың қаншалықты қажеті жоқ. Егер сіз оған қол жеткізе алсаңыз, автоматтандырылған сканермен бірге жүріңіз. Алайда, егер сіз бұл баға тегіне қол жеткізе алмасаңыз, қолмен тестілеу - алғашқы қадам.

Қолданбаның осал болып табылатынын бағалаудың ең қарапайым тәсілі - егер олар сәтті болса, дерекқорға зиян келтірмейтін, бірақ сізде проблеманы түзетуге болатын дәлелдемелерді ұсынатын зиянды инъекциялық шабуылдармен тәжірибе жасау. Мысалы, дерекқорда жеке тұлғаны қарап шығатын қарапайым веб-қосымшасы болған және байланыс ақпаратын нәтиже ретінде қарастыратын болыңыз. Бұл бетте келесі URL пішімі қолданылуы мүмкін:

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

Төмендегілерге ұқсас сұрауды пайдаланып , бұл бет деректер қорын іздеуді жүзеге асырады деп болжауға болады:

ТАПСЫРМАНЫҢ ҚҰРМЕТТЕРІНДЕ ТАҢДАУ WHERE lastname = 'chapple' және firstname = 'mike'

Оны аздап сынап көрейік. Жоғарыда айтылған болжам бойынша, SQL инъекция шабуылдарын тексеретін URL мекенжайына қарапайым өзгертуге болады:

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

Егер веб-бағдарлама SQL инъекциясынан дұрыс қорғалмаған болса, ол осы жалған атауды дерекқорға қарсы орындайтын SQL мәлімдемесіне қосады, нәтижесінде:

Телефонды FROM каталогынан таңдау WHERE filename = 'chapple' және firstname = 'mike' ЖӘНЕ (таңдаудан (*) жалған)> 0 OR '1' = '1'

Жоғарыдағы синтаксис бастапқы URL мекен-жайынан аздап ерекшеленетінін байқайсыз. URL-кодталған айнымалы мәнді олардың мысалын ұстануды жеңілдету үшін олардың ASCII эквиваленттері үшін түрлендіруге мүмкіндік алды. Мысалы,% 3d - бұл '=' таңбасының URL-кодтауы. Мен сондай-ақ ұқсас мақсаттарға арналған кейбір үзілістер жасадым.

Нәтижелерді бағалау

Тест жоғарыда көрсетілген URL-мекенжайы бар веб-бетті жүктеуге тырысқанда пайда болады. Егер веб-бағдарлама жақсы жұмыс істесе, сұрауды дерекқорға жібермес бұрын кірістен бір баға белгілерін шығарады. Бұл жай ғана SQL-шоғырын қамтитын аты бар біреу үшін біртүрлі іздеуге әкеледі! Төмендегілерге ұқсас бағдарламадан қате туралы хабарды көресіз:

Қате: Mike + AND + (аты-жөні + count + (+) + + + жалған + + + 3e0 + OR + 1% 3d1 Chapple!

Екінші жағынан, егер бағдарлама SQL инъекциясына осал болса, ол мәлімдемені тікелей дерекқорға жібереді, нәтижесінде екі мүмкіндік бар. Біріншіден, егер сіздің серверіңізде қате туралы хабарлар қосылған болса (бұл сізге керек болмаса!), Келесідей көрінеді:

ODBC драйверлеріне арналған Microsoft OLE DB провайдері '80040e37' [Microsoft] [ODBC SQL Server драйвері] [SQL Server] Жарамсыз нысан атауы 'жалған'. / directory.asp, 13-жол

Екінші жағынан, егер сіздің веб-серверіңізде қате туралы толық мәлімет көрсетілмесе, келесідей жалпы қате пайда болады:

Ішкі сервер қатесі Сервер ішкі қатеге немесе қате конфигурацияға тап болды және сұрауыңызды аяқтай алмады. Қате пайда болған уақытты және қатені тудыруы мүмкін нәрселер туралы хабарлау үшін сервер әкімшісіне хабарласыңыз. Бұл қате туралы қосымша ақпарат сервердегі қателер журналында болуы мүмкін.

Егер сіз жоғарыда көрсетілген екі қатенің біреуін алсаңыз, сіздің қолданыңыз SQL инъекциялық шабуылына осал! SQL Injection шабуылдарына қарсы қосымшаларды қорғау үшін қандай қадамдар жасай аласыз: