javascript injection tutorial
Какво представлява инжектирането на Javascript?
Javascript е една от най-популярните технологии и се използва най-широко за уеб страници и уеб приложения.
Може да се използва за реализиране на различни функционалности на уебсайта. Тази технология обаче може да доведе до някои проблеми със сигурността, за които разработчикът и тестващият трябва да са наясно.
Javascript може да се използва не само за добри цели, но и за някои злонамерени атаки. Един от тях е Javascript Injection. Същността на JS Injection е да се инжектира кодът на Javascript, който ще се изпълнява от страна на клиента.
В този урок ще научим повече за това как да проверим дали е възможно Javascript Injection, как може да се извърши JS Injection и какви са последиците от JS Injection.
Какво ще научите:
- Рискове от JavaScript инжектиране
- Защо е важно да тествате JS инжекция?
- Сравнение с други атаки
- Проверка за JavaScript инжектиране
- Модификация на параметрите
- Промяна на дизайна на уебсайта
- Как да тествате срещу инжектиране на JavaScript
- Възможна защита срещу тази атака
- Заключение
- Препоръчително четене
Рискове от JavaScript инжектиране
JS Injection предлага много възможности за злонамерен потребител да модифицира дизайна на уебсайта, да получи информация за уебсайта, да промени информацията на показания уебсайт и да манипулира с параметрите (например бисквитки). Следователно това може да доведе до сериозни щети на уебсайта, изтичане на информация и дори хакване.
Основната цел на JS Injection е да промени външния вид на уебсайта и да манипулира параметрите. Последиците от JS Injection могат да бъдат много различни - от увреждане на дизайна на уебсайта до достъп до чужд акаунт.
Защо е важно да тествате JS инжекция?
Мнозина биха попитали дали наистина е необходимо тестване за JS Injection.
Проверката за уязвимости на JS Injection е част от тестването на сигурността. Тестовете за сигурност обикновено се извършват само ако са били включени в планирането на проекта, тъй като изискват време, много внимание и проверка на множество детайли.
Забелязах, че по време на реализацията на проекта е доста често да се пропуска тестване срещу всякакви възможни атаки - включително JS Injection. По този начин екипите се опитват да спестят времето на проекта. Тази практика обаче много често завършва с оплаквания на клиента.
Трябва да се знае, че тестването на сигурността е силно препоръчително, дори ако не е включено в плановете на проекта. Трябва да се извърши проверка за основните възможни атаки - в същото време трябва да се провери за възможни уязвимости на JS Injection.
Оставяне на прост Javascript Уязвимости при инжектиране в продукта може да струва качеството на продукта и репутацията на компанията. Винаги, когато съм се научил да тествам срещу възможни атаки и като цяло тестване на сигурността, никога не пропускам тази част от тестването. По този начин съм просто по-сигурен в качеството на продукта.
Сравнение с други атаки
Трябва да се спомене, че JS Injection не е толкова рискован, колкото SQL инжекция , тъй като се изпълнява от страна на клиента и не достига до базата данни на системата, както се случва по време на атака на SQL Injection. Освен това не е толкова рисковано като XSS атака.
По време на тази атака понякога може да се променя само външният вид на уебсайта, докато основната цел на XSS атаката е да хакне други данни за вход.
Въпреки това, JS Injection също може да причини сериозни щети на уебсайта. Той може не само да унищожи външния вид на уебсайта, но и да се превърне в добра основа за хакване на данните за вход на други хора.
Проверка за JavaScript инжектиране
Когато започнете да тествате срещу JS Injection, първото нещо, което трябва да направите, е да проверите дали JS Injection е възможно или не. Проверката за този тип възможност за инжектиране е много лесна - когато се придвижвате до уебсайта, трябва да въведете адресната лента на браузъра по следния начин:
javascript: alert (‘Изпълнена!’);
Ако се появи изскачащ прозорец със съобщение „Изпълнено!“, Тогава уебсайтът е уязвим за JS Injection.
След това в адресната лента на уебсайта можете да опитате различни команди на Javascript.
Трябва да се спомене, че JS Injection е възможно не само от адресната лента на уебсайта. Има различни други елементи на уебсайта, които могат да бъдат уязвими към JS Injection. Най-важното е да знаете точно частите от уебсайта, които могат да бъдат засегнати от Javascript Injection и как да го проверите.
Типичните JS инжекционни цели са:
- Различни форуми
- Полетата за коментари на статията
- Книги за гости
- Всички други форми, в които може да се вмъкне текст.
За да проверите дали тази атака е възможна за формуляра за запазване на текст, въпреки че предоставяте нормален текст, въведете Javascript кода, както е споменато по-долу, и запазете текста във формуляра и опреснете страницата.
javascript: alert (‘Изпълнена!’);
Ако в новоотворената страница има текстово поле със съобщението „Изпълнено!“, Тогава този тип инжекционна атака е възможна за тестваната форма.
Ако и по двата начина се появи текстово поле със съобщението, можете да опитате да разбиете уебсайта с по-сложни JS Injection методи. След това можете да опитате различни видове инжектиране - модификация на параметри или модификация на дизайна.
Разбира се, модификацията на параметрите се счита за по-рискова от модификацията на дизайна. Следователно, докато тествате, трябва да се отдели повече внимание на модификацията на параметрите.
Също така трябва да се има предвид, че по-уязвимите части на уебсайта за Javascript Injection са полета за въвеждане, където се запазват всякакви данни.
Модификация на параметрите
Както бе споменато по-рано, една от възможните повреди на Javascript Injection е модифицирането на параметри.
По време на тази инжекционна атака злонамерен потребител може да получи информация за параметрите или да промени всяка стойност на параметрите( Пример ,настройки на бисквитките). Това може да причини доста сериозни рискове, тъй като злонамерен потребител може да получи чувствително съдържание. Такъв тип инжектиране може да се извърши с помощта на някои команди на Javascript.
Нека запомним, че Javascript командата, връщаща текущата бисквитка на сесията, е написана съответно:
javascript: предупреждение (document.cookie);
Въведен в URL лентата на браузъра, той ще върне изскачащ прозорец с бисквитки на текущата сесия.
Ако уебсайтът използва бисквитки, можем да прочетем такава информация като идентификатор на сесия на сървъра или други потребителски данни, съхранявани в бисквитките.
Трябва да се спомене, че вместо alert () може да се използва всяка друга функция на Javascript.
Например ,ако сме намерили уязвим уебсайт, който съхранява идентификатора на сесията в параметъра на бисквитката ‘session_id’. След това можем да напишем функция, която променя идентификатора на текущата сесия:
javascript: void (document.cookie = “session_id =<>');
По този начин стойността на идентификатора на сесията ще бъде променена. Също така са възможни и всякакви други начини за промяна на параметрите.
Например, злонамерен потребител иска да влезе като други хора. За да извърши влизане, злонамереният потребител първо ще промени настройките на бисквитките за оторизация на истински. Ако настройките на бисквитките не са зададени като „true“, тогава стойността на бисквитката може да бъде върната като „undefined“.
каква е разликата между sql и sql сървър
За да промени тези стойности на „бисквитките“, злонамерен потребител ще изпълни командата на Javascript от URL лентата в браузъра:
javascript: void (document.cookie = „оторизация = вярно“);
В резултат текущият параметър за бисквитки оторизация = false ще бъде променен на оторизация = вярно. По този начин злонамерен потребител ще може да получи достъп до чувствителното съдържание.
Също така трябва да се спомене, че понякога кодът на Javascript връща доста чувствителна информация.
javascript: предупреждение (document.cookie);
Например, ако разработчикът на уебсайт не е бил достатъчно предпазлив, той може също да върне имена и стойности на параметрите на потребителско име и парола. Тогава такава информация може да се използва за хакване на уебсайта или просто за промяна на стойността на чувствителния параметър.
Например, с кода по-долу можем да променим стойността на потребителското име:
javascript: void (document.cookie = ”username = otherUser”);
По този начин всякакви други стойности на параметрите също могат да бъдат модифицирани.
Промяна на дизайна на уебсайта
Javascript може също да се използва за промяна на формуляра на всеки уебсайт и като цяло на дизайна на уебсайта.
Например, с Javascript можете да промените всяка информация, показана на уебсайта:
- Показан текст.
- Фон на уебсайта.
- Външен вид на формуляра на уебсайта.
- Появата на изскачащ прозорец.
- Появата на всеки друг елемент на уебсайта.
Например, за да промените показания имейл адрес на уебсайта, трябва да използвате подходяща Javascript команда:
javascript: void (document.forms [0] .email.value = ”Test@test.com”) ;
Възможни са и няколко други сложни манипулации с дизайна на уебсайта. С тази атака можем да осъществим достъп и да променим и CSS класа на уебсайта.
Например, ако искаме да променим фоновото изображение на уебсайта с JS Injection, тогава командата трябва да се изпълни съответно:
javascript: void (документ. фоново изображение: url (“other-image.jpg“);
Също така злонамерен потребител може да напише код за инжектиране на Javascript, който е споменат по-долу във формата за вмъкване на текст, и да го запази.
javascript: void (сигнал („Здравей!“));
След това всеки път, когато се отвори страница, ще се появи текстово поле със съобщението „Здравейте!“.
Промененият дизайн на уебсайта с Javascript Injection е по-малко рисков от модификацията на параметрите. Ако обаче дизайнът на уебсайта ще бъде променен по злонамерен начин, това може да коства репутацията на компанията.
Как да тествате срещу инжектиране на JavaScript
Той може да бъде тестван по следните начини:
- Ръчно
- С инструменти за тестване
- С приставки за браузър
Възможните уязвимости на Javascript могат да бъдат проверени ръчно, ако имате добри познания за това как трябва да бъдат изпълнени. Също така, той може да бъде тестван с различни инструменти за автоматизация.
Например, ако сте автоматизирали тестовете си на ниво API с инструмента SOAP UI, тогава е възможно също да стартирате Javascript Injection тестове с Потребителски интерфейс на САПУН .
Мога обаче да коментирам само от собствения си опит, че наистина трябваше да имате добри познания за инструмента SOAP UI, за да тествате с него за JS Injection, тъй като всички тестови стъпки трябва да бъдат написани без грешки. Ако някоя стъпка от теста е написана неправилно, това може да доведе и до грешни резултати от тестовете за сигурност.
Също така можете да намерите различни плъгини на браузъра за проверка срещу възможна атака. Препоръчително е обаче да не забравяте да проверявате ръчно тази атака, тъй като тя обикновено връща по-точни резултати.
Бих искал да кажа, че ръчното тестване срещу Javascript Injection ме кара да се чувствам по-уверен и уверен относно сигурността на уебсайта. По този начин можете да сте сигурни, че по време на тестването не е пропусната форма и всички резултати са видими за вас.
За да тествате срещу Javascript Injection, трябва да имате общи познания за Javascript и да знаете кои части на уебсайта са по-уязвими. Също така, не забравяйте, че уебсайтът може да бъде защитен срещу JS Injection и докато тествате, трябва да се опитате да нарушите тази защита.
По този начин ще бъдете сигурни дали защитата срещу тази атака е достатъчно силна или не.
Възможна защита срещу тази атака
Първо, за да се предотврати тази атака, всеки получен вход трябва да бъде валидиран. Въведеното трябва да се проверява всеки път, а не само когато данните първоначално се приемат.
Силно се препоръчва да не разчитате на проверка от страна на клиента. Също така се препоръчва да се извърши важна логика от страна на сървъра.
Мнозина се опитват да се предпазят от инжектирането на Javascript, като променят кавичките на двойни и кодът на Javascript не трябва да се изпълнява по този начин.
Например, ако пишете в полето за коментари нещо с кавички ..., тези кавички ще бъдат заменени с двойни -<>...<>. По този начин въведеният код на Javascript няма да бъде изпълнен.
Забелязах, че замяната на кавички с двойни кавички е доста често срещана практика за избягване на възможни атаки на JS Injection. Има обаче няколко начина за кодиране на кавичките, за да се изпълни кодът на JS Injection. Следователно промяната на кавичките на двойни не е идеалният начин за защита срещу тази атака.
Заключение
Винаги трябва да се има предвид, че Javascript Injection е една от възможните атаки срещу уебсайтове, тъй като Javascript е една от най-широко използваните технологии за уебсайтовете. Следователно, докато тествате уебсайтове или други уеб технологии, не трябва да забравяте да тествате срещу тази атака.
При извършване на тестове за сигурност JS Injection не трябва да се забравя. Някои хора смятат това тестване за по-малко рискова атака, тъй като се извършва от страна на клиента.
Това обаче е грешният подход и винаги трябва да помним, че Javascript Injection може да причини сериозни щети на уебсайта като изтичане на чувствителна информация, промяна на параметри или хакване на потребителски акаунти.
Ето защо трябва да разглеждаме това като важна част от тестването и това е част от инвестицията за добър продукт и репутация на компанията.
Тестването за JS Injection не е много трудно. Първо трябва да имате общи познания за Javascript и трябва да знаете как да проверите дали тази атака е възможна за текущото уеб решение или не.
Също така, докато тествате, трябва да запомните, че уебсайтът може да има защита срещу този тип атака, но може да е твърде слаб - той също трябва да бъде проверен. Друго важно нещо, което трябва да запомните, е, че има различни видове Javascript Injection атаки и нито една от тях не трябва да бъде забравена да се тества.
Изпълнявали ли сте Javascript Injection Testing ?? Ще се радваме да се чуем от вас, не се колебайте да споделите своя опит в раздела за коментари по-долу.
Препоръчително четене
- Уроци за задълбочено затъмнение за начинаещи
- Как да настроите рамката за тестване на Node.js: Урок за Node.js
- Урок за инжектиране на HTML: Видове и превенция с примери
- Урок за тестване на SQL инжектиране (Пример и предотвратяване на атака на SQL инжектиране)
- Урок за отражение на Java с примери
- Урок за SVN: Управление на изходния код с помощта на Subversion
- Урок за Python DateTime с примери
- Tortoise SVN Tutorial: Ревизии в кодовото хранилище