Название скрипта: 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
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
Что это означает? (удивляет присутствие знака "=" и последующего "==" в одной связке). Раньше не встречал такое.
Это присвоение переменной результата сравнения. Эквивалент:
Код
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
Считай это авторским стилем Мне удобно, когда строки не выходят за пределы экрана и не приходится пользоваться горизонтальной прокруткой, поэтому я разбиваю их в удобных мне и допустимых Lua местах.
Цитата(Ksan @ 5.3.2017, 22:29)
Alexey, ещё кое-что выяснилось при попытке запуска … (скрипт не запускается с ошибкой).
И каков текст ошибки?
Автор: Ksan 5.3.2017, 22:50
Сорри, это только у меня ошибку выдавало, ибо я, когда доделывал скрипт под себя (добавлял строку), воткнул строку между этими разделёнными двумя, не заметив, что это единое целое.. А ошибка про то, что нужна закрывающая скобка для вооон той скобки на другой строке выше...Примерно так.