55 Кб, 634x526
1. Генерирую список ключей с помощью random seed (из питона, например)
2. Храню в двух копиях на сервере и клиенте
3. http://example.com/exec/?path=[путь до скрипта или команды]&key=[первый ключ из списка]
4. Получаю ответ от сервера
5. Убираю использованный ключ в списках на клиенте и сервере
Где я проебался?
2. Храню в двух копиях на сервере и клиенте
3. http://example.com/exec/?path=[путь до скрипта или команды]&key=[первый ключ из списка]
4. Получаю ответ от сервера
5. Убираю использованный ключ в списках на клиенте и сервере
Где я проебался?
Ю Почему просто не использовать асимметричную криптографию, подписывая каждый запрос с проверкой на сервере?
>>739 (OP)
Человек посередине перехватывает твой пакет, меняет path на rm -rf /* и отправляет дальше
> http
Человек посередине перехватывает твой пакет, меняет path на rm -rf /* и отправляет дальше
>>742
Точно. Вот как раз нормальная подпись от такого бы и помогла.
Точно. Вот как раз нормальная подпись от такого бы и помогла.
>>740
Можно, наверное. Но это ж нужно тянуть GPG... Или нет? А так простота реализации: random.seed() в Python, math.randomseed() в Lua. Нагенерировать списочек из base58 длинной где-то 32 символа не проблема. А Lua-то запустить даже на тостере можно.
>>742
О, это ты прав, напрямую писать исполняемый код опасно. Тогда имя скрипта буду передавать, проверять, существует ли такой файл и запускать. Спасибо
Можно, наверное. Но это ж нужно тянуть GPG... Или нет? А так простота реализации: random.seed() в Python, math.randomseed() в Lua. Нагенерировать списочек из base58 длинной где-то 32 символа не проблема. А Lua-то запустить даже на тостере можно.
>>742
О, это ты прав, напрямую писать исполняемый код опасно. Тогда имя скрипта буду передавать, проверять, существует ли такой файл и запускать. Спасибо
115 Кб, 1060x1558
>>744
param=existing.script;rm -rf /
>Тогда имя скрипта буду передавать, проверять, существует ли такой файл и запускать
param=existing.script;rm -rf /
>>746
Лучше вообще никогда не передавать команды системы или параметры к командам напрямую в систему, я как старый багхантер атвичаю.
Лучше вообще никогда не передавать команды системы или параметры к командам напрямую в систему, я как старый багхантер атвичаю.
75 Кб, 1143x954
>>744
Эта фигня генерирует псевдослучайные числа. Это не есть хорошо для криптографии. Там, где можно найти закономерность, можно сделать уязвимость.
> random.seed()
Эта фигня генерирует псевдослучайные числа. Это не есть хорошо для криптографии. Там, где можно найти закономерность, можно сделать уязвимость.
>>739 (OP)
Почему бы не обернуть твои запросы в SSL, TLS или SSH?
Почему бы не обернуть твои запросы в SSL, TLS или SSH?
>>792
Добавь простую подпись запроса каким-нибудь md5 (или любым другим) хешем.
То есть допустим у тебя есть запрос: /exec/?path=script.py&arg1=foo&arg2=bar
Сортируешь входящие параметры по алфавиту, чтобы получилось:
params = "arg1=foo&arg2=bar&path=script.py"
Плюс ты имеешь какую-нибудь случайную соль, например:
salt = "98Y3cs6UwRS1TbT"
Эта соль известна клиенту (чтобы подписывать запросы) и серверу (чтобы проверять), но не известна третьим лицам.
Берешь хеш-функцию (md5 или какую хочешь) и получаешь хеш от соли и параметров:
hash = md5(salt + "." + params)
И получается у тебя допустим fddb0e9af298189f925f62bc634fbcce. Передаешь его в запросе: /exec/?path=script.py&arg1=foo&arg2=bar&md5=fddb0e9af298189f925f62bc634fbcce
На сервере сверяешь так же хеш с солью для всех параметров, кроме md5. Если не совпало, значит запрос подделан, значит отбрасывается.
Плюсы:
- простота реализации, пишется за 5 минут, можно запускать хоть на чайнике
Минусы:
- У тебя по прежнему http, все тело запроса видно перехватчику.
- md5 небезопасен, но мне кажется для твоей задачи пойдет. Ну или возьми sha2.
Добавь простую подпись запроса каким-нибудь md5 (или любым другим) хешем.
То есть допустим у тебя есть запрос: /exec/?path=script.py&arg1=foo&arg2=bar
Сортируешь входящие параметры по алфавиту, чтобы получилось:
params = "arg1=foo&arg2=bar&path=script.py"
Плюс ты имеешь какую-нибудь случайную соль, например:
salt = "98Y3cs6UwRS1TbT"
Эта соль известна клиенту (чтобы подписывать запросы) и серверу (чтобы проверять), но не известна третьим лицам.
Берешь хеш-функцию (md5 или какую хочешь) и получаешь хеш от соли и параметров:
hash = md5(salt + "." + params)
И получается у тебя допустим fddb0e9af298189f925f62bc634fbcce. Передаешь его в запросе: /exec/?path=script.py&arg1=foo&arg2=bar&md5=fddb0e9af298189f925f62bc634fbcce
На сервере сверяешь так же хеш с солью для всех параметров, кроме md5. Если не совпало, значит запрос подделан, значит отбрасывается.
Плюсы:
- простота реализации, пишется за 5 минут, можно запускать хоть на чайнике
Минусы:
- У тебя по прежнему http, все тело запроса видно перехватчику.
- md5 небезопасен, но мне кажется для твоей задачи пойдет. Ну или возьми sha2.
>>750
Подождем еще 2 года пока ты не изобретешь API.
> Спасибо, анончики. Может тогда написать скрипты и отправлять индекс скрипта из списка?
Подождем еще 2 года пока ты не изобретешь API.