Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
12 ноября 2016, 14:36
+1
Да там и POST завались, и подбор директорий через OWASP_DirBuster_Project, и еще много всякого в поисковых запросах (вроде всё отфильтровалось).

Я вовсе не уверен, что всё закрыл, но основное — наверняка.
Василий Наумкин
12 ноября 2016, 14:34
+1
Но как, Шерлок? Особенно вот с этим исправлением?

Там же вроде идёт что-то типа
$object = new $objectName($data);
или типа того. Хотяяя… можно же, наверное, подставить как-бы class_key = 'modUser' и тогда будет создан именно этот объект.
Василий Наумкин
12 ноября 2016, 12:41
0
А это, похоже, из-за нашего исправления xPDO — позже подебажу, что там происходит.
Василий Наумкин
12 ноября 2016, 12:38
0
Этому сто лет в обед — работа TicketMeta с любыми ресурсами.

А для тикетов после обновления нужно позаходить в ресурсы, чтобы создались объекты TicketTotal, или запустить вручную скрипт пересчёта рейтинга из заметки про обновление.
Василий Наумкин
12 ноября 2016, 10:45
+1
Я свои уже пропатчил.

Другой вопрос, закрывает ли это сразу все дыры, или нужно еще методы какие править — потому и спрашиваю автора xPDO, он лучше знает.
Василий Наумкин
12 ноября 2016, 10:44
+2
Да я, хотя-бы, обсудить хочу — есть ли в этом смысл.

Если есть, то могу и самостоятельно хотфикс в репозитории выложить, не взирая на праздники.
Василий Наумкин
12 ноября 2016, 10:27
4
+9
Покопался в исходниках и написал пока такой фикс xPDO::getCriteria():
public function getCriteria($className, $type = null, $cacheFlag = true)
{
    $c = $this->newQuery($className);
    $c->cacheFlag = $cacheFlag;
    if (!empty($type)) {
        if ($type instanceof xPDOCriteria) {
            $c->wrap($type);
        } elseif (is_array($type)) {
            $tmp = array();
            array_walk_recursive($type, function ($v, $k) use (&$tmp) {
                if (!is_numeric($k)) {
                    $tmp[$k] = $v;
                }
            });
            if (count($tmp)) {
                $c->where($tmp);
            }
        } elseif (is_scalar($type)) {
            if ($pk = $this->getPK($className)) {
                $c->where(array($pk => $type));
            }
        } else {
            $c->where($type);
        }
    }

    return $c;
}
Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе.

По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа.
Василий Наумкин
12 ноября 2016, 09:09
+1
Я надеюсь, что речь именно про web-коннекторы.

Понятное дело, что через коннекторы менеджера тоже можно пролезть, но для этого требуется авторизация, а у web — далеко не всегда.

Ну, будем ждать еще взломов и смотреть логи, куда и как пролезли.
Василий Наумкин
12 ноября 2016, 08:41
+1
По идее (по идее), в modConnectorResponse идёт проверка на авторизацию в админку и там вообще ничего снаружи не должно проходить.

Но я уже ни в чём не уверен.
Василий Наумкин
12 ноября 2016, 07:36
+2
Я могу написать на что нужно обратить внимание и как исправить, но это же будет и инструкцией по взлому еще неисправленных сайтов и дополнений.

Так что, палка о двух концах. Свои дополнения я поправил, так что можно посмотреть коммиты у тех, что в открытом доступе — должно быть всё понятно.
Василий Наумкин
12 ноября 2016, 04:38
+4
С нашим сообществом всё прекрасно.

Человек сначала ярко выступили и получил заслуженные минусы и бан. Затем вернулся и доказал свою правоту — теперь получит почёт и уважение.

Ну а я получил массу информации по методике взлома сайтов, благодаря логам на сервере.
Василий Наумкин
12 ноября 2016, 04:23
+7
Да, ты абсолютно прав — снимаю шляпу.

Я вчера весь день читал про слепые SQL и ставил эксперименты на тестовом сайте. А сегодня весь день буду обновлять свои дополнения на предмет фильтрации этих слепых SQL в запросах.

Очевидно, что на фильтрацию их в самом xPDO полагаться нельзя, как бы ни хотелось.
Василий Наумкин
11 ноября 2016, 13:43
+3
Неа, сайтики modstore.pro и modx.pro даже физически расположены на разных серверах.

Но спасибо за логи, я внимательно смотрю где и что ты перебирал, на какие файлы обращался и какими запросами.
Теперь очевидно, что нужно делать дополнительную фильтрацию всех запросов, перед передачей их в xPDO.
Василий Наумкин
11 ноября 2016, 09:57
+2
Либо нажимать на количество комментариев под кнопкой обновления.
Василий Наумкин
11 ноября 2016, 08:28
+6
Я не могу со 100% точностью заявлять, что человек, создавший сайт и написавший коммент — одно лицо, паспорт я не проверял.

Но если ты думаешь, что один человек вчера создал тестовый сайт, а другой следом его нашел, взломал и выложил сюда префикс — то советую включить ту часть мозга, которая отвечает у тебя за логику.

Я уж молчу о том, что «великий хакер» создал здесь новую учётную запись с тем же ником, а не разблокировал старую — что было бы гораздо круче и нагляднее.

В общем вас, хорьков-паникёров, уже не стесняясь троллят, а вы ведётесь.
Василий Наумкин
11 ноября 2016, 08:02
+3
Ты тоже так можешь:
1. Заходишь на modhost.pro
2. Создаёшь новый тестовый сайт
3. Смотришь его префикс
4. Profit!

Что и кому это доказывает — непонятно. Речь, всё-таки, шла о префиксе этого сайта, а не любого подряд.
Василий Наумкин
11 ноября 2016, 07:07
+2
Нет.

Это префикс тестового сайта, созданного вчера на modhost.pro
Василий Наумкин
10 ноября 2016, 10:22
0
s7308.h7.modhost.pro/
s3708
FhQIqQmo09Md

Твой код с подключением файлов в шаблоне, никуда не пропадает.