Розповім вам про обхід багатопрохідних фільтрів (multi-pass filters bypass). У випадку коли на веб сайті використовується комплексна (багатопрохідна) система фільтрації, зокрема для фільтрації XSS, можливий обхід багатопрохідних фільтрів. Подібні багатопрохідні системи фільтрації можуть використовуватися на великих порталах та соціальних мережах.
Існує одна техніка обходу багатопрохідних фільтрів, що була розроблена мною в 2007 році. Техніка обходу фільтрів з використанням пробілу. Я назвав її технікою спейс-хакінгу (space-hack technique). Про неї я писав під час Місяця багів в MySpace.
Суть техніки полягає в тому, що у випадку, коли веб сайт використовує багатопрохідний фільтр (зокрема фільтр XSS), котрий спочатку перевіряє на предмет атакуючого коду (XSS), а потім витирає пробіли, щоб привести дані до потрібного стану, то ця особливість фільтрації може бути використана. Використовуючи багатопрохідність фільтра, можна спочатку відправити дані з пробілами, щоб з ними обійти фільтр, а на наступній стадії фільтра всі пробіли будуть витерті, що зробить код знову робочим і він виконається на сторінці користувача.
Розглянемо наступні приклади.
1. Код для обходу багатопрохідних фільтрів:
<p/style="xss:e xpression(alert(document.cookie))">
На першій стадії фільтр перевіряє на наявність XSS кода: перевіряється наявність ключевих слів, в тому числі й “expression”. Враховуючи, що в даному випадку використовується “e xpression”, то ключевих слів не знаходиться і даний рядок проходить фільтр.
На другій стадії фільтр витирає пробіли: в результаті ми отримаємо код, що виконається на сторінці користувача:
<p/style="xss:expression(alert(document.cookie))">
Зазначу, що враховуючи другу стадію, я використовав “<p/style”, а не “<p style”, щоб зробити код робочим після проходження фільтрів (бо пробіли витираються на другій стадії фільтрації).
2. Код для обходу багатопрохідних фільтрів:
<img/width="100"src="http://site/image.jpg"o nLoad="alert(document.cookie)">
На першій стадії фільтр перевіряє на наявність XSS кода: враховуючи, що в даному випадку використовується “o nLoad”, то ключевих слів не знаходиться і даний рядок проходить фільтр.
На другій стадії фільтр витирає пробіли: в результаті ми отримаємо код, що виконається на сторінці користувача:
<img/width="100"src="http://site/image.jpg"onLoad="alert(document.cookie)">
Як я вже зазначав, враховуючи другу стадію, в якості роздільника між ім’ям тега та його властивістю я використав “/”, тобто використав запис “<img/width”. Для того щоб зробити код робочим після проходження фільтрів.
Як видно з наведених прикладів, використовуючи техніку спейс-хакінгу можна обходити багатопрохідні фільтри. Розробникам веб додатків варто врахувати дану техніку при розробці систем фільтрації.