Уязвимость в одном из центров IELTS
Всем доброго времени суток!
Сегодня я раскажу вам небольшую историю о том, что может сделать злой программист или как была найдена уязвимость на сайте в одном из IELTS центров.
Пару месяцев назад, а точнее в ноябре я решил сдать экзамен по английскому языку IELTS. Заранее записался и начался готовится. Через пару недель пришло время сдавать экзамен и я пошел его сдавать. К моему счастью я набрал ровно столько, сколько и ожидал, но статья не об этом. На брошурке которую мне дали было написано:
Your official Test Report Form will be posted to you 13 days after the test..
И я добросовестно начал ждать.
На 14 день я зашел на официальный сайт IELTS, глубоко вздохнул и начал вводить свои данные(имя, фамилия, дата рождения и номер паспорта) и нажал на Search, на что мне система с 100% увереностью ответила:
No IELTS result found. There is currently no test result available for the criteria you have entered.
Я подумал что допустил ошибку и ввел все заново, и снова система послала меня куда подальше. Я был в недоумении.
Через 15 минут, после того как я ввел одни и те же данные 10 раз подряд, я решил остановиться и подумать. В начале я думал скорее всего они неправильно написали мою фамилию, после имя, после номер паспорта. Когда прошло 2 часа и я перебрал все возможные варианты со своим Ф.И.О, даты рождения и номером паспорта, я заметил одну вещь которая была написана очень маленькими шрифтами на странице с результатом:
The IELTS partners give no guarantee as to the accuracy of this information. Your test centre or the IELTS partners will not accept any responsibility in the event that your result fails to display here, whether due to technical fault or administrative procedures.
И я решил зайти на сайт центра X где я сдавал экзамен. К моему счастью у них тоже была система онлайн просмотра своих результатов(Позже я узнал, что у этого центра можно узнать результат только с их официального сайта). Я снова глубоко вздохнул и начал вводить свои данные. После 30 минут долбления сайта всевозможными вариантами, я устал. Да, это наверное не то что вы ожидали услышать, но я чертовский
Я решил расслабиться и позвонить другу, который тоже сдавал IELTS вместе со мной. Но впереди меня ждало разочирование. Я узнал, что все трое которые сдавали вместе со мной, знали свои результаты. У них получилось взять свои результаты с сайта X центра без проблем, с первой попытки. Теперь я был не только уставшим, но и злым. Поймите правильно, я был злой не потому что у моих друзей получилось узнать свои результаты, а потому что я потратил больше 2 часов безуспешно пытаясь получить свой результат.
Впереди были выходные, то есть мне пришлось бы прождать еще 2 дня и в понедельник поехать в этот Х центр чтобы узнать свой результат, причем центр находился далеко и от моей работы и от дома. Нужно было отпрашиваться, ехать до центра час, потратить f© времени в центре, и еще час обратно. А мы как раз запустили не оттестированный код в продакшн, так как руководство сказало: СРОЧНО и СЕЙЧАС!
Подумав пару минут, я решил применить джедайские приемы из компьютерного мира. Не судите строго, у меня не было желания досмерти задосить сайт. Я пообещал себе, что от джедайских приемов сайт не должен получить повреждения или упасть. Поэтому в моем распорежений были только sql injection(только селект), небольшой xss(запустить скрипт чтобы получить результат) и программерская логика.
Вот что было на странице поиска результата:
Страница не обновлялось, было очевидно что использовался ajax запрос чтобы получить результат. На сервере находился файл r.php, который принимал GET запрос и возвращял result.
Вот пример запроса:
xxxxxx/r.php?nm=&fn=NAME&pin=PASSPORT&dmy=05.10.1990&td=12.01.2013.csv
Нужно было все лишь поставить sql запрос так, чтобы он вернул все результаты и я мог бы посмотреть только свой результат и забыть об этом инциденте. Но дело было гораздо проще. Пока я строил sql запрос, я заметил странную для запроса текст:
12.01.2013.csv?????
В начале я думал отбросить это как вариант, ведь не может же быть это так просто. Но потом подумал, и решил попробывать.
Убираем r.php и вставляем вместо него xxxxx/yyyyy/zzz/12.01.2013.csv, ничего не было найдено.
Попробуем так, xxxx/yyyyy/12.01.2013.csv, ничего не найдено.
Теперь так, xxxx/12.01.2013.csv и вуаля, файл лежит прям в корне сайта. Браузер мне предлагает сохранить документ или открыть?
Получается что IELTS центр X принимал с галавного центра свои результаты как .csv файл, а дальше при запросе искал данные по этому файлу. Я был очень удивлен, когда увидел что на все файлы сайта было chmod 777? У меня было только одно слово: WTF? Я понял, что если повозиться с этим сайтом пару часов, то без проблем можно достать пароль рута. Но как я и обещал себе, я не стал заходить далеко.
Я узнал свой результат и написал в центр это сообщение:
На данный момент уязвимость заклеена, но центр X просил не разглашать какой именно центр, так как галавной IELTS может им дать по башке.
Спасибо всем кто дочитал до конца, хорошего Вам программирования!
P.S.
Никогда не делайте chmod 777
Будьте снисходительны к тексту, это моя первая статья в жизни. (До этого я писал только код)
0 комментариев