Opencart тема Openstore возможный xss???

Тема в разделе "OpenCart", создана пользователем halfhope, 1 окт 2013.

  1. halfhope

    halfhope

    Регистрация:
    31 дек 2012
    Сообщения:
    284
    Симпатии:
    309
    В шаблоне OpenStore нашел файл catalog/view/theme/openstore/stylesheet/styles/style-switcher.php с содержимым:
    PHP:
    <?php
        $templatestyle 
    $_GET['templatestyle'];
            
    setcookie("templatestyle"$templatestyletime()+604800,"/");
            if(isset(
    $_GET['js'])) {
            echo 
    $templatestyle;
            } else {
            
    header("Location: ".$_SERVER['HTTP_REFERER']);
        }
    ?>
    Перехожу по ссылке catalog/view/theme/openstore/stylesheet/styles/style-switcher.php?templatestyle=../../../../../../../index.php?
    В cookies переменная, принимает следующий вид
    templatestyle="..%2F..%2F..%2F..%2F..%2F..%2F..%2Findex.php%3F"
    В файле header.tpl темы код
    PHP:
    <?php 
        
    if(!empty($_COOKIE['templatestyle'])) $templatestyle $_COOKIE['templatestyle'];
                else 
    $templatestyle $this->config->get('icetheme_openstore_style');
            
    ?>
    <link id="stylesheet" rel="stylesheet" type="text/css" href="catalog/view/theme/openstore/stylesheet/styles/<?php echo $templatestyle?> .css" />
    И наконец перейдя на главную страницу вижу
    Код:
    <link id="stylesheet" rel="stylesheet" type="text/css" href="catalog/view/theme/openstore/stylesheet/styles/../../../../../../../index.php? .css" />
    
    но все символы преобразуются в html сущности
    Код:
    <link id="stylesheet" rel="stylesheet" type="text/css" href="catalog/view/theme/openstore/stylesheet/styles/&quot;/&gt;&lt;script&gt;alert('xss')&lt;/script&gt;&lt;&quot; .css" />
    
    Можно ли как-нибудь обойти или обмануть преобразование в сущности? Или здесь xss даже не пахнет?
    --- Добавлено, 1 окт 2013 ---
    Нашел уязвимость в одном из модулей сжатия стилей. Перед выводом страницы модуль ищет в коде стили сжимает компрессором и объединяет их. Потом заменяет их ссылкой на упакованный файл. Строка "templatestyle=../../../../../../../config.php?" сработала как надо, файл config.php был сжат вместе со стилями и я сразу получил все свои пароли в сжатом файле))
    Только вот модуль оказался мой)) Я так думаю, что обход htmlspecialchars не представляется возможным. По крайней мере в моей реализации.
    Ссылка снизу как раз на эту тему, очень помогла, очень много полезного.
     
    Последнее редактирование: 1 окт 2013