Последние темы


Безопасность ModX

  • @timm ну если уж такой 8KGWv7PW4w3u_ префикс достали, то банальным изменением префиксов на своих сайтах тут не защититься

  • В этом-то и жопа. Или разработчики ModX все закроют, или придется куда-то переезжать и осваивать новую систему управления. Хотя с другой стороны - Вордпресс живее всех живых

  • @timm фуууу, да это развод Наумкина, сам префикс выложил...

  • самый простой, по моему, способ защиты от слепых инъекций это просто ограничивать кол-во символов в параметре, чтобы ломатели не могли строить запросы типа: index.php?id=3+and+substring((select+column_name+from+information_schema.columns+where+table_name=0x6262325f7573657273+limit+1,1),1,1)='i'
    Лично в таком варианте, если ID должно быть числом и только числом, его можно просто приводить к типу Integer ( $id = (int) $_POST('id'); ).
    Ну а в остальном резать символы до 10-15 и инъекция не пройдет.

  • @Gulik сказал Безопасность ModX:

    @timm фуууу, да это развод Наумкина, сам префикс выложил...

    вы не правы, вот этот пост:
    https://modx.pro/security/10266-critical-vulnerability-in-modx-revolution/#comment-70625

    появился вчера, а остальные посты были сильно раньше.
    Зенит реально взломал modx pro

  • @slaad Да вот читайте с этого места, все станет ясно https://modx.pro/security/10266-critical-vulnerability-in-modx-revolution/#comment-70242

  • @slaad

    Зенит реально взломал modx pro

    Да, но сомневаюсь, что с помощью кода навроде как Евгений кидал.

    Пока, например, я вижу такие изменения в компоненте Василия:
    https://github.com/bezumkin/Tickets/commit/b3251a12e557cc7c067a30e97594ba609c59f02d

    Для getProducts, думаю, это не страшно, т.к. он не использует xPDO. Но может там есть другие дыры, хотя везде используется PDO.

  • @Gulik сказал Безопасность ModX:

    @slaad Да вот читайте с этого места, все станет ясно https://modx.pro/security/10266-critical-vulnerability-in-modx-revolution/#comment-70242

    Еще раз повторю, что в этом форуме комментарии не в хронологическом порядке расположены сверху вниз.
    Те комментарии, что вы привели старше того, поста, в котором идет хак.

    Хронология такая:
    Появляется Зенит и пишет, что префикс ломается брут форсом посимвольным перебором.
    Его просят доказать. Он гнет пальцы. Василий его выкидывает с форума меняя его комментарий (на Злой Василий меня забанил)
    Все пугаются, что Зенит после бана все же исправил коммент. Василий признается, что это сделал он. Все выдыхают свободно.
    Это было до 8 ноября.
    Вчера Зенит вернулся и предоставил префикс таблицы модх про, но ответил на один из ранних постов, из-за чего комментарий отображается выше не по хронологии. После чего Василий снял шляпу и убежал править компоненты.

    Дыра действительно в xPDO и еще бог знает где...

  • @slaad Прощу прощения, не заметил (

  • В его примере 4 символа, а если добавить ещё хотя бы парочку то сервак будет отрубать соединение по таймауту (если он настроен). Жути наводит зачем-то.

    Никто и ничего не отрубит. Проверка 1 символа = 1 запрос на сервер.

    Вот код от Евгения. По-моему это наёбка какая-то. Тут просто символ сравнивается с таким же в пароле, т.е. пароль заранее известен.

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

    ord($char) == ord($str[$i])
    

    мы будем сравнивать ответ от сервера. В этом и смысл слепой SQL-injection. Заставить отвечать сервер по разному если символ подошел и если не подошел. И демонстрацию этого способа я оставил за кадром.

    самый простой, по моему, способ защиты от слепых инъекций это просто ограничивать кол-во символов в параметре, чтобы ломатели не могли строить запросы типа

    Это способ не поможет, т.к. данные могут передаваться разными способами. GET, POST, COOKIE

    Лично в таком варианте, если ID должно быть числом и только числом, его можно просто приводить к типу Integer.

    Да. Такой фикс работает. Ищите упоминание Василия "спасибо за PR" в топике на modx.pro. Просто люди сразу не смекнули чего этот фикс делает.

    Еще вопросы? Или будем дальше утверждать, что я жути навожу?

  • @Gulik да ничего страшного, мне просто тоже не очень нравится как там комментарии отображаются))

  • @Agel_Nash ну да, этот код был в ответ Ланца сколько времени занимает перебор строки разными способами - посимвольно или целиком строкой
    По хорошему самое интересеное в более ранних постах Евгения https://modx.pro/users/agel_nash/comments/?page=4

  • @Agel_Nash

    Никто и ничего не отрубит. Проверка 1 символа = 1 запрос на сервер.

    Ок, согласен.

    В этом и смысл слепой SQL-injection. Заставить отвечать сервер по разному если символ подошел и если не подошел. И демонстрацию этого способа я оставил за кадром.

    Вот и получается, что самое главное закадром 🙂 Поэтому такая была моя реакция. Спасибо, погуглю на эту тему.

    Еще вопросы? Или будем дальше утверждать, что я жути навожу?

    Пока ты ничего не показал конкретного, вопрос не закрыт. Остается поверить наслово и отправиться в гугл.

  • По ссылке от @slaad увидел продолжение от Евгения. Теперь понятно.

    Вообще не понятно зачем было изобретать велосипед xPDO, есть же куча других ORM.

  • @Agel_Nash Я все же особо не пойму почему такая шумиха вокруг этих префиксов?
    Если нашли уязвимый (не фильтруемый) параметр, то ясно, что можно получить доступ ко всему сайту, префиксы не нужны. Или префикс это для демонстрации и только?

  • @Gulik Не было бы никакой шумихи, если бы решение изначально было предложено верное. Я пришел в топик лишь для того, чтобы объяснить людям: смена префикса не панацея и дырку не закрывает.

    @Andchir Ну и хорошо, что теперь нет никаких наебок:-)

  • @Agel_Nash сказал:

    Я пришел в топик лишь для того, чтобы объяснить людям: смена префикса не панацея и дырку не закрывает.

    Спасибо, что не поленился сюда прийти. Согласен, что скрытие префиксов, это не решение. Тут ещё непонятки были как раз из-за странного пулл реквеста от Николая. Плюс сложно уследить за хронологией в древовидных комментариях.

  • @Andchir И это еще один перл. Префикс он прячет из системного конфига который виден только админу. Но Коле этого не объяснить - он же профи. Куда нам до него...

  • @Agel_Nash Ясно, значит просто демонстрация. Я вас взломал! Чем докажешь? Вот вам префикс...
    Все же, кончено, смена префикса несколько замедлит процесс взлома. Ну очень на чуть-чуть))
    После его подбора можно так же идти в таблицу юзеров и подбирать их логин, а затем их пароль в виде хеша... А потом искать этот хеш на cmd5...
    Или все же эта дырка в ModX предусматривает возможность вносить изменения в базу? Запросы UPDATE или INSERT проходят?

  • @Agel_Nash

    Но Коле этого не объяснить - он же профи. Куда нам до него...

    У меня подозрение, что Николай специально хотел приберечь эту дырку для себя, побыть богом это же так приятно 🙂

 

Последние комментарии

  • @Andchir Теперь точно можно не торопиться как минимум день...
    Откат сайта случайно сделал на 2 дня вместо 2 часов. День буду восстанавливать...

    Читать далее
  • @LoGruS Поправка, привязываемся к значению [[+value]]

    Читать далее
  • Участник @Andchir написал в Ограничение покупки:

    SHK.recountItemAll();

    Андрей, спасибо! Сделал, работает и обновление цены и ограничение товаров по инвентори.

    Итоговый вариант (вдруг кому пригодится):

    Поле кол-во товара:

    <input class="shk-count" type="number" name="count[]" value="[[+count]]" min="1" max="[[+inventory]]" />

    Кнопка пересчитать:

    <a href="#" onclick="SHK.recountItemAll(); return false;" data-toggle="tooltip" title="Пересчитать">Пересчитать</a>

    ИТОГО - контроль кол-ва.

    Читать далее
  • Решается без костылей из js

    [[+name:is=`color`:then=`<label for="[[+name]]__[[+idx]]" class="d-block custom-control-label shk-color-checkbox [[+name]][[+idx]]" title="[[+value]]"></label><p class="ml-40">[[+value]]</p>`:else=`<label for="[[+name]]__[[+idx]]">[[+value_name]]</label>`]]

    Получаем на странице строку такого вида:

    <label for="color__1" class="d-block custom-control-label shk-color-checkbox color1" title="Голубой"></label><sup>17</sup><p class="ml-40">Голубой</p>

    Привязываемся в css к классу color1, а дальше CSS спрайты и стили решают все, проверенно, работает 😃 Спасибо Андрею и его демо-сайту с shopkeeper4, подглядел решение на нем.

    Читать далее