Tuesday, 31 March 2020
Wednesday, 10 July 2019
Tuesday, 9 July 2019
0xh0731
Видос с OffZone 2019, где я рассказал о том как вломиться в систему развлечений отеля и заказать соседу утреннюю побудку %)
Tuesday, 6 February 2018
Wednesday, 10 January 2018
Captcha CTF
Эта затея зрела 4 года и наконец-то выродилась в готовый контест.
Контест был проведен в рамках ZeroNights 2017 и на мой взгляд прошел удачно!
Решаем его тут: http://captcha.cf/register
Врайтап тут: Задачки с ZeroNights 2017: стань королем капчи
Контест был проведен в рамках ZeroNights 2017 и на мой взгляд прошел удачно!
Решаем его тут: http://captcha.cf/register
Врайтап тут: Задачки с ZeroNights 2017: стань королем капчи
Tuesday, 26 July 2016
Способ расширения XSS payload-а
Забавно расширял XSS payload в Moodle. XSS росла из поля с Skype идентификатором(CVE-2013-4341) и была ограничена 50 символами минус нагрузка на спец символы.
Поэтому был выбран следующий подход:
1) Исполняем код из title(имя и фамилия)
" onerror='eval(document.title.substr(1,20)'>
2) В title держим код, который eval содержимое description поля
3) В description держим полезную нагрузку и код ответственный за конспирацию(возвращение в нормальное состояние полей и title)
А еще там была CSRF и можно было устроить Sammy-2 =)
Поэтому был выбран следующий подход:
1) Исполняем код из title(имя и фамилия)
" onerror='eval(document.title.substr(1,20)'>
2) В title держим код, который eval содержимое description поля
3) В description держим полезную нагрузку и код ответственный за конспирацию(возвращение в нормальное состояние полей и title)
А еще там была CSRF и можно было устроить Sammy-2 =)
Friday, 22 July 2016
Коротко об уязвимостях браузерных игр
Когда видишь игру, всегда хочется выиграть. Особенно если это еще какая нибудь промо-акция, то руки так и чешутся. А если попытаться выиграть изнутри?
Была такая игра от РЖД(сделанная за миллионы рублей): надо было вагоны отмывать от граффити. Игра на Flash и все взаимодействие с сервером заключалось в отправке количества очков, времени игры, аккаунта в VK и чего то еще HTTP методом на сервак. Подменой параметров можно было переместиться на первую строчку. Это первое на что я смотрю при анализе игр:
- какое взаимодействие с сервером
- в каком виде уходят параметры
- что они значат
Добавь они шифрование\проверочную сумму и они отсекут большую часть исследователей, мало кому хочется копаться в swf и искать ключ\алгоритм.
Как еще они могут защититься? Например добавить дополнительное взаимодействие с игрой:
- выход на следующий раунд
- приобретение дополнительных опций
- контроль времени начала и промежуточные точек
Это конечно усложнит игру и приведет к большей нагрузке на сервер, но опять таки отсечет большую часть читеров. Вот неплохая статья по защите просто игра на хабре.
Второй момент на который стоит глянуть, так это возможность изменения переменных в программе. Скачиваем какой нибудь Cheat Engine. Выбираем нужный нам процесс, интересную нам переменную и ищем, ищем, модифицируем.
Как можно защититься:
- избыточное хранение важных переменных
- шифрование важных переменных
- все это вкупе с обфускацией кода
Опять таки, таким образом мы откинем большую часть исследователей.
Как добиться наибольшей стойкости? Перенести всю игровую механику на серверную сторону, за клиентом оставить только отображение. Но такой подход возможен только для игр без большого экшена. Такой способ оставляет только одну возможность для читеров -- написание AI для игры. Это не всегда возможно. И тут можно добавить дополнительные проверки: человеческое поведение, тесты Тьюринга.
Какие интересные кейсы взлома браузерных игр были у вас?
Была такая игра от РЖД(сделанная за миллионы рублей): надо было вагоны отмывать от граффити. Игра на Flash и все взаимодействие с сервером заключалось в отправке количества очков, времени игры, аккаунта в VK и чего то еще HTTP методом на сервак. Подменой параметров можно было переместиться на первую строчку. Это первое на что я смотрю при анализе игр:
- какое взаимодействие с сервером
- в каком виде уходят параметры
- что они значат
Добавь они шифрование\проверочную сумму и они отсекут большую часть исследователей, мало кому хочется копаться в swf и искать ключ\алгоритм.
Как еще они могут защититься? Например добавить дополнительное взаимодействие с игрой:
- выход на следующий раунд
- приобретение дополнительных опций
- контроль времени начала и промежуточные точек
Это конечно усложнит игру и приведет к большей нагрузке на сервер, но опять таки отсечет большую часть читеров. Вот неплохая статья по защите просто игра на хабре.
Второй момент на который стоит глянуть, так это возможность изменения переменных в программе. Скачиваем какой нибудь Cheat Engine. Выбираем нужный нам процесс, интересную нам переменную и ищем, ищем, модифицируем.
Как можно защититься:
- избыточное хранение важных переменных
- шифрование важных переменных
- все это вкупе с обфускацией кода
Опять таки, таким образом мы откинем большую часть исследователей.
Как добиться наибольшей стойкости? Перенести всю игровую механику на серверную сторону, за клиентом оставить только отображение. Но такой подход возможен только для игр без большого экшена. Такой способ оставляет только одну возможность для читеров -- написание AI для игры. Это не всегда возможно. И тут можно добавить дополнительные проверки: человеческое поведение, тесты Тьюринга.
Какие интересные кейсы взлома браузерных игр были у вас?
Thursday, 17 March 2016
Разбор решений задачки о 24 монетах
С неделю назад я опубликовал в ФБ задачку, и получил ряд решений. Вот о них и расскажу.
Вот условие:
Есть 12 золотых и 12 серебряных монет. Одна из монет фальшивая (неизвестно, золотая или серебряная). Настоящие золотые монеты весят одинаково; настоящие серебряные тоже, но неизвестно, какие тяжелее (золотые или серебряные). Фальшивая золотая монета легче настоящих золотых, а фальшивая серебряная тяжелее серебряных. По виду можно сказать, золотая монета или серебряная, но нельзя сказать, настоящая или фальшивая. Сколько нужно взвешиваний, чтобы заведомо найти фальшивую монету?
Весы чашечные коромысла.
Использую вот эти оценки, находим нижнюю границу шагов: 3 шага. Неизвестно, как много сложностей добавляет дополнительные ограничения и новшества. Так, что если удастся за 3 шага, то это вин!
1) Я эту задачку решил так.
Монеты для шага 1: делим монеты на 3 кучки, в каждой по 4 золотых и серебряных. Взвешиваем любые две, назовем их кучка 1 и кучка 2.
Интерпретация взвешивания шага 1: если кучки равны, то фальшивка в третей кучке (4 золотых и 4 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо в серебряных нижней чашки, то есть в этом случае мы можем сформировать кучку из 8 монет(4 золотых и 4 серебряных), где гарантированно будет фальшивка.
Монеты для шага 2: Берем нашу кучку с фальшивкой. Делим ее на три кучки: 2 золотых и серебряная, 2 золотых и серебряная и 2 серебряных. Взвешиваем кучку 1 и кучку 2.
Интерпретация взвешивания шага 2: если кучки равны, то фальшивка в третей кучке (2 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо серебряная нижней чашки, то есть в этом случае мы можем сформировать кучку из 3 монет(2 золотых и серебряная), где гарантированно будет фальшивка.
Монеты для шага 3: если у нас после второго шага осталась кучка из двух серебряных, то все просто, просто будут две кучки по одной монете. Если у нас кучка из трех монет, (2 золотых и серебряная), то будем взвешивать по золотой монете, а серебряную отложим.
Интерпретация взвешивания шага 3: если взвешиваем серебро, то фальшивка в нижней чашке. Если взвешиваем золото и чашки равны, то фальшивка из серебра, иначе фальшивка в верхней чашке.
2) Сергей Фролов предложил следующий алгоритм:
Монеты для шага 1: делим монеты на 3 кучки, в каждой по 4 золотых и серебряных. Взвешиваем любые две, назовем их кучка 1 и кучка 2.
Интерпретация взвешивания шага 1: если кучки равны, то фальшивка в третей кучке (4 золотых и 4 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо в серебряных нижней чашки, то есть в этом случае мы можем сформировать кучку из 8 монет(4 золотых и 4 серебряных), где гарантированно будет фальшивка.
Монеты для шага 2: Берем нашу кучку с фальшивкой. Делим ее на две кучки: 3 золотых и 3 серебряных и 1 золотая и серебряная. Также выделяем кучку из 3 золотых и 3 серебряных, которые заведомо настоящие. Взвешиваем кучку 1 и кучку 3.
Интерпретация взвешивания шага 2: если кучки равны, то фальшивка в второй кучке
(золотая и серебряная). Если не равны, то фальшивка либо в золотых монетах первой кучки, если чашка вверху, либо в серебряных первой кучки, если чашка внизу.
Монеты для шага 3: если у нас после второго шага осталась кучка из двух монет, то просто взвесим одну из монет с заведомо не фальшивой монетой того же материала. Если у нас кучка из трех монет, то будем взвешивать две монеты из этой кучки.
Вот условие:
Есть 12 золотых и 12 серебряных монет. Одна из монет фальшивая (неизвестно, золотая или серебряная). Настоящие золотые монеты весят одинаково; настоящие серебряные тоже, но неизвестно, какие тяжелее (золотые или серебряные). Фальшивая золотая монета легче настоящих золотых, а фальшивая серебряная тяжелее серебряных. По виду можно сказать, золотая монета или серебряная, но нельзя сказать, настоящая или фальшивая. Сколько нужно взвешиваний, чтобы заведомо найти фальшивую монету?
Весы чашечные коромысла.
1) Я эту задачку решил так.
Монеты для шага 1: делим монеты на 3 кучки, в каждой по 4 золотых и серебряных. Взвешиваем любые две, назовем их кучка 1 и кучка 2.
Интерпретация взвешивания шага 1: если кучки равны, то фальшивка в третей кучке (4 золотых и 4 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо в серебряных нижней чашки, то есть в этом случае мы можем сформировать кучку из 8 монет(4 золотых и 4 серебряных), где гарантированно будет фальшивка.
Монеты для шага 2: Берем нашу кучку с фальшивкой. Делим ее на три кучки: 2 золотых и серебряная, 2 золотых и серебряная и 2 серебряных. Взвешиваем кучку 1 и кучку 2.
Интерпретация взвешивания шага 2: если кучки равны, то фальшивка в третей кучке (2 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо серебряная нижней чашки, то есть в этом случае мы можем сформировать кучку из 3 монет(2 золотых и серебряная), где гарантированно будет фальшивка.
Монеты для шага 3: если у нас после второго шага осталась кучка из двух серебряных, то все просто, просто будут две кучки по одной монете. Если у нас кучка из трех монет, (2 золотых и серебряная), то будем взвешивать по золотой монете, а серебряную отложим.
Интерпретация взвешивания шага 3: если взвешиваем серебро, то фальшивка в нижней чашке. Если взвешиваем золото и чашки равны, то фальшивка из серебра, иначе фальшивка в верхней чашке.
2) Сергей Фролов предложил следующий алгоритм:
Монеты для шага 1: делим монеты на 3 кучки, в каждой по 4 золотых и серебряных. Взвешиваем любые две, назовем их кучка 1 и кучка 2.
Интерпретация взвешивания шага 1: если кучки равны, то фальшивка в третей кучке (4 золотых и 4 серебряных). Если не равны, то фальшивка либо в золотых монетах верхней чашки, либо в серебряных нижней чашки, то есть в этом случае мы можем сформировать кучку из 8 монет(4 золотых и 4 серебряных), где гарантированно будет фальшивка.
Монеты для шага 2: Берем нашу кучку с фальшивкой. Делим ее на две кучки: 3 золотых и 3 серебряных и 1 золотая и серебряная. Также выделяем кучку из 3 золотых и 3 серебряных, которые заведомо настоящие. Взвешиваем кучку 1 и кучку 3.
Интерпретация взвешивания шага 2: если кучки равны, то фальшивка в второй кучке
(золотая и серебряная). Если не равны, то фальшивка либо в золотых монетах первой кучки, если чашка вверху, либо в серебряных первой кучки, если чашка внизу.
Монеты для шага 3: если у нас после второго шага осталась кучка из двух монет, то просто взвесим одну из монет с заведомо не фальшивой монетой того же материала. Если у нас кучка из трех монет, то будем взвешивать две монеты из этой кучки.
Интерпретация взвешивания шага 3: в первом случае, при равенстве чашек, то фальшивкой будет оставшиеся монета, при неравенстве, ее можно будет определить исходя из металла, который мы взвешивали. Во втором случае, если чашки равны, то фальшивкой будет оставшиеся монета, при неравенстве, ее можно будет определить исходя из металла, который мы взвешивали.
3) Способ предложил Руслан Батыров.
Поделим монеты на 12 кучек, по одной золотой и серебряной. Далее решаем задачу, следующим образом:

В качестве ответа мы получим, кучку и ее маркировку: Л или Т. Если Л, то фальшивка золотая, если Т, то серебряная.
4) Способ предложил Руслан Батыров.
Поделим монеты на 12 кучек, по одной золотой и серебряной. Теперь решаем задачу методом Дайсона.
В качестве ответа мы получим, кучку и ее маркировку: легкая или тяжелая. Если легкая, то фальшивка золотая, если тяжелая, то серебряная.
Дайсона, конечно метод универсальный, но понять идею лежащую за ним не легко. Насколько я понял, он не перекликается ни с одним вышеперечисленным методом.
Есть ли еще способы решить эту задачку? Какой из способов вам кажется наиболее понятным?
3) Способ предложил Руслан Батыров.
Поделим монеты на 12 кучек, по одной золотой и серебряной. Далее решаем задачу, следующим образом:

В качестве ответа мы получим, кучку и ее маркировку: Л или Т. Если Л, то фальшивка золотая, если Т, то серебряная.
4) Способ предложил Руслан Батыров.
Поделим монеты на 12 кучек, по одной золотой и серебряной. Теперь решаем задачу методом Дайсона.
В качестве ответа мы получим, кучку и ее маркировку: легкая или тяжелая. Если легкая, то фальшивка золотая, если тяжелая, то серебряная.
Дайсона, конечно метод универсальный, но понять идею лежащую за ним не легко. Насколько я понял, он не перекликается ни с одним вышеперечисленным методом.
Есть ли еще способы решить эту задачку? Какой из способов вам кажется наиболее понятным?
Wednesday, 9 March 2016
Котормочу бот!
Накидал тут быстренько бота для Telegram для перевода с кыргызского на русский или наоборот. Встречайте Котормочу(@kotormochubot)!!!
Реализация простейшая, переводы беру с http://tili.kg. Хотел использовать Google Translate API, но оказалось, что он полностью платный. Подсказывают, что можно посмотреть в сторону PhantomJS и таким образом использовать веб-версию переводчик...или может кто нибудь захочет проспонсировать API %)
А может быть tili.kg захочет похостить сервис и дать прямой API, а то на GAE маленькие квоты, а писать распределенный сервис и искать словарь немного лень %))
Кстати, исходники тут: https://github.com/frydaykg/kotormochu-bot
Может кто-то захочет что-то исправить или улучшить. Жду форков и пулл реквестов. Или хотя бы критики и пожеланий)
Реализация простейшая, переводы беру с http://tili.kg. Хотел использовать Google Translate API, но оказалось, что он полностью платный. Подсказывают, что можно посмотреть в сторону PhantomJS и таким образом использовать веб-версию переводчик...или может кто нибудь захочет проспонсировать API %)
А может быть tili.kg захочет похостить сервис и дать прямой API, а то на GAE маленькие квоты, а писать распределенный сервис и искать словарь немного лень %))
Кстати, исходники тут: https://github.com/frydaykg/kotormochu-bot
Может кто-то захочет что-то исправить или улучшить. Жду форков и пулл реквестов. Или хотя бы критики и пожеланий)
Monday, 1 February 2016
Итог нескольких пентестов
Вот несколько интересных итогов после нескольких пентестов:
1) Частый сценарий не пометка капчи пройденной для сессии после ее фактического прохождения. Грешат все поголовно.
2) Начал писать свой SqlMap, слил им 2 базы, вовремя остановился писать.
3) Дописал и начал использовать data-receiver. Правда большинство спасают дефолтные настройки http_only для сессии.
4) Наблюдал зоопарк шеллов и мэилеров на одном из ресурсов.
5) Наблюдал шаланды полныекефали открытых паролей и не соленных хэшей. Меняю все пароли и включаю двухфакторку.
6) Нашел неописанный нигде эксплоит для старого или некорректно настроенного плагина(как в моем случае) для tinyMCE. Может его все таки опубликуют на Exploit DB.
Залил с помощью него шелл. Дальше ничего интересного =)
7) Стал добавлять в рекомендации: правильно настраивать robots.txt, иначе энтропия падает.
8) Видел "интересные" решения с плейсхолдерами в виде названий переменных, которые задаются в админке. Оригинальный способ для раскрытия инфы.
1) Частый сценарий не пометка капчи пройденной для сессии после ее фактического прохождения. Грешат все поголовно.
2) Начал писать свой SqlMap, слил им 2 базы, вовремя остановился писать.
3) Дописал и начал использовать data-receiver. Правда большинство спасают дефолтные настройки http_only для сессии.
4) Наблюдал зоопарк шеллов и мэилеров на одном из ресурсов.
5) Наблюдал шаланды полные
6) Нашел неописанный нигде эксплоит для старого или некорректно настроенного плагина(как в моем случае) для tinyMCE. Может его все таки опубликуют на Exploit DB.
# Exploit Title: MCFileManager Plugin for TinyMCE 3.0.9.2 zip archive upload vulnerability# Google Dork: inurl:/tiny_mce/plugins/filemanager/# Date: 04.11.2015# Exploit Author: Artem Bachevsky# Contact: fryday [dot] kg [at] gmail [dot] com# Vendor Homepage: http://www.tinymce.com/develop/changelog/?type=phpmcfilemanager
# Version: applicable to <= 3.0.9.2 or with misconfigured higher versions
I found a vulnerability in TinyMCE filemanager plugin. It allows to upload executable code(e.g. php file) to server. You can exploit it like that: 1. zip your shell file 2. upload your zip file(filemanager allows to upload zip) 3. unzip your archive 4. PROFIT
Certainly there should be some errors in server settings to expoit it. In higher versions exploit possible with incorrect plugin configuration.Оставлю и тут. Мое прощение за мой английский, ну и за русский тоже %)
Залил с помощью него шелл. Дальше ничего интересного =)
7) Стал добавлять в рекомендации: правильно настраивать robots.txt, иначе энтропия падает.
8) Видел "интересные" решения с плейсхолдерами в виде названий переменных, которые задаются в админке. Оригинальный способ для раскрытия инфы.
Friday, 29 January 2016
Эти неприятные upload-ы
Всем конечно известно, что нельзя давать загружать пользователю исполняемые скрипты(php, shtml итд) к себе на сайт, а если это требуется то запрещать исполнение в папке их хранения. Но не все это соблюдают.
Ребята, сайт которых я просматривал позволяли загружать к себе что хочешь. Правда *.php до места не догружалось, а все остальное не умело исполняться.
Выручил в этой ситуации html файл + и не проставленный флаг http only для куки сессии. Файлы по умолчанию открываются в браузере и в текущем домене. Загружаем страничку с примером кода с data-receiver. В итоге доступ к пользователю с привилегиями!
Как обезопасится:
1) http only флаг для кук сессии
2) к линкам на прикрепленные файлы добавлять атрибут download.
Например:
<a href='foo.html' download>link</a>
3) А для не обладателей HTML5 совместимых браузеров и рукастых пользователей(ведь всегда можно скопировать URL и открыть в новом табе) следует добавлять следующий хедер Content-Disposition: attachment;
Это вроде можно настроить в .htaccess для папок с загруженными файлами.
Опять таки меры 2 и 3 можно применить только для некоторых расширений файлов.
[update]
Вот рекомендации OWASP поэтому поводу
https://www.owasp.org/index.php/Unrestricted_File_Upload
Ребята, сайт которых я просматривал позволяли загружать к себе что хочешь. Правда *.php до места не догружалось, а все остальное не умело исполняться.
Выручил в этой ситуации html файл + и не проставленный флаг http only для куки сессии. Файлы по умолчанию открываются в браузере и в текущем домене. Загружаем страничку с примером кода с data-receiver. В итоге доступ к пользователю с привилегиями!
Как обезопасится:
1) http only флаг для кук сессии
2) к линкам на прикрепленные файлы добавлять атрибут download.
Например:
<a href='foo.html' download>link</a>
3) А для не обладателей HTML5 совместимых браузеров и рукастых пользователей(ведь всегда можно скопировать URL и открыть в новом табе) следует добавлять следующий хедер Content-Disposition: attachment;
Это вроде можно настроить в .htaccess для папок с загруженными файлами.
Опять таки меры 2 и 3 можно применить только для некоторых расширений файлов.
[update]
Вот рекомендации OWASP поэтому поводу
https://www.owasp.org/index.php/Unrestricted_File_Upload
Sunday, 29 November 2015
SSRF
Нашел SSRF на http://regex.info/exif.cgi, причем искал абсолютно другую уязвимость. Пытался найти XSS через EXIF ну или SSRF через EXIF, а вышло вот как =)
> gopher://localhost:22
gopher://localhost:22 is a web page, not an image.
> gopher://localhost:9896
couldn't fetch gopher://localhost:9896: [500 Can't connect to localhost:9896]
Существует вообщем там возможность посмотреть exif данные своей картинки. Можно загрузить, а можно дать ссылку на изображение. Картинка судя по всему тянется LWP.
Например:
> file:/etc/passwd
file:/etc/passwd doesn't seem to be an image file: Unknown file type
> file:/bin/bash
Описание EXE файла с размером, CPU и архитектурой.
gopher://localhost:22 is a web page, not an image.
> gopher://localhost:9896
couldn't fetch gopher://localhost:9896: [500 Can't connect to localhost:9896]
То есть можем допустим просканировать внутреннюю сеть на предмет открытых портов. Кстати изнутри их на 2 больше чем снаружи.
Или затестить мой проект for fun eggplant-tag, правда не совсем по назначению, но чем не способ) Вот тут можно его попробовать: http://eggplant-tag.appspot.com/
Или вот результат для вот этого тега:
2015-11-28 13:35:12.451140
Remote address: 67.221.35.252
Host: eggplant-tag.appspot.com
User-Agent: Jeffrey's Exif Viewer (http://regex.info/exif)
X-Appengine-City: san jose
X-Appengine-Citylatlong: 37.339386,-121.894955
X-Appengine-Country: US
X-Appengine-Region: ca
Или затестить мой проект for fun eggplant-tag, правда не совсем по назначению, но чем не способ) Вот тут можно его попробовать: http://eggplant-tag.appspot.com/
Или вот результат для вот этого тега:
2015-11-28 13:35:12.451140
Remote address: 67.221.35.252
Host: eggplant-tag.appspot.com
User-Agent: Jeffrey's Exif Viewer (http://regex.info/exif)
X-Appengine-City: san jose
X-Appengine-Citylatlong: 37.339386,-121.894955
X-Appengine-Country: US
X-Appengine-Region: ca
Говорят, что gopher-ом можно формировать любые TCP пакеты, но я так не умею. И что то пока не до этого =).
Ну а вообще можно использовать все протоколы, которые поддерживает LWP через GET.
Если кто умеет такое использовать -- расскажите. Уязвимость мы с автором вроде пофиксили, в два этапа...но может, что еще открытым осталось.
Thursday, 22 October 2015
Data receiver 2015
Иногда требуется получить какие-то с веб страницы, когда с ней взаимодействует человек. Например, если это XSS. А еще удобнее получить эти данные на почту.
Для решения этой задачи несколько лет назад я написал утилитку, которую захостил на Google App Engine. Пришло время делится. Утилитка немножко приведена в порядок перед подачей на стол =)
Как пользоваться:
Для решения этой задачи несколько лет назад я написал утилитку, которую захостил на Google App Engine. Пришло время делится. Утилитка немножко приведена в порядок перед подачей на стол =)
Как пользоваться:
1) Тянем себе репозиторий https://github.com/frydaykg/data-receiver;
2) Создаем себе application на https://appengine.google.com/ или развертываем подходящую среду, где нибудь еще;
3) Меняем файл app.yaml и settings.py под себя;
4) Аплоадим приложение;
5) Используем приложение;
6) PROFIT!!!
Что делать если приложение не устраивает!? Вариантов несколько:
1) Клонируем репозиторий, коммитим нужный функционал, кидаем пулл реквесты;
2) Пишем свое приложение, разочаровываемся, возвращаемся к пункту 1;
3) Выпиваем яду и не возвращаемся =)
Что по хорошему можно добавить:
1) Возможность расширения количества почт с которых идет отправка;
2) Возможность персистить данные в базе и потом просматривать в своем личном кабинете.
А как пользоваться? Читаем все в src\default.html или README!
А как пользоваться? Читаем все в src\default.html или README!
Tuesday, 6 October 2015
Tuesday, 11 August 2015
Почему надо делиться знаниями
В школе мне не нравилось делиться знаниями. Казалось, что обладая локально-уникальными знаниями, ты становишься этаким Гарри Поттером или Нео, которому все можно.
Отчасти это так и иногда это даже хорошо, но обычно до определенного этапа, на котором ты замораживаешься и все. Все, что ты дальше делаешь, так это торгуешь своей кучкой знаний. никакого творческого роста, зато мы звёзды!
Благо мое мировоззрение изменилось, и теперь передавая свои знания, я могу быстрее находить себе подмогу, замену для повышения своей позиции, получать новый опыт во время дележки и удовлетворение от того, что делаешь мир чуточку лучше %) Правда все это не учитывает случаев вселенской несправедливости, но куда без нее.
Поэтому держите, хороший обобщенный материал по масштабируемым и распределенным системам:
http://www.aosabook.org/en/distsys.html
По крайней мере дальше понятно куда копать и что использовать :) Приятного прочтения
Благо мое мировоззрение изменилось, и теперь передавая свои знания, я могу быстрее находить себе подмогу, замену для повышения своей позиции, получать новый опыт во время дележки и удовлетворение от того, что делаешь мир чуточку лучше %) Правда все это не учитывает случаев вселенской несправедливости, но куда без нее.
Поэтому держите, хороший обобщенный материал по масштабируемым и распределенным системам:
http://www.aosabook.org/en/distsys.html
По крайней мере дальше понятно куда копать и что использовать :) Приятного прочтения
Monday, 27 July 2015
Friday, 17 July 2015
XSS challenge
Прикольная браузерная игра от Google. Держите https://xss-game.appspot.com/
Прохождение занимает минут 40, в последнем самое сложное было:
Хоть квест и простенький, но все равно пройти стоит :)
Как будет время, напишу о кризисе кыргызской веб разработки и о том как они множат баги и соорудили себе хрень с кучей хранимых XSS.
Прохождение занимает минут 40, в последнем самое сложное было:
Понять, что gist возвращает raw файл как plain text. И что то там по MIME политике не работает.
Хоть квест и простенький, но все равно пройти стоит :)
Как будет время, напишу о кризисе кыргызской веб разработки и о том как они множат баги и соорудили себе хрень с кучей хранимых XSS.
Wednesday, 24 June 2015
Баунти: райское наслаждение или баг хантинг
Сейчас развелось очень много программ по поощрению поиска уязвимостей за которые выплачиваются компенсации. Но для получения профита не обязательно находить уязвимость и не обязательно профит будет деньгами. Например, как то я отписал в Beeline, что неплохо было бы позволять использовать платежные гейты банков при нулевом балансе, а то выходила странная фигня, вроде можешь пользоваться сайтом билайна, начинаешь оплату картой и встаешь на этапе выбора способа верификации оплаты. Через какое-то время предложенную фичу ввели, я получил возможность поплнять свой счет в любом месте с GPRS. А кто то в билайне может получил премия за увеличение количества платежей %))
Это был пример нормального отношения. А бывают ребята, которым пишешь о уязвимостях на их ресурсах, а в ответ -- тишина. Возможно дело в том, что письмо приходит к низкоквалифицированным разгребателям почты и оно уходит с пометкой "какая-то фигня". Наверное надо в таких случаях стоит писать не только в info@company.com, а еще и в cto@company.com, и может будет результат =) И высшим наслаждением в таких случаях было бы исправление уязвимости, а не 300 звездочек, новый уровень в Candy Rush или 100$ на счет.
Ищите, пишите и получайте удовольствие!
Tuesday, 23 June 2015
Google summer of code
Есть такая штука -- Google summer of code. Проект от гугл в рамках, которого студенты пишут функционал опен-сурс проектов под надзором менторов за деньги(5000$ за 3 месяца).
Проекты попадаются очень интересные. Правда я за свою студенческую жизнь ни разу не прошел со своим proposal туда, а подавал я в следующие проекты SimpleCV и OpenCV , видимо зацепило меня в свое время компьютерное зрение. Опыт был для меня уникальный, писать какое-то предложение, на английском, обсуждать его с кем-то...интересно, но судя по результатам -- я не справился. Забавно, что одного из менторов, я потом нашел в ретвите кого-то из друзей. Фолловьте, попадаются интересные вещи у нее.
А кто то из читателей участвовал? Кто проходил? Как все прошло?
Проекты попадаются очень интересные. Правда я за свою студенческую жизнь ни разу не прошел со своим proposal туда, а подавал я в следующие проекты SimpleCV и OpenCV , видимо зацепило меня в свое время компьютерное зрение. Опыт был для меня уникальный, писать какое-то предложение, на английском, обсуждать его с кем-то...интересно, но судя по результатам -- я не справился. Забавно, что одного из менторов, я потом нашел в ретвите кого-то из друзей. Фолловьте, попадаются интересные вещи у нее.
А кто то из читателей участвовал? Кто проходил? Как все прошло?
Friday, 19 June 2015
Еще пара прОмок от Aviasales
Как то я писал о том как не надо устраивать конкурсы. Думаю, что обоюдные выводы были сделаны. А вот некоторое время назад, ленту заполонили репосты вот такого вида
Ну вы их видели =) Ну и я по привычке решил глянуть, что там стоит за конкурсом.
Логика дизайнеров конкурса была такая:
1) Проходит тест
2) Получает результат
3) Предлагается расшарить результат
4) После выбора социальной сети открывается окошко для шаринга
5) По закрытию окошка, выпадает штука, где просят вбить почту, для участия в конкурсе
Пункт 4 и способы учета и накручивания ссылок мы проходили в прошлый раз. А пункт 5 выглядел новым и необычным. Исследуем!
Формируем curl запрос
Узнаем, что вариантов ответа не очень много: все ок, такая почта уже была, это не корректная почта. И при этом не требуется никаких дополнительных заголовков! Красота!
Участвующие в конкурсе почты где-то хранятся и для каждой отсылается письмо. А что если поменять регистр первого символа?!(gmail не учитывает регистр) Все ок, письмо пришло. А что если вставить точку разделитель?!(gmail и их игнорирует) Все ок!!! Кайфуем!
То есть для одной почты длиной N(для простоты возьмем вариант только с буквами), мы можем cгенерировать 2^(2*N - 1) вариантов почты. Что много! Потенциально можно забить их почтовый пул и потенциально выиграть их всех))
Потом пошли фиксы. Стали учитывать регистр, точки, сделали обязательными какие-то куки. Но все закрыть не смогли, оставлю это на сладкое =)
Так что ребята, проектируйте тщательнее или заказывайте у меня аудит ваших промо-акций %)
P.S. Ну а еще такая штука была в соседней промке с Санкт-Петербургом.
Участвующие в конкурсе почты где-то хранятся и для каждой отсылается письмо. А что если поменять регистр первого символа?!(gmail не учитывает регистр) Все ок, письмо пришло. А что если вставить точку разделитель?!(gmail и их игнорирует) Все ок!!! Кайфуем!
То есть для одной почты длиной N(для простоты возьмем вариант только с буквами), мы можем cгенерировать 2^(2*N - 1) вариантов почты. Что много! Потенциально можно забить их почтовый пул и потенциально выиграть их всех))
Потом пошли фиксы. Стали учитывать регистр, точки, сделали обязательными какие-то куки. Но все закрыть не смогли, оставлю это на сладкое =)
Так что ребята, проектируйте тщательнее или заказывайте у меня аудит ваших промо-акций %)
P.S. Ну а еще такая штука была в соседней промке с Санкт-Петербургом.
Subscribe to:
Posts (Atom)












