Фрилансер — история одного пентеста

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

Начнем!


Вот теперь Фрилансеру и пригодились все его знания принципов веб-безопасности. Даром не прошли ни чтение профильного хаба, ни многочисленные статьи из интернета, ни небольшие практические опыты. Теперь он был уже не Фрилансером, а Пентестером, как мы и будем называть его в нашем повествовании. Начать было решено с формы поиска на одной из первых же страниц. Так… Sqli, нет, а XSS… Возможно! Фильтрация в поле присутствовала, но была не строгой, можно что-то и провести. Вот здесь и начинается настоящий интерес исследования ресурса! Около 15 минут было потрачено на разработку вектора атаки и вот он – на экране появилось такое долгожданное “Oops!” в окошке алерта. Но дальнейшие события Пентестера даже немного расстроили – в поле имени пользователя была устойчивая активная XSS. Обидно было биться над обычной пассивной XSSкой столько времени, когда на соседней странице была ничем не прикрытая возможность инжекции кода в ленту заказов – на главную страницу сайта! Злые мысли закрутились в голове, а что если… Нет. Пентестер не собирался эксплуатировать найденные дыры. Довольный собой он сел писать репорт администрации ресурса. Но это была бы слишком скучная история, если бы ей было суждено закончится именно здесь.

Дальше интереснее


Человек, заведовавший новым фрилансерским сайтом, и которого мы назовем просто Админ, прекрасно знал, что форма обратной связи на ресурсе отключена, а почтовый ящик не работает. Поэтому его не удивил телефонный звонок, касавшийся именно этого сайта. В ответ на заявление о проблемах безопасности он лишь сказал, что очень заинтересован этим вопросом и дал свой контактный e-mail. Пентестер же записал его любимой гелевой ручкой в блокноте и спустя полчаса уже ждал ответного письма. Ответ заставил себя подождать. В нем говорилось, что уязвимость будет в кратчайшие сроки устранена, а Пентестеру обещалось небольшое денежное вознаграждение. Бедного студента сей факт порадовал, честные деньги за честную работу это то, чего ему сейчас не хватало. Он оставил свои реквизиты и стал ждать. Два дня. Неделю. Месяц. День становился все короче, а администрация сайта про него как будто бы забыла. Админ, а читал письма именно он, даже отказывался отвечать на почту. И здесь уже Пентестер решил серьезно заняться анализом фрилансерской биржи. Он даже еще не знал зачем, просто ему понравилась эта работа.

Сделка, господа!


Исследование началось. Беглый осмотр показал, что сайт был построен на сторонней CMS, идентифицировать которую сразу не получилось. Просмотр форм на страницах поиска и личной информации ни дал ровным счетом ничего. Модификация всех остальных данных, передаваемых в POST и GET запросах, тоже не раскрыла ничего нового. Но оставался еще один аспект работы сайта, которому не было уделено внимание – процедура оформления заказа. И в ней оставался момент, который вызывал особый интерес. Оставалось только проверить… И да! Файл готовой работы в момент обмена между исполнителем и заказчиком просто помещался в папку со стандартными правами доступа и не фильтровался по расширению. Совсем уж детская ошибка, подумал Пентестер, ему даже не верилось, что биржа, оборот которой измерялся многими сотнями тысяч рублей, могла себе позволить такую оплошность. И новоявленный взломщик не мог ею не воспользоваться. После небольшой войны с антивирусом, который упорно вытирал php-шелл с диска, скрипт был удачно загружен на сервер. Несколько кликов мышкой и Пентестер увидел на своем мониторе такое желанное меню шелла и файлы корневого каталога сайта.

Что же внутри?


Что же за CMS была так добра к Пентестеру и спокойно пустила его туда, куда вход был строго запрещен?
/**
 * Home page loader
 *
 * @package Cotonti
 * @version 0.0.3
 * @author Neocrome, Cotonti Team
 * @copyright Copyright (c) Cotonti Team 2008-2009
 * @license BSD
 */

Так гласили первые же строчки первого открытого файла. Вот и ответ – это была Cotonti, которая если верить Википедии «обеспечивает защиту от большинства известных видов сетевых атак: PHP-инъекции, загрузка файлов, не соответствующих их типу, внедрение SQL-кода, межсайтового скриптинг (XSS), подделка межсайтовых запросов (CSRF) и др.». Как видим, не стоит верить всему, что пишут в свободной энциклопедии, хотя для любого хоть немного подкованного студента технической специальности это и так очевидно. Анализ базы данных показал, что md5 стандартных восьмизначных паролей был достаточно стоек для бесплатных баз хешей. А вот заданные юзерами пароли такой проверки не выдержали и раскололись как орехи. Цифры похожие на даты и даже одна девятизначная фамилия, написанная в английской раскладке. Как оказалось при детальном рассмотрении результатов работы, цифровые пароли принадлежали тестовым пользователям, а один единственный действительно смененный на абсолютно некриптостойкий пароль – кому бы вы думали? Сотруднице фирмы, которая все так же сидя в одном единственном оставшемся офисе оформляла заказы приходивших к ней студентов, правда уже в более непривычной ей форме. К слову сказать, на счету ее учетной записи было несколько сотен тысяч рублей, которые наш Пентестер даже не тронул пальцем. У него созрел другой план.

Трюк на миллион баксов


Админ жил своей жизнью и, судя по обновляемости сайта, совершенно забыл обо всех проблемах, связанных с ним. Сайт работал и приносил деньги. Но в тот солнечный день случилось что то непредвиденное. Судя по логам вывода средств, кто-то из пользователей, о котором в базе данных не содержалось не то что ФИО, а даже записи о последнем посещении, в которую автоматически заносился ip адрес, пытался вывести из системы достаточно крупную сумму средств. Пользователь был как тень – лишь id и соответствующий его поведению ник, например Тень. Копнув глубже, Админ понял, что никаких денег Тень вывести не может, многозначная сумма была столь же призрачна, как и сам пользователь. По факту ее просто не существовало. Но неопровержимые машинные записи говорили об обратном – деньги есть и должны быть уплачены. Паника начинала нарастать. Пентестер же в этот момент спокойно допивал свою чашку кофе, и когда на донышке оставалось совсем немного полуостывшего напитка, его взгляд упал на индикатор новых сообщений. Одно непрочитанное – письмо от так давно забывшего его Админа. «Это не вы на нас практикуетесь?» — наивно гласил текст письма. Подождав несколько минут Пентестер взял еще одну чашку кофе и набрал номер Админа.
— Здравствуйте, — произнес он спокойно, — судя по вашему последнему письму, я понимаю, что у вас проблемы и даже знаю, что могло произойти. Дело в том, что я раскрыл вам не все бреши в безопасности ресурса до того момента, как вы обо мне забыли. Можете подробнее рассказать, что у вас стряслось?
В ответ в трубке послышалась сбивчивая речь Админа, пытавшегося объяснить ситуацию. Спустя несколько минут ему это удалось.
— Вероятно, я понимаю, как у злоумышленника это вышло, — сказал Пентестер, а про себя подумал, что всего несколько правильно сформированных SQL запросов могут творить чудеса. – Я бы даже мог вам помочь, но вы поступили очень нехорошо в момент нашего первого сотрудничества…
Разговор продолжался еще несколько минут и содержал много извинений. А спустя сутки на счет Пентестера поступила символическая 1000 рублей. Но ему уже не нужны были деньги – ему хватило того растерянного и напуганного голоса из трубки чтобы решить для себя – справедливость восторжествовала. Спустя еще двое суток уязвимость, о которой Админ был уведомлен, была устранена путем отключения функционала обмена файлами, который был восстановлен еще спустя сутки. Тень же растворилась так же, как и появилась на сайте. Никто даже не заметил того момента, когда пользователь со злополучным id просто исчез, не оставив за собой ни единого байта в таблице.

Вместо выводов и заключений


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

Комментарии 39

    +1
    Пообещал — сделай.
      +15
      Неопытный админ попался — испугался. А мог бы накатать заявление куда следует :)
        0
        Имхо это какой-то эникейщик, который вообще не котролирует ситуацию на вверенных серверах.
        +4
        Все правильно: щелчок по носу админа, удовлетворенное самолюбие и немного денег на радости. И никаких проблем.
          0
          Прям целый блокбастер в стиле крепкого орешка! :)
            +16
            Статья 272. Неправомерный доступ к компьютерной информации

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

            www.consultant.ru/popular/ukrf/10_38.html#p4970
            © КонсультантПлюс, 1992-2013
              0
              Тема скользкая. Не факт, что инфа на том сайте охранялась законом. Атака не вредила содержимому сайта. Значит обвинить по этой статье можно только потому что парень плохой, а админы хорошие, например.
                –2
                Плюс надо еще доказать, что этот неправомерный доступ — был, если логи потерты, а «хакер» сидел через прокси?
                0
                Расслабьтесь… Не всякая информация подлежит охране законом. Охраняемая законом информация должна храниться в соответствии с установленными законом требованиями с использованием спец. технических средств и специальными мероприятиями.

                Очевидно, что либо на сайте не было информации подлежащей охране (хотя скорей всего была: персональная информация клиентов сайта и информация о финансовых транзакциях), либо админ явно грубо нарушал «установленный законом порядок». За это, кстати говоря, в РФ полагается уголовная ответственность…

                В общем сей, с позволения сказать, админ подлежит как минимум увольнению за служебное несоответствие, а как максимум статья… Факт проникновения и ущерб от пентестера надо будет еще доказывать, а злостное уклонение админа от исполнения служебных обязанностей в данном случае просто факт…
                +10
                Пентестер — самовлюблённый позёр и демпер, который ради 1000 рублей и «растерянного и напуганного голоса из трубки» нарушил пачку законов, подставил людей, мешал другим фрилансерам работать. Надеюсь что это просто литература и не имеет ничего общего с реальностью…
                  0
                  С вас «пачка законов» и цитата того места, где он мешал другим людям работать. Остальное мне оспаривать влом.
                    +2
                    Мне вот вообще не понятно почему я должен вам что-то объяснять. На вскидку — про законы выше сказано, а про мешать:
                    Спустя еще двое суток уязвимость, о которой Админ был уведомлен, была устранена путем отключения функционала обмена файлами, который был восстановлен еще спустя сутки.
                      +1
                      1) Разумеется, не должны. Вас никто и не заставляет. Только тон вашего сообщения слишком резкий и представляет однобокий взгляд на вопрос.
                      2) По поводу законов — один упомняли. Другие приведёте? Пачка же. Честно любопытно, за что тут ещё привлечь, кроме несанкционированного доступа.
                      3) Это устранение уязвимости, а не намеренное вредительство.
                        0
                        1) Не должен, но вы продолжаете настаивать.
                        2) Я вообще не юрист, но вот вам ещё один (два — уже толпа) Статья 273 УК РФ (Создание, использование и распространение вредоносных компьютерных программ), до 4 лет дают между прочим.
                        3) Для начала это эксплуатация уязвимости, уже потом устранение. Сутки честные пользователи не могли полноценно пользоваться сервисом за который платят деньги.
                  +3
                  Надеюсь, пентестер юн. Лет в 18 многие такими были. Проходит.
                    +6
                    Вспомнилось ситуация из своего прошлого.

                    Дело было 3-4 года тому назад, тогда для меня выдалось не лучшее время. Увольнение и затяжной поиск новой оффлайн работы сильно поим потрепали меня, но именно тогда я начал делать первые попытки зарабатывать в сети.

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

                    Дальше был поиск других уязвимостей, рекомендации по закрытию, переписка о начальнике с дальнего востока (не отвечающего на мейлы и телефон), ну и Леон пропал. Работа была выполнена не полностью, но время потраченное впустую очень сильно било по самолюбию. Продолжения не было. Сейчас правда, заходя на тот сайт, его тематика у меня вызывает легкую улыбку.

                    Очень надеюсь, что этот коммент увидят владелец портала sem40.ru и тот самый веб мастер Леон, стыдно им вряд ли будет, но пусть знают. Фу такими быть!
                      0
                      Дык noblesse oblige же =))
                      0
                      Никто даже не заметил того момента, когда пользователь со злополучным id просто исчез, не оставив за собой ни единого байта в таблице.

                      А логи веб-сервера почистили?
                        +4
                        Админ — лох :) таких нубов система должны выявлять на стадии экспериментов — 5-10 странных запросов и для него делается виртуальная копия и все логгируется на внешний ресурс для протоколов и перлов для баша.
                        Пентестер — нуб. Учись хорошо!
                          +6
                          Приходит нуб к эксперту в гости, а эксперт — тоже нуб!
                            0
                            Где такое реализовано?
                              0
                              Что именно?
                              0
                              Было бы интересно почитать где нибудь про практическую реализацию подобного обеспечения безопасности ресурса. Не могли бы Вы поделиться ссылкой или же собственным опытом?
                                0
                                Полностью автоматическая система у меня была только когда я порно сайт админил :) там ломали постоянно и важно было не защитить сайт а пресечь распространение обычных паролей для юзеров по разным форумам. Скрипт, тогда еще на перле, который логи шерстил на тему авторизаций ( и неуспешных и успешных ) и странных запросов. Как только пороги превышались для адреса, сети или просто юзера — он блокировался, адрес фильтровался и так далее. Что бы атакующему не давать инфы или для вломанного эккаунта ( у которого было много авторизаций с разных сетей ) блокированные и фильтрованные адреса попадали на другой инстанс с облегченной копией сайта, где уже можно было детально разглядывать что это тут лезет.

                                Сейчас я не делаю полностью автомат — в последнее время у меня авария на ошибках висит с адреса — я вручную отфильтровываю адрес на другую виртуалку и смотрю что за нафиг. Но есть «анти-DDOS» скрипт, который по порогу отрубает адрес — хорошо работает и против скриптов для взлома и против примитивных DDOS атак.
                              0
                              тоже как то развлекался:
                              Набрел случайно на сайт который продавал информацию о том, как оформить ИП =) (это же очень сложно, целый час в налоговой убить на это надо), и продавал эту информацию не много не мало за 5 тыс руб…
                              Надумал наказать злодея и мошенника(хотя в итоге стал таким же, но об этом через пару строчек)
                              После часа пыхтений получил доступ ко всему, что можно было на этом сайте и тут вопрос стал — что же делать, дефейс? но мне уже не 14 лет, удалить сайт? но копия вернется через какое то время
                              И тут друг шутки ради говорит — а ты его реквизиты кошелька на ЯД поменяй на свои, все равно не кто не купит этот курс, лохов таких же нет уже…

                              Так и сделали… какое мое удивление было когда я пришел с работы а на ЯД лежало 15 тыс руб =)
                              Жалко таких людей которые привыкли за все платить и у них даже мысли не было сходить в налоговую и узнать все там…
                                +4
                                Это понимать как чистосердечное признание в нарушении закона?
                                  +1
                                  я как робин гуд, забрал у богатых(а так как беден), отдал бедным(себе) =)
                                  так что я за правое дело был
                                  +6
                                  Вы хоть в ответ инструкции выслали?
                                    0
                                    Кстати да, надо было выслать, но я думаю они вытрясли с него все таки инструкции
                                  –2
                                  Хорошо написано — читается на одном дыхании
                                    0
                                    Какой-то художественный рассказ, без фактов, векторов атаки и пр. Можно много таких придумать. А вот пишите — хорошо, да.
                                      +1
                                      Спасибо за признание писательского таланта, возможно правы были люди, советовавшие в свое время выбрать журфак, хотя об избрании пути студента-физика не жалею. Статья, если быть честным, и была попыткой представить техническую историю в художественной форме, уделив внимание еще и эмоциям участников. А если погружаться в технические детали, то там по факту и смотреть то не на что. Названия ресурса, о котором идет речь, я так и не раскрою. По поводу же векторов атаки — все приведенные дыры в безопасности были дырами в одном единственном плагине Cotonti — не так давно удивившем свет плагине фрилансерской биржи. К слову сказать (это больше относится к гневному комментарию выше), устранение уязвимостей происходило именно на уровне модуля CMS, а не заплатками на сайте, так как «Пентестер» совершенно бескорыстно оставлял репорты и по месту разработки CMS, для которой вскоре вышло глобальное обновление. Поэтому отключение функционала сайта как раз таки было вынужденной мерой предупреждения настоящих взломов и, возможно, единственным правильным решением со стороны «Админа». Вероятнее всего, он лишь дождался обновления модуля и после возобновил работу сервиса. Если все же интересна информация обо всех уязвимостях кратко и в одном месте, то уязвимостей всего три. Первая — reflected XSS, реализации которой мешала нестрогая, но все же фильтрация данных, и мусор от mysqli_real_escape_string(), корорый без фильтрации шел на вывод. К сожалению, точных условий проявления уязвимости я в настоящий момент сформулировать не смогу — нет уже ни уязвимости, ни записей о ней. Вторая активная XSS в описании не нуждается — полное отсутствие фильтрации данных в полях ФИО и ника. Последняя дырка — отсутствие фильтрации загружаемых на сервер файлов по расширению и помещение их в папку на сервере с правами на выполнение — тоже все очень просто, процедура заливки шелла неоднократно описывалась в сети.
                                      0
                                      Студенты должны сами учиться а не покупать курсовые и дипломные работы на сайтах… Если робингутсвовать, то разрушать такие сайты надо а не заниматься мелким вредительством…
                                        0
                                        Увы, такие вот сейчас пошли студенты, что оборот компании возможно уже перевалил за миллион. Вопрос на самом деле спорный, что же лучше в наш продажный век, купить диплом или же студенту заочнику гуманитарной специальности купить единственную контрольную по матану, что позволит ему не отвлекаться от работы на изучение не слишком важного ему предмета? Безусловно, я не одобряю оба этих деяния, но и судить так радикально об агентствах «помощи студентам» не стоит.
                                        0
                                        Жаль что прекрасная CMS\CMF Cotonti которая имеет долгую историю, на хабре, впервые изображена в таком нелицеприятном свете. А ведь не за горами то время когда выйдет Siena 1.0.0, которая будет еще и подкреплена хорошей документацией, чтоб во весь голос можно было заявить об этом событии здесь на многоуважаемом хабре. И тогда многие, надеюсь, узнают и заинтересуются этим движком, что наверняка еще больше улучшит его. Что же касается так красочно и художественно описанного инцидента то могу лишь сказать одно — радует что история закончилась в принципе хорошо для всех: в движке были обнаружены и оперативно устранены изъяны; пентестер усилил свои знания, получил бесценный опыт да еще и добыл свое долгожданное символическое вознаграждение; админ ресурса таки отреагировал на обращение и устранил уязвимость вверенного ему сайта; никто слава Богу не пострадал. Автор спасибо за рассказ
                                          0
                                          Да собствено к котонти и нет особых претензий, уязвимости в стороннем модуле :). К тому же данный модуль уже переписан с нуля под последнюю ветку Cotonti.
                                            0
                                            Читал комменты, заинтересовался что такое siena. Видимо горы оказались неприступны, если за 3,5 года Siena так и осталась Siena 0.9.19 )))

                                            А roadmap 1.0.0 говорит что 36% complete )))))
                                              0
                                              Увы, но да. Было бы смешно если бы не было грустно ибо дело не в высоте гор, как могло показаться. К сожалению оказалось что все люди которые участвовали в восхождении на тот момент были студентами. Не думаю что это плохо, считаю что даже наоборот. Но, но соответственно все практически остановилось (высота которую они успели покорить) тогда когда они обзавелись семьями и устроились на работу, а бытовуха и нужда обеспечивать себя и свои семьи не оставила времени на то что бы из достаточно хорошего и надежного но неудобного и морально устаревшего движка сделать супер инструмент по созданию сайтов. Достаточного количества талантливых, бескорыстных и умелых последователей которые могли бы подхватить такое перспективное начинание не оказалось вот проект практически и заглох.

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

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

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