o1kFeM31D7xhhNc5RYXhkHcVwbHC2fs
HNg5Sjr1VZJG7rP8tyoKkMn1lhx
BwzYhfsRXVhaW0VjGAvxDnXQcwf4
5bL0bFuhzelG717i4Ro5lC3tW6S0J
6l4PJurOevEnTfrro1s86pcjjD34Tg
qPtYDEdKezxPz5Wka6ArVXGwV5O7mk
z3CQbWOKfS0qZdenEz8oHx8BuT6ikq
n099UQ1tR9WTtMtj76Bwxhr80Av
UIyIlwY0WsXsx2iopx6FQaWrCnVB
l0bVcHMsnm5yabR2A9vFpdDoOYb4
6cE9eAnVtk7TydijbqwhJPQVZ6wy
ympjDY29lZ20iUaOCJVfDaJeqlSyH
S2gO1jrfimMXzEZQK8oismspl
9vGd7A3n57bHAoFYGdcQBIWVXDiAg
cmVdhU3X8uzUXh8DMK8XQkx3
siVDJBJLjjRVB2XoDKXVQ4hv7
LunQBhUmMCnKQc0uBbMnT5zAwZl
Bg5urzfvrksRo9r4HXnx9sYEUXdub5F
mIyEfVZVH1NaBiJ1mpNPWqbGuH30mO
pB0CBb7JE4HR1xLLZQzIZSV5Fm
Хабр Geektimes Тостер Мой круг Фрилансим
Мегапосты:

Как я однажды взломал онлайн-казино

  • Разработка веб-сайтов,
  • Информационная безопасность,
  • Спортивное программирование,
  • Тестирование IT-систем
    Вдохновившись рассказом Chikey о том, как он вновь «сломал интернет» Егор прекрати уже ломать все подряд, займись делом каким-нибудь, решил поведать об одной истории с довольно известным за рекой онлайн-казино. Имя этой «организации» не называю, т.к. процентов на 50 уверен, что или совсем не пофиксили, или сделали кривее, чем было до этого.

    История очень похожа на взлом Егора, за исключением того, что это не совсем рэйс, вернее, совсем не race condition в чистом его виде. Как оно будет полностью не знаю, я больше практик, чем теоретик. Назовем его «conditional race condition» — хоть и масло масляное, но суть отражает верно.

    Как-то вечером, домашние уснули, по ящику одна муть, наши опять проигрывают делать было особенно нечего, на опенсорс решил на сегодня забить, захотелось чего-нибудь сломать. А что ломать (когда Егор уже все сломал), как не банк какой-нибудь или казино (эго, необходимость иногда почувствовать себя крутым парнем, все дела в общем). Это было одно из первых онлайн-казино, которое мне тогда приглянулось в поиске.

    Не секрет, что экономят на программистах, тестировщиках и т.д. все или почти все. Я делаю временами аудиты, да и по роду деятельности такого иногда насмотришься, что волосы дыбом. Но тут-то казино! С возможностью вывода (выигранных) вечнозеленых и т.д. Т.е. контора должна вроде соответствовать.

    Завел себе аккаунт, и поехали…

    Собственно взлом


    Как оказалось — здесь тоже сэкономили изрядно.

    Сначала решил набросить себе немного «виртуальных» денег. Виртуальная валюта там не выводится (чисто поиграть — потренироваться). Можно было через paypal (10ct = 10V$), можно раз в день через капчу (20V$).

    При беглом просмотре страницы «покупки» (загрузив ее несколько раз) обнаружил там токен, привязанный ко времени (заметен инкремент по модулю 180), отправляющийся с капчей после нажатия «Order». Вероятно в базу для моего аккаунта писался еще и datetime времени «покупки» (чтоб значит только раз в сутки), но нам оно сейчас без надобности.

    Я хотел сначала попробовать чистый race (я не настолько глуп чтобы поверить про 3-и минуты, ну или 1.5 минуты если используют формулу со смещением), но у меня были сомнения, что нет даже нескольких миллисекунд, т.е. с высокой долей вероятности этот токен скорее всего тоже помечался как использованный в DB, чтобы значит совсем «до завтра» (кстати, так оно и оказалось впоследствии).

    В результате решил начать пробовать сразу со своего «условного рэйс». Предположим, что токен пишется в базу int-ом (типа unixtime — т.е. целым числом), ведь они исходят из того, что следующий токен выдадут только через 3 минуты (хотя обычно оно все-таки с каким либо смещением, чтобы даже на границе срок действия его уже истек). Т.е. думаю имеем что-то вида:

    create table user_order (usrid int, token bigint, lasttoken bigint, lastorder datetime, ...)
    

    Тут немного техники: я не люблю штуки вида Greasemonkey и ко, хоть и юзаю иногда. Но не люблю (мало что ли таких как Егор). Много можно сделать и из dev консоли firefox-а, но так, по мелочи. Я так тоже довольно редко «работаю». У меня есть собственный (ну почти) плагин, разворачивающий «полноценный» интерпретор тикля (tcl) с api к javascript текущего окна. Типа greasemonkey, только на тикле. Удобно жуть.

    В общем, тикль-джиэсный скрипт для «взлома» выглядел следующим образом:

    set tok [js form.ordertoken.value]
    set i 0
    set cntr 0
    time {
      ## чтобы не плодить формы - делаем максимум пять штук:
      elm duplicate -overwrite form[expr $i % 5] form
      ## делаем токен "float" и сабмитим форму в таргет (0-4) ...
      js {
        var f = form[expr $i % 5];
        f.target = '_tmp_win_[expr $i % 5]';
        f.ordertoken.value = f.ordertoken.value + '.' + '[format %05d [incr cntr]]';
        f.submit();
      }
      ## отработать события, контекст свич и задержка...
      update; after 5
      incr i
    } 10
    

    Т.е. для каждой новой сдублированной формы делаем значение ordertoken в виде числа с плавающей точкой.
    Имеем следующее в javascript:

       ...
       var f = form0;
       f.target = '_tmp_win_0';
       f.ordertoken.value = f.ordertoken.value + '.' + '00001';
       f.submit();
       ...
       var f = form1;
       f.target = '_tmp_win_1';
       f.ordertoken.value = f.ordertoken.value + '.' + '00002';
       f.submit();
       ...
    

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

    Следующий SQL-statement будет легально выполнен, если имеем автоконвертирование и float режется до (big)int без ошибки переполнения, а условие будет положительное (т.к. сравнение будет производится во float):

    UPDATE user_order set lasttoken = 1432254060.00007, lastorder = now(), vmoney = vmoney + 20
    WHERE ... AND lasttoken != 1432254060.00007 AND ...
    

    Что там они проверяли, affected rows или просто if begin… end в транзакции, и SQL ли это вообще, я не в курсе но в очередной раз исполнив скрипт, я стал таки «виртуальным» миллионером! Ну то есть time casino-virt-order 50000.
    Пояснение под спойлером
    Грубо говоря, где-то сохраняется целое число T1 (как int или bigint) например 180.
    А затем сравнивается с числом T2, которое передается извне и меняется нами на число с плавающей точкой (допустим float) 180.01.
    Если сравнение T1 с T2 происходит целочисленно (в int) то они равны, если как float (что случается если не уследить в некоторых алгоритмах или системах или явно не указать) — то они разные!
    int(180) = int(180.01)
    float(180) != float(180.01)
    
    После сравнения — токен T2 легальный, и что не менее важно токен T2 не был еще использован — происходит увеличение остатка денег (платеж состоялся), а T2 переписывает T1 (токен использован), при этом он обрезается до целого если нет precision overflow. т.е. снова 180. И стандартным уже рэйс все повторяется снова и снова. Пока токен не устареет ну или пока время не выйдет…
    Постоянное же увеличение float-токена (как у меня в скрипте), позволяет «предотвратить» ситуацию, когда токен хранится все-таки не целочисленно, но проверка его в формуле «легальности» токена осуществляется все-же целочисленно, а проверка «токен изпользован» по какой-либо причине как float.

    Как вы думаете, как долго сайт продержался с реальным платежом?! День (да и то потому, что уже баиньки хотелось очень).
    Там, конечно, не было time casino-real-order 50000, да и думаю, что такое они заметили бы на раз-два. Ну какой-то же мониторинг средств (читерства и т.д.) должен все-таки быть. Хоть и с десятью тысячами клиентов. Но 50 по 20 я таки исполнил разок (т.е. заплатив «всего» 20 вечнорастущих, т.к. на тот момент это была минимально-возможная оплата).

    Справедливости ради, надо сказать, что я естественно закрыл этот аккаунт без вывода средств, вернув только свои вложеные деньги.

    Мораль


    Тут вроде и обсуждать нечего. Единственное, что могу добавить — чистый race condition там не работал, я проверял (второй параллельный вызов выдавал «уже использован»). Но судя по «профессионализму» ребят — это была скорее защита от дурака (типа F5 после реквеста и т.д.).

    Интересен другой момент, когда токен устаревал (+ 180), оно уже не работало по причине проверки уже даты последнего «платежа» типа lastorder < now() + '1 day'. Но почему-то не с «тем же самым» токеном. Думаю, что болячка та не одна была.
    Хотя стоит добавить, что токен совершенно честно помечался как использованный (т. е. transaction с table lock или уровень изоляции типа serializable). Новый токен самому сгенерировать тоже не представляется возможным (вероятно должен быть в их базе для аккаунта). А может как раз выдача нового токена зависела от lastorder.

    И да, капча видимо была привязана таким же образом к токену + чего-то еще в форме. Или для нее работал «race», оно мне без надобности было искать.

    Кстати, все остальное, от SQL-Injection до разных трюков с известными мне эксплойтами на той платформе выглядели довольно солидно, но как-то все-таки полупрофессионально что ли, т. е. придраться все же было к чему (некоторые вещи не делаются так уже лет дцать как).

    Да, еще кое-что: это же казино, т.е. человек не стесненный средствами имеет какое-никакое преимущество перед соперниками, при прочих равных. Как минимум может позволить себе чаще рисковать. В общем, если бы я там играл, мог бы и «почти» легально выигрывать кучу денег у других клиентов этого казино, «обманывая» при этом саму компанию на гораздо меньшую сумму. Плюс были бы затронуты как минимум интересы клиентов этой площадки по отбору средств у населения. Я не думаю, что казино этого не понимало, когда пытались разобраться со мной.

    «Разборки» со мной — злодейским хакером


    Даже рассказывать не хочу.

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

    Результат:
    • реальная попытка сделать из меня злостного вскрывателя казинов;
    • через некоторое время уже «просьбы» сказать «как» (т.е. о чудо, они даже по accesslog не нашли!). Просьбы чередуются с угрозами (незамедлительно предоставить все, а мы подумаем что с тобой делать).
    • после совсем откровенного намека «работа должна быть оплачена», попытка сделать меня шантажистом (я уже друга адвоката думал подключать);
    • в результате вежливо послал их подальше, снова обязавшись не использовать во вред и игнорируя в дальнейшем все попытки тупого «прессинга».

    Что смешно, после закрытия аккаунта уже с реальными деньгами (предварительно вывел только свои 20 евро) в течении некоторого времени еще получал от них письма, мол, «заберите деньги»… Хотел сперва им ответить — потратьте на благотворительность, но они все же не мои. Так и лежат они, вероятно, там…

    Люди, не экономьте все же на профи. Мы, профи, стоим тех денег, которые нам платят.

    [UPD#1] Тут моралисты понабежали, ну типа «Они вас не просили проверять их сайт. Давайте я вам тоже чего-нибудь хорошее сделаю, и денег попрошу» или это «Вымогательство» и т.д.
    Отвечу сразу всем остальным желающим постебаться за мою совесть:
    Скрытый текст
    • давайте я вам тогда денег не дам (да имею права), но при этом скажу — «это что-нибудь хорошее, однозначно оставь все-равно, без денег и я на тебя все равно в суд подам».
    • мое личное отношение к «клиенту» будет зависеть от него самого, как минимум от тона, каким это будет сказано.
    • я потратил кучу времени на написание поста, и не имею ни малейшего желания выслушивать нытье очередного «тролля» по поводу моих моральных качеств, за которые могут говорить только люди, действительно меня знающие.
    • сайты например «про кошечек» социальных проектов или из оперы «опенсорс» всегда обслуживаются вне очереди, совершенно с другим отношением и абсолютно бесплатно.
      Но не люди зарабатывающие деньги, при этом экономящие их на своих клиентах и их безопасности. Особенно если они мне угрожают или хамят.
    • Ресерчинг — это мое хобби, позвольте мне его осуществлять, самостоятельно оценивая моральные стороны вопроса. Я на этом не зарабатываю и даже обычно не прирабатываю. Сам я считаю себя законопослушным гражданином, и таким и останусь, мнение же троллей об этой стороне вопроса не влияет на это ни в коей мере.
    Т.к. банить я в своем посте на хабре не могу, попрошу просто по человечески: оставьте свое мнение о моих моральных качествах пожалуйста при себе. Вы сэкономите и свое и мое время.
    Желание поделится с людьми «знанием» и время потраченное на пост пока пересиливают желание убрать к чертям этот пост в черновики, но баланс однозначно нарушен.
    Конструктив и мнения по теме статьи, т.е. обсуждение технической стороны вопроса выслушаю с огромным удовольствием (а будет свободная минутка и отвечу).
    • +88
    • 96,6k
    • 72
    Поделиться публикацией

    Похожие публикации

    Заказы

    • IOS-разработка
      32 отклика 80 просмотров
      450 000
      за проект
    • Дизайн веб-сайта партнерской программы
      38 откликов 104 просмотра
      10 000
      за проект
    • Удаленный ресетчер на IT-вакансии / менеджер по подбору персонала
      4 отклика 60 просмотров
      5 000
      за проект
    • Настройка личного кабинета и формы заявки отдельно для юр. и физ. лиц
      2 отклика 36 просмотров
      10 000
      за проект
    • Сделать кнопку для добавления расчета (калькулятор окон)
      6 откликов 66 просмотров
      500
      за проект
    Комментарии 72
      +9
      У меня есть собственный (ну почти) плагин, разворачивающий «полноценный» интерпретор тикля (tcl) с api к javascript текущего окна. Ну типа greasemonkey, только на тикле.

      Вот это — самое интересное в статье. Можно про это подробнее? Например, в отдельной статье.

      Я тоже такой хочу! :)
        +3
        Хотелка уже выросла? :) А если серьезно, то попробую найти время рассказать, а может допилю и выложу таки на github (в том виде как сейчас, звиняйте, стыдно).
        Базируется оно на вот этом плагине. Но как всегда все переделал (не как <object> для рисования гуя типа java-applet, а как <object> для интеграции с консолью / sublime, т.е. «умеет» DOM.
          0
          Ну из вашего примера я понял, что доступ к DOM там организован в виде команды js.

          А события DOM получать умеет? Реально прибиндить свой proc в истинно тиклевом стиле, скажем, как сокет, или как в tk?
            +1
            Не, js просто исполняет субституированый tcl-код, как оно было бы яваскипт (в scope элемента или window) и возвращает обратно в tcl объект результата исполнения. А так может в принципе и event-ы.
            Пример на вскидку:
            elm bind ready eval {
              elm bind onscroll "document.body" _my_tcl_proc_on_scroll_doc.
            }
            

            Есть на этом поприще пара хотелок и болячек, но я уже сказал — сыровато еще местами (времени катастрофически не хватает).
          0
          Я не знаю, может вам именно TCL нужен, но вот есть интересный проект — PyPy на JS: pypyjs.org
          Для старта можете сделать:
          import js
          js.globals.alert(1)
          

          Презентация этого чуда на PyCon 2015: www.youtube.com/watch?v=PiBfOFqDIAI
            0
            Штука класная — подтверждаю… И питоню я уже давно и надежно, но тикль лично я все равно предпочту любому другому скриптовому, и по многим причинам.
          –48
          Интересная история.
          Я один раз «взламывал» казино игруна, правда чисто математически, без рейсов и без sql-иньекций. Есть у них такая замечательная игра «Сейф», аналог математической игры «Быки и коровы» — нужно выскрыть сейф за 5 попыток. Потратив несколько недель и несколько компьютеров, я перебрал абсолютно все варианты игры и создал-таки оптимальную выигрышную стратегию! С помощью ещё некоторых ухищрений я довёл математическое ожидание до +7% с каждого сеанса игры. Если кому интересно, описание этого алгоритма выложено здесь: pobedi-igruna.ru/safe.php. Я играл несколько месяцев, даже что-то выводил, а потом просто надоело. После решения головоломки — интерес к ней пропадает, любители головоломок меня поймут. Было это несколько лет назад, но алгоритм остаётся актуальным до сих пор.
            +51
            Подскажите, пожалуйста, меня уволили из МТС и Билайн, но у меня остался доступ к их специальным волшебным кодам, которые удваивают и утраивают баланс. Вы не знаете, где лучше осветить это, чтобы все знали, как их обманывают операторы и смогли отыграться? Спасибо!
              0
              Вы не верите, что бывают игры против казино с положительным МО? В начале нулевых наши казино навыдумывали кучу видов покера, и некоторые из них при игре по идеальной стратегии давали плюсовое ожидание. Казино зарабатывало на потоке неоптимально играющих игроков. А плюсовых банило.
                +5
                Тут, скорее, в другом дело. Множитель выигрыша — 1.5 размера ставки. Т.е. если принять ставку за 1, то в среднем баланс после N игр будет составлять N * (-1 + 1.5 * P), где P — вероятность выиграть.

                Автор предыдущего комментария говорит, что его суперпрограмма, которая брутфорсила решения 7 месяцев, отгадывает 3314 кодов из 5040 возможных, таким образом, каждую игру баланс будет изменяться в среднем на (-1 + 1.5 * 3314 / 5040) = -0.01369 денежных единиц. Т.е. заработать на этом невозможно принципиально. Возникает вопрос — а в чем тогда смысл?
                  0
                  Смысл в том, что можно использовать некоторые ухищрения, в пределах правил игруна и тем самым увеличить МО до +7% за сеанс игры. Мне очень жаль, что меня так заминусовали, так как лохотрона тут никакого нет, в моей стратегии всё математически точно рассчитанно и доказано.
                    +5
                    Ухищрения? О каких ухищрениях может идет речь, если в случае идеальной стратегии игрок каждый ход теряет 0.01369$ вне зависимости от чего либо? Множитель выплаты 1.5? Угадывается 3314 кодов? Значит, любая игра будет убыточной, без вариантов.

                    Чтобы это работало, угадывать нужно как минимум 3361 код из 5040 — тогда выплаты начнут еле-еле покрывать затраты на ставки (+0.00029$ за ход).

                    Ну и классический вопрос авторам «несливаторов» — зачем продавать стратегию, если она работает? Если бы стратегия работала с хотя бы 0.1% прибыльностью, то начав со 100$ (самый выгодный вариант по соотношению профита на количество ходов), удвоить баланс можно за 1000 игр. Потом вывести и удвоить еще раз. Даже если считать, что вы будете «работать» полностью вручную, это два восьмичасовых рабочих дня, за которые вы получаете 100$ профита — или 1100$ в месяц, если позволить себе выходные.

                    Поэтому вывод один — если стратегия продается, она не работает. И не может работать, так как угадывается меньше, чем 66.67% кодов.
                      +1
                      Ох, я и не увидел, что это продается.
                        0
                        Уважаемый, если вы не видите возможных ухищрений, это не значит, что их нет. Сколько времени вы «работали» с игруном? Я несколько лет зависал на этом сайте, мне было дико интересны все предложенные там игры, кое-что мне удалось выяснить. Моя стратегия не имеет ничего общего с мартингейлом, все ставки одинаковые, но математическое ожидание +7% за сессию. Я несколько месяцев активно играл, у меня было задействовано несколько человек для доступа к десяткам аккаунтов, так как нужно все делать осторожно, чтобы не забанили. И у меня был и правда стабильный доход, но потом я занялся инфобизнесом — обучаю желающих программировать на языке C# Си шарп, проект www.videosharp.info, это оказалось куда интереснее — проводить живые вебинары по созданию игровых программ с учениками, чем тратить по нескольку часов в день на бездушные алгоритмы. Управление таким количеством аккаунтов — стало жутко напряжно и неинтересно. Я же писал об этом — когда головоломку решил, она становится неинтересной. Я хочу идти дальше, но терять наработки жаль, поэтому я и сделал сайт со своей стратегией, то есть распределил аккаунты другим способом, чтобы не тратить на их поддержку больше времени. 99.9% стратегий для игруна — полный шлак. У меня — действующий вариант, можете почитать отзывы на сайте или в интернете, отрицательных просто нет.
                          +2
                          Ох, какой же вы странный. Еще раз говорю — мой опыт на игруне не имеет значения, я этот сайт впервые увидел только после вашего комментария, прочитал правила, и мне (и любому другому человеку) этого достаточно, чтобы сделать выводы.

                          Давайте подумаем, на что вы вообще можете влиять в рамках игры?
                          1. На код, который вы вводите.
                          2. На размер ставки.
                          3. На валюту ставки.
                          4. На решение не завершать игру в течении 12 часов.

                          На что вы не можете влиять?
                          1. На множитель. Он выбирается сервером «случайно». Я сыграл 19 игр на 19 тестовых рублей, которые мне дали при регистрации, и каждый раз множитель был 1.5. Вероятность того, что сыграв 20-ю игру, мне бы попался другой множитель, кроме 1.5, равна (1/2)20 ≈ 0.000000954, или же один к 1'048'576.
                          2. На правильный код. Он выбирается сервером «случайно», но так как случайность с их стороны никак не подтверждается (нет публичного алгоритма генерации числа, и я, как игрок, не могу добавить свою случайность в процесс), то можно предположить, что сервер будет стараться давать такие коды, для которых цепочки решения длиннее 5 шагов.

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

                          Если, конечно, не считать «ухищрением» договор с администрацией игруна :)
              +17
              Молодец! Такие как ты и Чикей, заметно поднимают авторитет белых шляп.
              Частенько услышишь мнение, что безопасники (пентестеры, аналитики и др.) стали на светлую сторону силу, только потому что не смогли получить профит на тёмной стороне.

              «Но помни, если ты сделаешь первый шаг по тёмному пути, ты уже не сможешь с него свернуть...» (С) ;)
                0
                безопасники стали на светлую сторону силу, только потому что не смогли получить профит на тёмной стороне
                Та я на темной стороне никогда и не был. Честно-честно (ну разве что ребенком глупым совсем чуть-чуть). И я больше разраб, чем «безопасник». Просто той безопасности ради, иногда «опасно» играюсь с чем ни попадя.
                  +7
                  Это серые шляпы. Взламывают, но ничего не трогают, и указывают на ошибки.
                  А белые шляпы — это когда их сами создатели ресурса просят проверить.
                    +10
                    после совсем откровенного намека «работа должна быть оплачена», попытка сделать меня шантажистом (я уже друга адвоката думал подключать);


                    Так это и бы натуральный шантаж. Нифга это не ВайтХат подход. Авторитет это нефига не поднимает.

                    Частенько услышишь мнение, что безопасности (пентестеры, аналитики и др.) стали на светлую сторону силу, только потому что не смогли получить профит на тёмной стороне.


                    Я скажу скорее так: безопасники (пентестеры, аналитики и др.) стали на светлую сторону силу, потому что они впаривать безопасность гораздо легче, чем создавать и поддерживать продукт.
                      –4
                      Таким ка вы уже ответил ниже.
                      И да мне очень интересно подобные «конструктивные» мнения, содержащие столько полезной информации по теме хабрахабра в целом и статьи в частности. Может вы и вам подобные пойдут уже куда-нибудь… на сайт типа «юриспруденциабр» и иже с ним.
                        +3
                        > Так это и бы натуральный шантаж.

                        Вы не правы. Шантаж был бы, если бы автор говорил «Дайте денег, а то я сделаю вам гадость». Такого (как минимум, по его словам) не было. Он им не угрожал сделать гадость. Он сообщил о проблеме. То что он знает в чем она конкретно, не означает, что он обязан этим знанием делиться бесплатно. Не хотите платить — берите и сами проверяйте, наймите аудитора в конце концов.

                        И если что, определение шантажа:
                        «Шанта́ж (фр. chantage) — угроза компрометирующих или клеветнических разоблачений с целью вымогательства чужого имущества или разного рода уступок.
                        В настоящее время слово «шантаж» нередко используется в широком смысле — как угроза любых негативных последствий в случае невыполнения требований.»

                    • НЛО прилетело и опубликовало эту надпись здесь
                        +1
                        Вы статью вообще читали-поняли? Суть не в том. И она таки проверялась (хоть и почему-то не в случае моих манипуляций).
                        Токен совершенно честно помечался как использованный, и простой рэйс совсем не работал (т. е. transaction с table lock или уровень изоляции serializable). Новый токен вы сами тоже генерировать не можете (должен быть в их базе для вашего аккаунта).

                        Какой пролом в заборе?
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Все бы хорошо, хотя совсем не согласен (вы все таки не поняли).
                            1. кто вам сказал, что это база (я исходников не видел, т.е. это мое предположение + наглядность при объяснении хака); но если это база то cast в char это полурешение, типизированный связный целочисленный параметр (т.е. = @usrtoken, = :usrtoken или просто = ?) в этом случае гораздо надежнее. Но...
                            2. не совершайте довольно распространенной ошибки: не стоит быть таким уверенным что «я то эту ошибку не допущу» © Chikey.
                              Просто ресерчеры и иже с ними, думают немного по другому. Т.е. привыкнув не видеть исходников, люди «по другую сторону баррикад» могут «увидеть» что-нибудь, что вы забыли или не поняли или еще чего. Тут известная поговорка про болт с резьбой. Не было бы float сегодня вы бы читали про «conditional race condition» для того же казино, но уже с другим условием. Примеров есть масса.
                            3. я как раз думаю, что сосредоточившись на «предотвратить race» (что они более-менее «успешно» сделали), они и накосячили с другим;
                            4. чего вы привязались так к капче, она вообще чисто чтобы типа роботов исключить, каждый день автоматом накидывающих 20V$, ее например вообще могло не быть. Я вам больше скажу — ее кстати и не было в случае с «реальным» платежом (думаю что роль капчи играл токен платежной системы). Там все немного сложнее, но я не хочу сейчас вдаваться в подробности как я в этом случае «все поломал». Если хотите совесть, или чего там у меня вместо нее, не позволяет. Пока во всяком случае.
                        0
                        Отличная статья, как и у Чикея, действительно интересно читать, но вот итог вновь расстраивает. Что за люди…
                          +4
                          Оно практически предсказуемо:
                          — админы и разрабы часто расценивают это как переход на личность или как минимум камень в свой огород;
                          — сотрудники от безопасности — как вызов;
                          — организация же (люди не в теме) — негодник сломал интернет наш супер-пупер первоклассный сервис, атата ему (какое право он имел вообще так делать);

                          Радует то, что адекватные люди то же есть.
                            0
                            это как переход на личность или как минимум камень в свой огород

                            Напоминает мне бывшее место работы — там каждый работал над определенным модулем (образно говоря), и заглядывать друг к другу в код было не принято (я не буду пытаться отвечать, почему так, не смогу). А я регулярно смотрел чужой код и просто глазами, и статическими анализаторами, и каждый раз мое замечание, действительно, как оскорбление воспринималось!
                          +1
                          Конечно статья рекламная, но реклама такая изощрённая что интересно читать. Да ещё и кое что полезного можно извлечь.
                          В общем я за пиар такого рода.
                          Ставлю плюс.
                            +4
                            Спасибо, а в чем реклама, можно уточнить? Себя любимого (так я не нуждаюсь)? Мо-буть сервис какой?
                            А понял — тикля, наверно. Тогда да — язык и вправду хорош :)
                              0
                              Возможно я не совсем правильно выразился, скорее пиар а не реклама.
                              Впрочем я не вижу в этом ничего предрассудительного,
                              зря вы обиделись.
                                0
                                Обиделся? Да нисколько! От слова совсем. Однако из штанишек пиарить себя любимого я уже действительно вырос. Лет дцать уж как :)
                            +1
                            Я помню, что в 2000ые можно было натравить flashget на yandex, полазить в cgi-bin и получить список папок, которые соответствовал ящикам… эхх… ностальгия…
                              +15
                              работа должна быть оплачена

                              К слову, они вас и не просили проверять их сайт. Давайте я вам тоже чего-нибудь хорошее сделаю, и денег попрошу.
                                +3
                                Я, по своему обыкновению, сперва выложил им только результаты «эксплойта» — т.е. вот аккаунт, на нем виртуальный мильён денег. Аккаунт создан позавчера, ну и намек — мол расскажу что да как после доната.


                                Вымогательство.
                                  +5
                                  Вымогательство и шантаж иду бок о бок с угрозами. Например, опубликовать уязвимость или вывести денег. Без угроз это больше похоже на предложение услуг или разовую сделку. Где тут вымогательство?
                                    +6
                                    Вымогательство — это если бы он написал «не заплатите — всем расскажу». А в этом случае нашёл дыру и предложил рассказать им о ней в обмен на некоторую благодарность. Им надо было хвататься за него, отвалить денег и попросить ещё покопаться в сайте, чтобы кто-то другой их не обчистил на куда большие суммы.
                                      +5
                                      Мой адвокат с вами абсолютно не согласен, другими словами «нет состава преступления, и даже преступного умысла нет».

                                      И это не моя практика-изобретение, знаю что значительная часть ресерчеров, пентестеров и т.д. поступает подобным образом. А знаете почему — просто отношение к ним такое (своими руками вырыто) — т.е. с волками жить, по волчьи выть.

                                      По поводу же моральной стороны вопроса, ответил ниже…

                                      И пункт про других клиентов казино вы видимо совсем пропустили. Как быть с ними, если завтра «черный» пентестер это найдет и использует уже в своих целях. В чем виноваты эти люди, с которыми он завтра сядет играть?

                                      Про научную сторону вопроса я промолчу лучше, т.к. вас это не интересует — вы сюда пришли видимо «потролить». И как видно к сожалению на хабре вы не один.
                                        +4
                                        Я не юрист, но разве это и не есть умысел — «я взламывают сайты с целью получения награды, запугивая владельца сайта». Так это можно интерпритировать.

                                        1) Нашел багу, хотя никто не просил
                                        2) Получил профит — вирутальную валюту
                                        3) Написал письмо, с намеком на вознаграждение в обмен на инфу

                                        Тру ВайтХат делает так:

                                        1) Нашел багу, хотя никто не просил
                                        2) Сделал PoC, с минимально возможным ущербом
                                        3) Написал письмо, где сразу же описал всю инфу об уязвимости, все детали и попросил бы быстрее зафиксить.

                                        Поэтому то ВайтХатом Вас назвать не очень можно…
                                          –1
                                          Называйте меня как вам душе угодно, но:
                                          • пожалуйста не в моем посте;
                                          • с чего вы взяли что ваше мнение не по теме (с технической стороны вопроса) мне интересно
                                          • особенно доставило "попросил бы быстрее зафиксить."
                                          Написал письмо, где сразу же описал всю инфу об уязвимости, все детали и попросил бы быстрее зафиксить.
                                          Я так и делаю иногда по доброте душевной, если это сайт например «про кошечек» или в теме опенсорс, который я очень люблю и уважаю. И активно развиваю, не только со стороны безопасности последнего. В основном — как разраб.

                                          Ресерчинг — это мое хобби, позвольте мне его осуществлять, самостоятельно оценивая моральные стороны вопроса.

                                          Я себя сам не причисляю ни к белым, ни к пушистым, ни к серым, ни к черным, ни к каким бы то ни было.
                                          Но это не мешает мне быть законопослушным гражданином. А за мои моральные качества позвольте говорить все же людям, действительно меня знающих.
                                            +2
                                            Да вы правы — это абсолютно ваше дело, как поступать с той работой, что Вы сделали, могли бы и снять бабло — вы сами себе хозяин, а я Вам не судья. Этот коммент не столько для Вас, сколько для тех, кто будет читать Вас. Например varrt или кто другой, кто будет убежден, что это и есть «вайтхатское» и достойное поведение. Тем самым я просто надеюсь снизить число людей, кто бы считал, что такое поведение адекватно и достойно сообщества энтузиастов и хакеров (не спорою, что это наивная и, скорее всего, безрезультатная попытка).

                                            Если формально и по пунктам:

                                            1) Пост Ваш, но я нашел его потому, что Вы поместили его в хаб ИБ, а значит он имеет место быть откомментирован и оценен теми, кто читает этот хаб
                                            2) Еще раз скажу, коммент не только для Вас. Однако смею добавить, что ВЫ САМИ упомянули тематику вознаграждения и отношения к Вам со стороны владельца сервиса. Если эта тема не интересна и не важна, зачем вы вообще про это написали? Таким образом это является частью поста, а потому и откомментировано.
                                            3) Да, предполагается, что ВайтХат преследует не корыстные цели. Он нашел уязвимость, и хочет не денег и славы, а что бы продукт/сервис стал безопаснее — идеализм и утопия? Отнюдь… много людей находили уязвимости гораздо сложнее, опаснее и интереснее и сообщали все детали, сразу же — потому что хотели, помочь, а не для того, что бы получить жалкую подачку. Как Вы сами сказали — по доброте душевной.
                                              –1
                                              Поступил человек правильно. Багу, нашёл, о ней заявил, публикацию сделал… А то что жлобы недальновидно начинают угрожать расправой — это их проблемы.

                                              Я уверен, что при другом подходе с их стороны можно было бы получить всю инфу по ресёчу, а может и привлечь спеца, чтобы более полный пентест провёл…

                                              Шантаж был бы если бы он вымогал, а не получив «поламал бы их полностью». Автор же просто предложил услуги по выявлению уязвимости, а Не хотите — я дальше пошёл, Вас трогать не буду. Оставайтесь при своих и ждите типа в шляпе потемнее.

                                              После этого пошёл и сделал публикацию для сообщества.

                                              Красавчик, чего сказать.

                                              С жлобами по жлобски.
                                                0
                                                Ну вот, мне такой подход не нравится и я не согласен. Ну тут как бы сколько людей столько и мнений — каждому своё, я не навязываю Вам своё, просто для полноты картины выразил другое мнение.
                                                  +1
                                                  К слову, Ваше мнение мне тоже импонирует. Достойно. Честно. (Это без сарказма) Я бы сам так скорее всего сделал.

                                                  Но не все заслуживают такого подхода. Если первая реакция — штыки, то спец вправе и обидеться.
                                                –2
                                                Пост Ваш, но я нашел его потому, что Вы поместили его в хаб ИБ, а значит он имеет место быть откомментирован и оценен теми, кто читает этот хаб
                                                Это если по теме хабра, а если вы при этом «всем кто читает» за моральное поведение, да в вашем извращенном восприятии (это я утрирую), рассказывать будете.
                                                Может ИБ — хаб «Мораль и нравственность»?

                                                сообщали все детали, сразу же — потому что хотели, помочь, а не для того, что бы получить жалкую подачку
                                                А с чего вы решили, что я этого не делаю?
                                                Чтобы не увеличивать эту и без того длинную, и особенно конструктивную ветку, гляньте на досуге, плз, там [UPD#1] в конце поста появился.

                                                Скажу только вот про это вот «потому что хотели помочь» — я делаю постоянно и абсолютно безвозмездно уже десяток лет с гаком в опенсорсе.
                                                И не вам мне этим тыкать — где, кому и по каким причинам (вам возможно не ведомым) мне это делать или не делать.
                                                  +1
                                                  Делаете — молодец. Не делаете — не молодец. Сами написали:

                                                  Я, по своему обыкновению, сперва выложил им только результаты «эксплойта» — т.е. вот аккаунт, на нем виртуальный мильён денег. Аккаунт создан позавчера, ну и намек — мол расскажу что да как после доната.

                                                  и
                                                  после совсем откровенного намека «работа должна быть оплачена», попытка сделать меня шантажистом (я уже друга адвоката думал подключать);


                                                  Собственно и вся «претензия» основана на этих предложениях. Это и есть то, почему можно подумать, что это вымогательство. Вам отказали вполне нормально. Если причины мне не ведомы, то это значит, что пост не достаточно детальный и о причинах читатель должен додумывать, но дело Ваше раскрывать эти причины или нет 8)

                                                  я делаю постоянно и абсолютно безвозмездно уже десяток лет с гаком в опенсорсе.


                                                  Но за Ваш вклад в опенсорс, спасибо. Это очень хорошее дело. Но к теме топика, ИБ, баг-хантинга и #NoMoreFreeBugs относится слабо…
                                                    –2
                                                    Вам отказали вполне нормально
                                                    Нет, мне отказали (не страшно, хобби) + сказали «давай сюда решение, ссука такая» (о_О) + угрожали «а потом мы посмотрим оставить ли это без последствий» (WTF).
                                                    Это если без ваших домыслов…

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

                                                    Все остались при своих.
                                                    Более того, они поимели с меня, заметьте совершенно бесплатно, знание — что у них что-то не в порядке. И возможно стимул это поправить (не знаю свечку не держал).
                                                    Я же поимел с них ругательства и осадок от общения с хамлом + неудовлетворенность из-за неоцененных усилий (и я не про деньги) + потерянное время (не на поиски эксплойта — это хобби, а на необходимость писать здесь вот такие «оправдательные» комменты).
                                                      +3
                                                      В принципе они то же поступили не корректно, но они не знают кто Вы, чего вы хотите, и начало выглядело так, что вы не хотите давать инфу, пока те не заплатят. Поэтому такой подход к организации «репортов» вызывает мою негативную реакцию. Я против такого подхода со стороны вайтхатов, ресерчеров и любых других энтузиастов, для которых это просто хобби. Я выше описал, как по моему должно было выглядеть такое взаимодействие. Повторю:

                                                      1) Нашел багу, хотя никто не просил — потому что хобби и могу.
                                                      2) Сделал PoC, с минимально возможным ущербом — что продемонстрировать, если просто инфы о баге мало.
                                                      3) Написал письмо, где сразу же описал всю инфу об уязвимости, все детали и попросил бы быстрее зафиксить.

                                                      Вот у нас с Вами разногласия по пункту 3. Остальное — оценка Вашей морали, участие в опенсорс, играете на гитаре хорошо, переводите бабушек — я не обсуждаю. Вы можете быть хорошим человеком, в чем я НЕ сомневаюсь, но я считаю, что Ваш подход в 3м пункте не правильный. Даже если Вам хамят — это их проблемы, их не культурность и не образованность, это не значит, что в ответ на это можно становится «злее». Но это моя позиция, опять же не навязываю…
                                                      –1
                                                      Но к теме топика, ИБ, баг-хантинга и #NoMoreFreeBugs относится слабо…
                                                      Так я вам про что талдычу уже столько раз — ваше суждения о моей нравственности (основанное на ваших же имхо в корне не верных предположениях) тоже как бы «относится слабо». Какие-то у вас двойные стандарты.
                                                        +2
                                                        Я Вас не судил, я осудил подход: «Я нашел багу, но вам не скажу, пока не дадите чонить.»
                                                +3
                                                Все так.
                                                  0
                                                  Все не так. Т.к. «запугивая владельца сайта» нет и в помине. Скорее это меня там запугивали.

                                                  От тебя честно не ожидал, ну да ладно, бог рассудит. Главное чтобы перед своей совестью, или тем что у меня там заместо, я был чист. Пока мне это думаю все же удается — по ночам ничего не грызет, по крайней мере за те ресёчи.
                                                    0
                                                    Нет всё так, d00kie прав.
                                                    Требовать денег довольно «грязный» метод.
                                                    Приведу аналогию — мойщики лобовых стекол на перекрестках.
                                                    Да, МОЯ машина грязная. Но МНЕ решать, когда и как её мыть, а не ТОМУ человеку, кто подскочит, протрет 10 секунд лобовое стекло и тут же потребует денег.
                                                    Ведь любая работа должна оплачиваться?
                                                      +1
                                                      Заколебали, ну чесслово:
                                                      • повторяю для тугих на ухо — денег ни у кого не требовал
                                                      • ваша аналогия не корректна — вам помыли заляпанное грязное стекло, вопросительно посмотрели через него, пожали плечами и ушли — вот правильная аналогия была бы (и главное мыли так что вы не заметили).
                                                      • минусите мне пост, все мои комменты так вас не устраивающие, но перестаньте, люди плз;
                                                        +2
                                                        Да причем тут «минусите-не минусите», дело ж терминологии, а не в циферках на хабре.
                                                        Хотите быть вайтхатом — сообщайте все детали, не требуйте денег, просто поинтересуйтесь о наличии багбаунти.
                                                        Будете требовать компенсации за оказанную работу — вы грейхат.
                                                        Будете использовать уязвимости для своих целей без уведомления вендора или владельца сайта — вы блекхат.
                                            –2
                                            А давайте я вам тогда денег не дам (да имею права), но при этом скажу «но это что-нибудь хорошее, однозначно оставь, без денег и я на тебя все равно в суд подам». Это во первых.
                                            Во вторых же, мое личное отношение к вам будет зависить от тона, каким вы мне это скажете.

                                            Я вообще-то щедр душой, но не когда мне в нее плюют.
                                              0
                                              каким вы мне это скажете.

                                              А если скажу добрым тоном?
                                                –1
                                                А давайте я вам тогда денег не дам (да имею права),

                                                Тогда чего вы ждете от других?
                                              0
                                              sebres если что, посту поставил +
                                                –3
                                                И за это вам респект и спасибо с уважухой пополам.
                                                Еще бы вы всякие «сильноконструктивных» ветки не создавали — молился бы за вас:)
                                                если что, я про ту что выше
                                                0
                                                Дилетант мимо проходящий
                                                Т.е. схема вашей работы примерна такова: имея опыт и знания аспектов защиты и уязвимостей, вы перебираете подходы к тем или иным продуктам, нацеливаясь на максимальную «выгоду», которую можно получить.
                                                Поясню сразу, если казино то это соответсвенно деньги, кинотеатр, бесплатное бронирование билетов и так далее. Соответственно, если бы не получались схема описанная в статье, то читали бы мы просто про немного другое описание «как». Я правильно понимаю?

                                                По поводу морали, раз уж сегодня это самая интересная тема: Любой труд(!) должен быть оплачен.
                                                  +1
                                                  нацеливаясь на максимальную «выгоду»
                                                  Нет вы не правильно понимаете, я очень не беден, мне оно и не нужно как-бы (и зарабатываю я другим). Объяснить бы еще это моей дражайшей половинке — Ага! Снова за компьютером на ночь засел. Это раз.

                                                  Это мое хобби — т.е. там где интересно, а не где максимальная выгода. Это два.

                                                  Про труд — не совсем согласен, мне там мешает слово «Любой» — можно я все-таки сам решу, за что я желал бы получить «жалкую подачку», а где я могу по доброте душевной ли, по дружески ли не важно как — просто помочь.
                                                    +1
                                                    Нет вы не правильно понимаете, я очень не беден, мне оно и не нужно как-бы (и зарабатываю я другим). Объяснить бы еще это моей дражайшей половинке — Ага! Снова за компьютером на ночь засел. Это раз.

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

                                                    Про труд — не совсем согласен, мне там мешает слово «Любой» — можно я все-таки сам решу, за что я желал бы получить «жалкую подачку», а где я могу по доброте душевной ли, по дружески ли не важно как — просто помочь.

                                                    А это уже диалог, «Блин, спасибо большое, я за твою работу хочу дать денег.» А потом уж тебе решать, соглашаться или нет. Даже, если ты ответишь «нет», как минимум человеческое «спасибо» быть должно всегда.
                                                  +4
                                                  sebres
                                                  А теперь по теме поста, я правильно понимаю, что это связано с 0.1 + 0.2 != 0.3?
                                                    +7
                                                    Ну наконец-то…
                                                    Ответ: Не совсем…
                                                    Проще говоря, где-то сохраняется целое число T1 (скажем как int или bigint) например 180.
                                                    А затем сравнивается с числом T2, которое передается извне и меняется нами на число с плавающей точкой (допустим float) 180.01.
                                                    Если сравнение T1 с T2 происходит целочисленно (в int) то они равны, если как float (что случается если не уследить в некоторых алгоритмах или системах или явно не указать) — то они разные!

                                                    int(180) = int(180.01)
                                                    float(180) != float(180.01)
                                                    

                                                    После сравнения — токен T2 легальный, и что не менее важно токен T2 не был еще использован — происходит увеличения остатка денег и оно инкрементируется, а T2 переписывает T1, но обрезается до целого если нет precision overflow. т.е. снова 180. И стандартным уже рэйс все повторяется снова и снова. Пока токен не устареет ну или пока время не выйдет…
                                                      0
                                                      Спасибо! Понял.
                                                    +1
                                                    Не устану повторять романтикам в «белых шапках», что тест информационной системы проводится лишь с разрешения ее владельца. В большинстве юрисдикций данное деяние — уголовное, а «расскажу что да как после доната» позволяет повесить любые убытки. Ну, зато, пересечении границ больше не будет скучным. :)
                                                      +4
                                                      Проводите тест не напрямую и так же ведите переписку.
                                                      Я поддерживаю автора — если вы нашли брешь в коммерческом проекте, то вы можете или продать ее 3м лицам или самим разработчикам.
                                                      Почему продать? Потому, что они платят своим программистам за работу, и если вы улучшаете их проект, то вы должны быть вознаграждены.
                                                      Главное правило — не входить в долгие дискуссии. Ответ должен быть максимально быстрым.
                                                        +1
                                                        Да какой тест? Просто мы так её используем. Текаешь ссылки, тут же видишь, каки запросы отправляются, начинаешь ковырять формы, не успел опомниться — а уже дыру какую-нибудь нашёл. Это как поиск ошибок в тексте — их видишь без какой-либо специальной процедуры анализа. Просто читаешь текст (используешь его по назначению) и видишь ошибки.
                                                        +1
                                                        Сообщать владельцу сайта/серивса о баге? Да ни за что! Если только он знакомый. В остальных случаях будут проблемы. Ну, или сервис заранее сообщает о положительном отношении к таким репортам.
                                                          +3
                                                          Странно, что многие пытаются осуждать автора поста. Какое «вымогательство», как «шантаж»? Он просто предложил услугу за деньги. Им услуга не понадобилась. Он не стал ее оказывать. Где тут вымогательство? То что попросил денег за информацию об уязвимости? В этом нет ничего аморального. В наше время информация стоит денег. И даже если человек делал это для удовольствия и в качестве хобби, то ничего ему не мешает попросить деньги за в итоге выполненную работу. Художники тоже очень часто рисуют для удовольствия, а не только по заказам. И очень часто у них во время рисования для удовольствия получаются хорошие произведения, которые они потом выставляют на продажу. И никто их потом не осуждает, что они не отдали картину бесплатно, а повели себя «аморально» и решили продать плод своих трудов. Тут такая же ситуация — человек развлекался не причиняя никому вреда. В итоге создал «нечто», что оказалось возможным продать. И не просто продать, да еще и оказать хорошую услугу. Но в итоге получил угрозы и наезды. И кто тут себя аморально вел? Покупать они не захотели, окей — он и не настаивал, все остались при своих. «Никто не просил искать уязвимость?» — ок, ваше дело, мое дело предложить. Если бы отдал им решение за бесплатно — был бы вообще супер бескорыстный человек, можно только восхищаться. Но он решил не отдавать решение бесплатно — это его решение и за это вряд ли можно осуждать.
                                                            +3
                                                            • конечно, спасибо за поддержку, но...
                                                            • просьба не разводить холивара на «пустом» месте относилась не только к «моралистам» («автор — вымогатель и шантажист»), но и к другой стороне, т.е. к людям, как вы, считающим что я возможно прав...
                                                            • давайте уже закроем эту тему, ибо надоело, т.к.:
                                                              1. цимес статьи как-бы совершенно не в этом;
                                                              2. не считаю нужным снова и снова комментировать моральную оценку моих действий (данную как положительно, так и отрицательно);
                                                              3. как для юридических вопросов так и для нравственных изысканий наверняка существуют другие площадки, другие хабы, или как минимум другие посты;
                                                              4. я совсем не против, если кто-нибудь из моралистов сделает свой пост или опрос на эту тему, в котором это будет обсуждаться хоть до второго пришествия. Более того с удовольствием сам бы перенес некоторые ветки отсюда в такой новый пост, если бы хабр такое умел — позволял

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое

                                                          • Сутки
                                                          • Неделя
                                                          • Месяц