четверг, 22 марта 2012 г.

Обход защиты системы голосования от vestnik.in.ua - технические моменты


И так, как и было обещано в предыдущем посте, выкладываю материал, где описано как проводился аудит и обход защиты системы голосования от сайта “vestnik.in.ua”. 

А начнем мы с так всеми нелюбимой теории. Сорри, но без нее никак =)

Немного теории

Для понимания всего последующего материала, нужно немножко вникнуть в сам процесс роботы Интернета. Конечно, если вы продвинутый юзер или вам уже не терпится увидеть результатов проделанной работы, можете смело пролистать до раздела «Перейдем к практике». Но все-таки я советую прочитать все то, что изложено ниже.

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

Вы когда-нибудь задумывались, как на вашем компьютере появляются страницы сайтов? Попробую пояснить.


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

С выше сказанного можно сделать один важный вывод: каждый компьютер в Интернете имеет свой адрес, так же называемый IP-адрес или просто IP. Например у сайта ya.ru это – 213.80.204.3, vk.com – 87.240.143.245, ru.wikipedia.org – 91.198.174.225 и т. д. Каждый компьютер/сервер/мобильный телефон и другое устройство подключенное к Интернету имеет свой уникальный адрес. Этим и пользуется наша система голосования.

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

Размышляя логически, мы задаем себе вопрос «А можно ли скрыть свой адрес в Интернете и выдавать себя за кого-нибудь другого?». Ответ – да. Конечно, напрямую свой адрес изменить нельзя, но выдать себя за другого – можно. Мы воспользуемся возможностями proxy-серверов.


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

Имея список адресов proxy-серверов можно по очереди подключаться к каждому из них, и выполнять голосование за необходимого нам участника. Имея базовые навыки в программировании можно автоматизировать этот процесс, и довольно за короткие сроки набрать необходимое количество голосов (вплоть до 100 за минуту). Именно этим мы дальше и займемся.

Переходим к практике

И так, что нам понадобиться? Для начала список адрессов proxy-серверов. Благо, что это сделать довольно просто. Заходим в любую вам удобную поисковую систему и пишем в запросе «free proxy list».


Заходим на найденные страницы, и ищем адреса серверов. Такие адреса обычно имеют вид: 180.183.151.120:3128, 31.25.137.202:8080 и т.п.


Копируем эти адреса и переходим к следующему шагу.

Адреса у нас есть, теперь нужно ими воспользоваться. Как это сделать я объясню на примере браузера «Опера» так как в нем эта функция реализована довольно просто. Нажимаем CTRL+F12 -> Расширенные -> Сеть -> Прокси-серверы… В появившемся окне вписываем адрес и порт найденных нами на предыдущем этапе серверов.


Кликаем ОК. Далее, не выходя из этого окна клацаем Cookies -> управление Cookies. В поиске пишем «vestnik.in.ua», удаляем все найденные записи и выходим с окна. Все, теперь мы полностью чисты и скрываемся за другим адресом.

Конечно, может показаться, что это довольно нудный и не эффективный процесс. Но попробовав пару раз можно довольно хорошо развить скорость проведения голосования. Лично у меня после небольшой тренировки получалось примерно два голоса в минуту. Если заранее подготовить список адресов, то можно достичь результата 120 голосов в час. Подключаем к этому процессу еще несколько своих друзей готовых за пиво/шоколадку/поцелуй потратить один час своего времени, и хорошие итоги голосования вам гарантированы.
Но все-таки, весь этот процесс довольно сложный и утомительный… Как ни как мы живем в эру цифровых технологий! Эру, когда сложные и нудные процессы можно спихнуть на кого-то другого! Кого-то кто не будет возражать и требовать увеличения зарплаты! Кого-то, кто готов работать 24 часа в сутки без остановки и не просится домой! Кого-то, кто возьмет на себя все тяжести и лишения его тяжкой службы. Под все эти параметры прекрасно подходит наш с вами персональный компьютер. Так и поступим.

Упрощаем процесс

Во первых, автоматизируем процесс сбора и обработки адресов. Если вы попробуете ту технику, что была описана выше, то скорей всего сразу разочаруетесь. Большая часть адресов будет не рабочая, что со временем довольно сильно может повредить вашу нервную систему. Халявные proxy-серверы зачастую мрут как мухи (халява она и в Африке - халява). По моим наблюдениям примерно 60% - 75% адресов не рабочих. Чтобы избежать этих хлопот со сбором и проверкой, пишем простенькую программу, которая все сделает за нас.


На рисунке выше запечатлено программу в действии. Как видно, только единицы проходят вступительный отбор. Но даже их нам с головой хватит. Сейчас на моих складах хранится приблизительно 2 000 обработанных proxy-адресов готовых в сию же минуту выполнить свой долг перед родиной, и 55 000 в "сыром" виде (60% из них рабочих). Плюс не забываем, что голосовать с каждого компьютера можно каждый день, а значить каждый день наши адресу будут снова "чистые". Впечатляет, не правда ли? Для удобства все данные будем хранить в базе данных Microsoft SQL Server 2008.

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


Заходим на сайт, обновляем страничку, и видим что на один голос стало больше! Еще раз запускаем программу. Еще раз заходим на страничку. Снова на один голос больше! Работает!

Но все-равно мы не довольны. Работать с консольным приложением довольно неудобно, а для не привыкших пользователей даже, наверное, невыносимо. Про понимание как работать с программой на интуитивном уровне даже и речи идти не может. Решено – заворочаем нашу программу в удобный и приятный интерфейс.

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

Дополнительные материалы

Материал "Уязвимость в системе голосования от vestnik.in.ua": ссылка
Сайт газеты "Вістник Кременчука": ссылка
Подробней про proxy-серверы: ссылка
Подробней про язык программирования C#: ссылка
Подробней про технологию построения интерфейсов WPF: ссылка
Подробней по СУБД Microsoft SQL server: ссылка
comments powered by Disqus