Было около 5 часов вечера, и я (@kwikadi) как обычно зря тратил время в интернете. Я исчерпал все обычные возможности тратить время зря, поэтому решил еще раз проверить свой оценочный рейтинг GATE на GateOverflow. Прежде чем мы продолжим, небольшое объяснение того, чем является / делает этот сайт, потому что большая часть того, что написано ниже, на самом деле не имеет смысла, если вы этого не знаете:

GateOverflow - это сайт вопросов-ответов в стиле StackOverflow, на котором размещены вопросы GATE за предыдущий год. Он также имеет очень хорошую систему проверки баллов и ранжирования. Хотя институты-организаторы GATE публикуют как ваши записанные ответы, так и официальный ключ ответов всего через несколько дней после сдачи экзамена, они, как ни странно, не идут ни на шаг дальше и не публикуют оценки людей еще за месяц или около того. Чтобы обойти эту проблему, на нескольких сайтах есть «калькуляторы баллов», которые берут ваши ответы и официальный ключ ответа и рассчитывают ваши ожидаемые оценки. GateOverflow отличается тем, что он также записывает URL-адреса ответов и оценки студентов и применяет магию (читай: статистику) к этим данным, чтобы предсказать ваш рейтинг и оценку GATE.

В любом случае, вернемся к проверке моей оценки GATE. Сайт прост, с текстовым полем, в котором вы можете опубликовать свой URL-адрес ответа, после чего сайт оживает, заполняя себя (среди прочего) вашими оценками и ссылкой для просмотра вашего оценочного ранга. Но на этот раз произошло другое: я случайно разместил не ту ссылку на сайт. И сайт, который обычно выглядит так:

Начали выглядеть так:

Посмеиваясь несколько минут, я понял, что, вероятно, нашел что-то, что могло бы занять мой мозг с СДВ в течение следующих нескольких часов. Итак, я включил музыку, открыл банку диетической колы и написал @dufferzafar, другому мужчине в середине:

После небольшого нашего обычного подшучивания мы взвесили ситуацию: это было 4 марта, а результаты будут объявлены 17-го. Вдобавок к этому около 30 тысяч человек уже проверили свои баллы (и, вероятно, не проверяли их всякий раз, когда им было скучно, как я), поэтому время имело значение. Очевидно, что не было проверки URL-адреса, поэтому играть было легко. К тому же мы раньше делали худшие вещи с более крупными организациями. Так что в целом был небольшой шанс, что мы сможем произвести фурор. Мы решили, что достаточно для нас.

Итак, мы приступили к работе. @dufferzafar, похоже, больше интересовался тем, сможем ли мы создать вредоносную HTML-страницу, которая каким-то образом испортит их синтаксический анализ и, возможно, даже прекратит предоставление нам доступа к БД (это может показаться маловероятным, но такие вещи были известны). Я хотел пойти по «более простому» варианту: возиться напрямую с базой данных предсказателей GATE. Это тоже было довольно просто: сайт сохраняет ответы студентов для прогнозирования их рейтинга / баллов, поэтому все, что мне нужно было сделать, это смоделировать поддельную страницу с «ответами», разместить ее на сервере и проверить свой рейтинг с помощью этой страницы. Вуаля! Если бы все работало так, как я надеялся, я бы успешно вставил поддельную запись в базу данных.

Но было бы интересно, если бы все произошло так гладко? (Не очень, если я должен был догадаться.) Хотя я смог получить как свои (фальшивые) оценки, так и оценочный рейтинг / оценку вредоносной страницы, явно не было никаких вставок в базу данных. (Я знал по тому факту, что график под прогнозируемой оценкой не изменился).

В этот момент я был очень раздражен. Ясно, что я делал что-то неправильно, но не знал, что. Затем, по прихоти, я решил зайти в инструменты разработки Chrome и посмотреть, что происходит под капотом. И как только я увидел, что происходит на вкладке сети, я понял, что я был дураком, загружая статическую страницу за статической на сервер, просто чтобы возиться с сайтом. Как только я щелкнул ссылку, чтобы показать свой прогнозируемый ранг, это был, как день, запрос к /logmymarks.php:

Итак, я запустил скрипач (замечательный инструмент, если вы работаете в Windows и в netsec), отправил gateoverflow законный URL, захватил запрос / logmymarks, отредактировал и воспроизвел его.

Оно работало завораживающе! Наконец-то успех.

Попробовав несколько раз, я снова написал @dufferzafar. Оказывается, в конце концов, он действительно не работал над рендерингом и достиг, по сути, той же точки (хотя ему потребовалось немного больше работы, так как он использовал curl, python и модуль запросов). Будучи более технически подкованным (читай: ботаником) между нами двумя, он также выяснил, почему мой первоначальный план не сработал: при отправке этих оценок на сайте есть грубая JS-проверка URL-адреса, и если это проверка не выполняется, тогда сайт отправляет эти данные в / logmymarkstmp (вместо / logmymarks), что довольно умно. Но, как мы все знаем, проверка внешнего интерфейса - это не проверка, и все, что требовалось для решения этой проблемы, - это прямой запрос POST на сервер.

С этого момента все было @dufferzafar. Он написал сценарий, который вставлял кучу (мы ориентировались на несколько тысяч или около того) записей, каждая с уникальными индийскими мужскими именами, идентификаторами и отметками. За исключением того, что мы наконец решили запустить его, примерно через 2 часа после того, как мы впервые обратили внимание на сайт, мы заметили кое-что немного удивительное: / logmymarks не возвращал ответ. Наши вставки тоже не отражались. Чтобы добавить оскорбления к травме, наши «тестовые» вставки, похоже, тоже были очищены. На несколько минут мы были озадачены тем, что произошло. Был ли это своего рода теневой запрет IP? Мы проверили, и это определенно не так. Итак, мы начали ковыряться в исходниках сайта. И нашел вот это:

Ага, нас нашли и отключили. Благодатью спасения было то, что нас не перехитрили, администратор просто отключил сбор данных на стороне сервера.

Вся эта ситуация заставляет нас обоих ощущать сразу несколько разных вещей: в первую очередь, мы впечатлены тем, что Арджун Сэр смог выключить нас всего за 10 вставок. Он определенно пристально следит за сайтом, и за него следует слава. Но в то же время прекращение сбора данных из-за того, что некоторые люди пытались с ним возиться, кажется немного жестким и, честно говоря, немного отговоркой. Мы ожидали, что это будет немного сложнее :)

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

Оглядываясь назад, можно было бы сделать несколько вещей по-другому, чтобы добиться большего успеха, но взломать базу данных по меткам GO не было смысла. Идея заключалась в том, чтобы исследовать и получать удовольствие, и мы весело проводили время. Мы надеемся, что этот сайт повысит свою защиту к сезону сбора данных в следующем году, и, чтобы подтолкнуть его в правильном направлении, мы открываем исходный код кода, который использовали здесь.

P.S .: На самом деле мы никогда не связывались с исходной ошибкой, которую мы обнаружили, а именно с сайтом, который весело пытался отобразить любую веб-страницу, которую вы туда добавили. Вы все еще можете это сделать. Давай, попробуй здесь. Забавно, когда вы помещаете собственный URL в текстовое поле.