Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
asterix_kpi

XSS в bbcode img

Рекомендованные сообщения

Прошу удалить... разобрался

Поделиться сообщением


Ссылка на сообщение

Так что там с xxs то, есть или нет?

Поделиться сообщением


Ссылка на сообщение

на версии 3.4.7 есть bb-code

<?xml version="1.0" encoding="utf-8"?>
<bbcodeexport>
 <bbcodegroup>
   <bbcode>
     <bbcode_id>51</bbcode_id>
     <bbcode_title>foto</bbcode_title>
     <bbcode_desc/>
     <bbcode_tag>foto</bbcode_tag>
     <bbcode_replace><![CDATA[<img src="{content}" width="200">]]></bbcode_replace>
     <bbcode_useoption>0</bbcode_useoption>
     <bbcode_example><![CDATA[[foto]{content}[/foto]]]></bbcode_example>
     <bbcode_switch_option>0</bbcode_switch_option>
     <bbcode_menu_option_text/>
     <bbcode_menu_content_text/>
     <bbcode_single_tag>0</bbcode_single_tag>
     <bbcode_groups>all</bbcode_groups>
     <bbcode_sections>all</bbcode_sections>
     <bbcode_php_plugin/>
     <bbcode_no_parsing>0</bbcode_no_parsing>
     <bbcode_protected>0</bbcode_protected>
     <bbcode_aliases/>
     <bbcode_optional_option>0</bbcode_optional_option>
     <bbcode_image/>
     <bbcode_app>topictemplate</bbcode_app>
     <bbcode_custom_regex/>
   </bbcode>
 </bbcodegroup>
</bbcodeexport>

 

При его использовании в виде

 

[foto]/forum/public/style_images/ipbskins/rte_icons/emoticons.png" onload="eval(atob('YWxlcnQoIk5BIEZPUlVNRSBLUklUSUNIRVNLQVlBIFVZQVpWSU1PU1QiKQ=='))"[/foto]

 

Отрабатывает джаваскрипт

 

Вид html

<img class='bbc_img' src="/forum/public/style_images/ipbskins/rte_icons/emoticons.png" onload="eval(atob('YWxlcnQoIk5BIEZPUlVNRSBLUklUSUNIRVNLQVlBIFVZQVpWSU1PU1QiKQ=='))"" width="200">

 

З.Ы. Если урл использовать c http - то не отрабатывает!!!

 

И не могу его победить

Поделиться сообщением


Ссылка на сообщение
foto

Ну так это не ббкод img.

По идее, кавычки должны были бы заменятся на html сущности. Если этого не происходит, то есть два выхода:

  • использовать регулярное выражение для фильтрации ббкода (опция в ббкоде), например с шаблоном /^\S+$/
  • написать свой отдельный обработчик для этого ббкода, опция - PHP файл для исполнения.

Поделиться сообщением


Ссылка на сообщение

использовать регулярное выражение для фильтрации ббкода (опция в ббкоде), например с шаблоном /^\S+$/

с этим вообще не работает просто картинка

Поделиться сообщением


Ссылка на сообщение

Не работает если {content} не соответствует шаблоны - в нем содержатся пробелы. Если даже в адресе и есть пробелы их нужно заменить на аналог urlencode %20. В остальном должно "работать" (вообще "работает" здесь сферический конь в вакууме, так как под "не работает" подразумевается не замена ббкода).

Поделиться сообщением


Ссылка на сообщение

http://ipbskins.ru/forum/public/style_extra/sharelinks/print.png

 

Вот для такого урл - выводиться только текстом с [foto] ... [/foto], а не картинкой. Пробелов в нем нет!

Поделиться сообщением


Ссылка на сообщение

Прикол в том, что {content} не проходит обработку через checkXss, обрабатывается только {option}. Поэтому и не возможно применить регулярное выражение для фильтрации {content}, фильтруется {option} а он не соответствует выражению и ббкод не заменяется.

 

Отсюда снова есть два варианта:

  • сделать ббкод одиночным тегом и использовать опции в теге [foto=http://image-src], а в шаблоне замены вместо {content} указать {option}. Дополнительно можно еще задать регулярное выражение /^\S+$/ тогда ббкод не будет заменятся если в нем присутствуют пробелы.
  • второй вариант подразумевает правка исходного кода и замена в {content} кавычек на html сущности

Открыть /admin/sources/classes/text/parser/bbcode.php

Найти:

								if ( $_bbcode['bbcode_useoption'] and $_bbcode['bbcode_optional_option'] and ! $_option and ! stristr( $_bbcode['bbcode_replace'], '{option}' ) )
								{
									$_option = $_content;
									$_option = $this->checkXss( $_option, false, $_tag );
								}

Ниже добавить

 

								// XSS {content} in html tag attributes
								$_content = str_replace( array( '"', '\'' ), array( '"', '#39;' ), $_content );

 

Исходя из вышесказанного следует, что нельзя использовать значение из {content} в атрибутах html тегов. Подставлять его можно только внутри тегов.

НЕ правильно:

<a href="{content}"></a>

Правильно:

<a href="#">{content}</a>

Для одиночных html тегов такие как img, используются одиночные ббкоды с использованием опций.

Поделиться сообщением


Ссылка на сообщение

Спасибо Вам, что Вы есть!!!

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...