Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
asterix_kpi

XSS в bbcode img

Recommended Posts

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

Share this post


Link to post
Share on other sites

на версии 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 - то не отрабатывает!!!

 

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

Share this post


Link to post
Share on other sites
foto

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Прикол в том, что {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, используются одиночные ббкоды с использованием опций.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...