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

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

MyDC.ru _ Программирование на Lua _ Пингер NMDC-хабов

Автор: alex82 1.4.2011, 22:45

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

Название: NMDC Hubs Pinger
Версия: 1.00
Системные требования: Lua 5.1, LuaSocket
Лицензия: GPL v3
Автор: alex82

Описание:
Данный пингер не является самостоятельным программным продуктом, но может быть использован при написании хаблистов на Lua. Именно этот пингер (с небольшими изменениями) используется на http://mydc.ru/r/?http://hublist.bceti.com при добавлении хаба.

Использование

Код
Ping(sAddress, iPort[, sNick, sPassword, sShare/iShare])

sAddress - Адрес хаба. Обязательный параметр. Правильность адреса не проверяется - Вам необходимо сделать это самостоятельно перед вызовом функции.
iPort - Порт хаба. Обязательный параметр. Порт должен быть числом. Правильность порта не проверяется.
sNick - Ник пингера. Если ник не указан или равен nil, используется ник, указанный в настройках.
sPassword - Пароль. Если пароль не указан и при подключении хаб потребует его, пингер отключится от хаба.
sShare/iShare - Шара. Если шара не указана, используется шара, указанная в настройках.


Возвращаемые значения:
Функция возвращает таблицу, которая содержит следующие индексы:
Online - true если хаб онлайн, или false если пингеру не удалось соединиться с хабом
State - Состояние пинга:
-1 - Неизвестная ошибка,
1 - Не удалось соединиться,
2 - Хаб не отправил $Lock",
3 - Пинг запрещен настройками хаба,
4 - Хаб не поддерживает $BotINFO/$HubINFO (поскольку некоторые хабы поддерживают пинг, но не сообщают об этом в $Supports, код, проверяющий $Supports, закомментирован, и статус 4 никогда не устанавливается),
5 - Хаб полон,
6 - Проверка ника не пройдена,
7 - Хаб не ответил на команду $BotINFO,
8 - Ошибка в строке $HubINFO,
9 - Полностью проверен


Также в таблице могут содержаться индексы:
Users - Число юзеров на хабе
Share - Общая шара хаба, килобайт
Name - Название хаба
Descr - Описание хаба
MaxUsers - Максимум юзеров
MinShare - Минимальная шара
MinSlots - Минимум слотов
MaxHubs - Максимум хабов
Info.Email - Адрес e-mail владельца хаба
HubSoft Софт хаба

LastMsg - Последнее сообщение, отправленное хабом
LastErr - Сообщение об ошибке

Пример использования:
Код
dofile("pinger.lua")
local info = Ping("dc.myhub.pp.ua",411)
print("Hub online:",info.Online and "yes" or "no")
if info.Online then
    print("Hub name:",info.Name or "?")
    print("Hub description:",info.Descr or "?")
    print("Users:",info.Users or "?")
    print("Share:",info.Share and info.Share.." kb" or "?")
    print("Max users:",info.MaxUsers or "?")
    print("Min share:",info.MinShare or "?")
    print("Min slots:",info.MinSlots or "?")
    print("Max hubs:",info.MaxHubs or "?")
    print("Hub soft:",info.HubSoft or "?")
else
    print("Error:",info.LastErr or "?")
end

 pinger.lua ( 10.77 килобайт ) : 199

Пингеры на других языках
С++: http://mydc.ru/r/?http://svn.klan-hub.ru/listing.php?repname=webstats&path=/trunk/cpp/
php: http://mydc.ru/index.html?showtopic=4787&view=findpost&p=38316

Автор: Hammer 1.4.2011, 23:11

Я запустил скрипт. Как его вывести на сайт?

Автор: DEN 007 1.4.2011, 23:14

Цитата(Hammer @ 2.4.2011, 0:11) *
Я запустил скрипт. Как его вывести на сайт?

Для начало научись читать,
...Данный пингер не является самостоятельным программным продуктом, но может быть использован при написании хаблистов на Lua...

Автор: Hammer 1.4.2011, 23:17

:( Жаль. Вот я бы сделал хаб лист свой. Кто-бы хоть пример показал php кода. А то я всё таки хочется сделать хаб листь. Что-бы он был рабочим.

Автор: DEN 007 1.4.2011, 23:24

Цитата(Hammer @ 2.4.2011, 0:17) *
:( Жаль. Вот я бы сделал хаб лист свой. Кто-бы хоть пример показал php кода. А то я всё таки хочется сделать хаб листь. Что-бы он был рабочим.

Хочется да колется, тебе мало хаблистов? ИМХО, причем тут php? Написано же скрипт написан на lua, но однако его можно подключить к апачу, http://mydc.ru/topic4750.html , можно также дописать скрипт и обращаться из php get запросами или общаться с пингером по средством базы данных, может можно еще как то я не знаю.

Автор: PomanoB 2.4.2011, 8:46

Вот пример класса на php для обхода хабов. Правда написан он был давно и не совсем оптимально embarrassed.gif

Пример испозования

Код
        $Client = new Client();
        $Client -> SetAddr('127.0.0.1');
        $Client -> SetPort('411');
        if($Client->Connect())
        {
            echo 'Пользователей:',$Client -> GetUsersCount(),'<br />';
            echo 'Шара:',$Client -> GetShare(),'<br />';
            echo 'Тип хаба:',$Client -> GetType(),'<br />';
        }


 client.class.php.zip ( 2.37 килобайт ) : 59

Автор: Stribog 6.4.2011, 18:26

Цитата(alex82 @ 1.4.2011, 22:45) *
В последнее время появились нехорошие тенденции - рекламировать коммерческие проекты на некоммерческих ресурсах, выкладывать софт с закрытым кодом и встроенными шеллами, пытаться завлечь бесплатных лохов бетатестеров в закрытые собственнические проекты, и.т.д. И я решил слегка ударить по этой шняге нехорошим тенденциям выкладыванием софта с аналогичным функционалом, но открытого и бесплатного.


Какой тонкий намек victory.gif
Не нашел ничего стоящего в данном коде. Честно говоря, удивлен. Содержит как минимум пару подозрительных (с точки зрения безопасности) мест. Видно, он писался исключительно для себя.

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

ЗЫ Я бы сделал приписку, используйте данный код на свой страх и риск.
(Не в обиду автору. Думаю он и сам понимает про что я)

Автор: ustas 6.4.2011, 19:41

Цитата
Содержит как минимум пару подозрительных (с точки зрения безопасности) мест.
каких? просвети

Автор: mariner 6.4.2011, 20:06

я думаю это маркетинговый ход). За такое в приличном обществе бьют кочергой по #@$алу

Цитата
Прочитав начало топика, подумал, действительно что то стоящее. Но увы, надежды не оправдались.

Ты к тому, что украсть не выйдет?)

Автор: alex82 6.4.2011, 21:54

Stribog

А конкретнее? Где Вы там нашли слабые места БЕЗОПАСНОСТИ? Можете на номера строк указать?

Или это всего лишь пук в лужу?

Автор: Stribog 8.4.2011, 18:25

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

т.е. Заполнить память большим количеством NOP команд, за которыми следует шелкод.
Напомню, оп код команды NOP 0dh. В итоге мы получим в памяти кучу 0d0d0d0d0d0d0d....0d[Наш шелкод]
И можно утверждать, что с некоторой вероятностью, переход по адресу 0x0d0d0d0d будет успешным, что вызовет выполнение нашего шелкода, после последовательности нупов.

Большая часть конечно зависит, от реализации интерпретатора луа и ОС. Например в семерке, скорее всего не сработает.

Ну а в остальном, мне кажется, все секюрно.

Думаю, тем кто знаком с ассемблером, смысл понятен.


Цитата(mariner @ 6.4.2011, 20:06) *
я думаю это маркетинговый ход). За такое в приличном обществе бьют кочергой по #@$алу


Ты к тому, что украсть не выйдет?)


ДА было бы тут что красть =)
Просто, задело начало топика, не смог сдержаться =)

Автор: mariner 8.4.2011, 19:21

Цитата
тут еще много зависит от конкретной реализации интерпретатора луа

Должен тя огорчить. Это как раз не проблема. И луа что в вин7, что в линуксе один. Это называется кроссплатформенный код.

На счет переполнения. Если не ошибаюсь, при переполнении интерпретатор вылетает с ошибкой, гласящей об этом.

Автор: DEN 007 8.4.2011, 19:34

Цитата(Stribog @ 6.4.2011, 19:26) *
ЗЫ Я бы сделал приписку, используйте данный код на свой страх и риск.
(Не в обиду автору. Думаю он и сам понимает про что я)

Уважаемый Stribog, а Вы читали GPL v3?
Полагаю, что нет, так как если бы вы ее читали вы бы знали, что есть такой пункт: "http://mydc.ru/r/?http://code.google.com/p/gpl3rus/wiki/LatestRelease#15._%D0%9E%D1%82%D0%BA%D0%B0%D0%B7_%D0%BE%D1%82_%D0%B3%D0%B0%D1%80%D0%B0%D0%BD%D1%82%D0%B8%D0%B9".
Замечу, что на данный код выставлена именно такая лицензия.
15. Отказ от гарантий

НА ПРОГРАММУ НЕ РАСПРОСТРАНЯЮТСЯ НИКАКИЕ ГАРАНТИИ ДО РАМОК, ДОПУСТИМЫХ ПРИМЕНИМЫМ ЗАКОНОМ. ЕСЛИ ИНОЕ НЕ УСТАНОВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, ПРАВООБЛАДАТЕЛЬ И/ИЛИ ДРУГИЕ СТОРОНЫ ПРЕДОСТАВЛЯЮТ ПРОГРАММУ «КАК ЕСТЬ», БЕЗ КАКИХ ЛИБО ГАРАНТИЙ (ЗАЯВЛЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ), ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ И ГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОГО ПРИМЕНЕНИЯ. ВЕСЬ РИСК КАК В ОТНОШЕНИИ КАЧЕСТВА, ТАК И ПРОИЗВОДИТЕЛЬНОСТИ ПРОГРАММЫ ВЫ БЕРЁТЕ НА СЕБЯ. ЕСЛИ В ПРОГРАММЕ ОБНАРУЖЕН ДЕФЕКТ, ВЫ БЕРЁТЕ НА СЕБЯ СТОИМОСТЬ НЕОБХОДИМОГО ОБСЛУЖИВАНИЯ, ПОЧИНКИ ИЛИ ИСПРАВЛЕНИЯ.

Почитайте на досуге:
http://mydc.ru/r/?http://www.gnu.org/licenses/gpl-3.0.html - Оригинал GPL v3
http://mydc.ru/r/?http://code.google.com/p/gpl3rus/wiki/LatestRelease - Переведенная на русский GPL v3

Автор: alex82 8.4.2011, 20:22

Stribog

Теоретически возможно всё. Даже падение метеорита на башку в ясный летний день.

Вы на практике это проделайте, а потом пишите об уязвимости.

И кстати. Если Lua-скрипты работают на многих хабах, и хакнуть Lua так просто, то почему до сих пор ни один хаб не был взломан с использованием Вашего конгениального метода?

Цитата
ДА было бы тут что красть =)

Ну да, это Вам не китайский код в 3-4 т строк, написанный хрен знает на чем, а файлик размером 365 строк, 85 из которых комментарии (но не смотря на это уверенно пингующий подавляющее большинство хабов). Его не украсть потому что его не продать, ибо лохи платят за количество. Да и не нужно его красть - он раздается бесплатно в первом посте темы. big_smile.gif

PS. Газификация лужи проходит как-то не совсем успешно.

Автор: Stribog 10.4.2011, 14:29

Цитата(mariner @ 8.4.2011, 19:21) *
Должен тя огорчить. Это как раз не проблема. И луа что в вин7, что в линуксе один. Это называется кроссплатформенный код.

На счет переполнения. Если не ошибаюсь, при переполнении интерпретатор вылетает с ошибкой, гласящей об этом.


Стандарт языка один, а реализаций его интерпретатора несколько, тк он опенсорс.

Цитата(DEN 007 @ 8.4.2011, 19:34) *
Уважаемый Stribog, а Вы читали GPL v3?
Полагаю, что нет, так как если бы вы ее читали вы бы знали, что есть такой пункт: "http://mydc.ru/r/?http://code.google.com/p/gpl3rus/wiki/LatestRelease#15._%D0%9E%D1%82%D0%BA%D0%B0%D0%B7_%D0%BE%D1%82_%D0%B3%D0%B0%D1%80%D0%B0%D0%BD%D1%82%D0%B8%D0%B9".


Действительно не читал, заинтересовало. Спасибо, обязательно прочитаю.
Почему-то даже об этом не задумывался.

Цитата(alex82 @ 8.4.2011, 20:22) *
И кстати. Если Lua-скрипты работают на многих хабах, и хакнуть Lua так просто, то почему до сих пор ни один хаб не был взломан с использованием Вашего конгениального метода?


Все просто, аудитория, на которую может быть направлена данная атака не столь велика, как например, аудитория людей, пользующихся браузером или ОС. Поиск подобных уязвимостьей не есть тривиальная работа и порой занимает много времени. Вы бы хотели тратить свое личное время на уязвимость, которую можно применить в лучшем случае на 100 пользователях?

Я встречал пример использования данной уязвимости на примере одного из современных браузеров (Если не ошибаюсь IE), на примере JavaScript, который при больших объемах данных тоже должен выкидывать исключение. (JavaScript тоже является интерпретируемым языком как и луа, стандарт один, а вот реализаций много)

Цитата(alex82 @ 8.4.2011, 20:22) *
Stribog
Вы на практике это проделайте, а потом пишите об уязвимости.


Проделывать на практике у меня нет ни желания ни времени. Я лишь указал на возможную уязвимость кода. Ведь даже если вылетит исключение, то работа скрипта будет остановлена. А остановка работы скрипта, не есть его нормальное поведение. Получается, удаленный пользователь, при желании, может в любой момент приостановить работу скрипта... Мне кажется это не есть нормально. Также, может быть вызвана неоправданно высокая нагрузка на процессор.

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

Автор: mariner 10.4.2011, 14:49

Цитата
Стандарт языка один, а реализаций его интерпретатора несколько, тк он опенсорс.

пруф или не было?

Начнем с того, что код берется из оригинального луа. И есть 4 реализации - lua, lua-aio (с тредами), lua-JIT и lua-llvm. Последние 2 лишь генерят сбой байткод из lua-исходников. В них оочень проблематично вызвать переполнение, особенно в LLVM. Там монстры об этом позаботились.

ЗЫ есть еще пара метрвых или полудохлых реализация, но я их использование близится к 0.

Так что пока ты на словах Лев Толстой, а на деле "как обычно".

Автор: Setuper 10.4.2011, 15:05

Stribog, ты так говоришь как будто open source пишут одни дураки, которые писать не умеют.

Нормальное состояние любой программы можно поломать... в конце концов задедосить.

Нужно создавать, а не ломать.

Автор: Stribog 10.4.2011, 16:29

Цитата(mariner @ 10.4.2011, 14:49) *
пруф или не было?

Начнем с того, что код берется из оригинального луа. И есть 4 реализации - lua, lua-aio (с тредами), lua-JIT и lua-llvm. Последние 2 лишь генерят сбой байткод из lua-исходников. В них оочень проблематично вызвать переполнение, особенно в LLVM. Там монстры об этом позаботились.

ЗЫ есть еще пара метрвых или полудохлых реализация, но я их использование близится к 0.

Так что пока ты на словах Лев Толстой, а на деле "как обычно".


И к чему все это?
Ты меня по моему не понял, я это написал к тому, что не исключен случай собственной реализации луа, к тому же версий луа интерпретатора несколько. Но тут разговор-то вообще не об этом. http://mydc.ru/topic4787.html?view=findpost&p=38427 к чему этот пост?
Думаешь я не знаю что такое кросплатформенный код? или не видел оф сайт луа интерпретатора?

Цитата(Setuper @ 10.4.2011, 15:05) *
Stribog, ты так говоришь как будто open source пишут одни дураки, которые писать не умеют.

Нормальное состояние любой программы можно поломать... в конце концов задедосить.

Нужно создавать, а не ломать.


Нет, такого я тоже не говорил. Я лишь сказал, что опенсорс, может уступать коммерческому ПО.

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

И еще, одно, если вы можете нагрузить процессор дос атакой, и совсем другое, если вы можете добиться того же всего лишь одним, специально сформированным, запросом.

Автор: mariner 10.4.2011, 16:39

Ты воду не лей, а. Ты либо эксплоит покажи рабочий, либо молчи.

Цитата
Ты меня по моему не понял, я это написал к тому, что не исключен случай собственной реализации луа

В этом топике обсуждается нt твои домыслы, а пингер под lua\lua-aio.

Автор: Stribog 10.4.2011, 21:14

Цитата(mariner @ 10.4.2011, 16:39) *
Ты воду не лей, а. Ты либо эксплоит покажи рабочий, либо молчи.


В этом топике обсуждается нt твои домыслы, а пингер под lua\lua-aio.


Я указал на потенциально небезопасный кусок кода. Дальше уже автору решать, оставить как есть или исправлять.

И речь идет не о домыслах, а не полной фильтрации полученных даны, а конкретнее их длинны.

Зачем эксплоит, если можно итак послать неоправданно длинное сообщение. Или трудно написать программу, которая в ответ шлет длинный ответ?
Шел это уже самый худший вариант исхода событий.

Автор: alex82 10.4.2011, 21:41

Цитата
Я указал на потенциально небезопасный кусок кода. Дальше уже автору решать, оставить как есть или исправлять.
Вы ни разу не указывали ни на один кусок кода. Перестаньте наконец заниматься газификацией мелких водоемов, и покажите код, кажущийся Вам подозрительным. Или не пишите вовсе.

Автор: HackFresse 11.4.2011, 12:46

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

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

Автор: Stribog 11.4.2011, 17:06

Цитата(HackFresse @ 11.4.2011, 12:46) *
Мне почему-то кажется, что вы обсуждаете некую сферическую уязвимость в вакууме.. что-то типа "даже в самой неприступной крепости найдётся дырка, где пролезет осёл"

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


ДА тут дело больше не в уязвимости, а в амбициях big_smile1.gif .
Мне кажется не безопасным бесконечное считывание данных из сокета, но видимо кто то считает, что за это должен отвечать интерпретатор.
Уж как минимум к замусориванию оперативной памяти, это привести может, и хорошо бы что бы только к замусориванию.
Приведу код. (даже не знаю зачем)
Кусок кода
Код
                        l,e = client:receive(1)
            tbuf = {}
            while not e do
                if l == "|" then
                                        #Тут собственно обработка команды.
                else
                    #Тут постоянное добавление новых данных.
                end

                l,e = client:receive(1)
            end


Вот собственно о чем спор. И никак тут его не разрешить походу. Тем более, что я в меньшинстве.

Мое сугубо личное мнение. (Риторический вопрос)
Команды, получаемые от хаба, как правило имеют длину не более 2048 байт. Почему бы не ограничить их размер?

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

Но ведь тут действительно нельзя однозначно сказать что это эпик фейл, никто же не проверял, да и сказать что это правильно, вроде, тоже как то не скажешь.

Вот как-то так можно пересказать всю эту дискуссию.

ЗЫ Я не пытаюсь навязать свою точку зрения или заклеймить автора, просто указал на не достаточную фильтрацию входных данных.

Автор: alex82 11.4.2011, 18:12

Эта "уязвимость" исправляется при помощи двух строк кода, и это может сделать сам юзер, если чувствует в себе зачатки паранойи.