Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Безопасность [PtokaX] _ Block Search Exploit

Автор: Alexey 25.2.2017, 21:07

Название скрипта: block_search_exploit.lua
Версия скрипта: 1.0.1 (2017-02-26)
Описание:
Блокирует использование уязвимости в клиентах пользователей хаба.
Blocking search requests used for DDoS.
Хабсофт: PtokaX 0.4.1.1 - 0.5.0.2
Версия Lua: 5.1
Автор: Alexey

Блокирует использование уязвимости в клиентах пользователей хаба.
http://mydc.ru/r/?http://www.te-home.net/?id=54&title=Second+largest+exploit+in+NMDC+history

 block_search_exploit.lua ( 3.67 килобайт ) : 37
v.1.0.1

Предыдущая версия
 block_search_exploit.lua ( 3.3 килобайт ) : 20
v.1.0

Автор: MIKHAIL 5.3.2017, 20:11

Alexey, было бы весьма уместно видеть в комплекте маленький тестовый скрипт (или как опция в данном скрипте), который бы сперва определил, имеется ли уязвимость на хабе.
Если такое возможно, конечно.))

Автор: Alexey 5.3.2017, 21:49

Цитата(MIKHAIL @ 5.3.2017, 20:11) *
Alexey, было бы весьма уместно сперва определить, подвержен ли данной уязвимости хаб, на который предполагается установить данную скрипт-заплатку.

Было бы весьма уместно почитать статью с описанием уязвимости, прежде чем задавать вопросы, ответы на которые уже даны.
Цитата
Today we can see that most largest hubs on DC run PtokaX. It is now known that exploit has been fixed in PtokaX version 0.5.0.3 as of 2015-02-20.

Цитата(MIKHAIL @ 5.3.2017, 20:11) *
Т. е. я бы хотел видеть в комплекте маленький тестовый скрипт, который бы мне сказал, имеется ли уязвимость на хабе.

Не думаю, что выкладывать рабочий эксплоит, — хорошая идея.

PS: В скрипте изначально есть проверка версии PtokaX, он сообщит, если в используемой версии PtokaX уязвимость уже закрыта.

Автор: Ksan 5.3.2017, 21:49

Alexey, интересуют конструкции такого типа в скрипте:

Код
tCfg.bSaveLogs = tCfg.bSaveLogs == 1

Что это означает? (удивляет присутствие знака "=" и последующего "==" в одной связке). Раньше не встречал такое.

Автор: Alexey 5.3.2017, 22:15

«Есть многое на свете, друг Горацио, что и не снилось нашим мудрецам» © «Гамлет», Шекспир

Это присвоение переменной результата сравнения. Эквивалент:

Код
if tCfg.bSaveLogs == 1 then
  tCfg.bSaveLogs = true
else
  tCfg.bSaveLogs = false
end

В конфиге удобно писать булевы значения в понятной всем форме 1/0, а при работе скрипта удобно использовать настоящие булевы значения. Вот те конструкции и перегоняют удобную для записи форму в удобную для использования. Если булевых переменных в конфиге много, то удобно преобразовать все разом:
Код
    for i,v in pairs(tCfg) do
        if i:byte(1) == 98 then -- b
            tCfg[i] = v == 1
        end
    end

Автор: Ksan 5.3.2017, 22:29

Alexey, ещё кое-что выяснилось при попытке запуска - обнаружилось разделение строки на 2 отдельные (скрипт не запускается с ошибкой). Вот этот кусок (тут 2 строки, а должны быть одной):

Код
        Core.SendToProfile(0, ('<%s> Script %s is useless here and will be stopped.'):format(
            tCfg.sBot, ScriptMan.GetScript().sName))
Это 41-42 строки в скрипте, а ниже есть такой же случай в 71-72 строках. Эти строки в парах надо объединить в одну.

Автор: Alexey 5.3.2017, 22:40

Считай это авторским стилем big_smile.gif Мне удобно, когда строки не выходят за пределы экрана и не приходится пользоваться горизонтальной прокруткой, поэтому я разбиваю их в удобных мне и допустимых Lua местах.

Цитата(Ksan @ 5.3.2017, 22:29) *
Alexey, ещё кое-что выяснилось при попытке запуска … (скрипт не запускается с ошибкой).

И каков текст ошибки?

Автор: Ksan 5.3.2017, 22:50

Сорри, это только у меня ошибку выдавало, ибо я, когда доделывал скрипт под себя (добавлял строку), воткнул строку между этими разделёнными двумя, не заметив, что это единое целое..
А ошибка про то, что нужна закрывающая скобка для вооон той скобки на другой строке выше...Примерно так.