Картофель фри

Федор Михайлович

Xakep, номер #065, стр. 065-074-1

Взлом интернет-магазина

Многие слышали о взломах интернет-магазинов. Как какой-нибудь злобный хакер прорывался сквозь непробиваемую защиту сервера, крадя всю полезную информацию, становился мультимиллионером и был таков. Это красивые истории. Чтобы понять, как все происходит на самом деле, мы решили попросить одного человека поведать о таких вещах. По понятным причинам, раскрывать он себя не стал, а назвался Федором Михайловичем. Вот что он рассказал. Внимание! Вся последующая информация дается только для ознакомления. Не повторяй это на практике! Поехали.

Читая статьи про кардинг, ты, наверняка, уже не раз задавался вопросом, откуда же эти крутые хакеры получают номера чужих кредитных карт. Собственно, известно, откуда: из взломанных интернет-магазинов. Однако что-то мне подсказывает, что большинство читателей слабо себе представляют процесс изъятия кред из электронного магазина. Чтобы хоть немного прояснить ситуацию, я расскажу о недавно проделанном мною взломе одного зарубежного е-шопа.

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

Вначале было слово

«Давай кардить», – сказал один мой хороший товарищ. «А что, давай», – ответил я, а сам подумал про миллионы долларов, виллу на Кипре и гараж с дорогими машинами. Правда, в тот вечер заняться кардингом нам не грозило, мы отправились развлекаться в город. Но спустя несколько дней я вернулся к этой мысли и уже вплотную подошел к вопросу о добыче кредиток. Первым делом нужно было найти жертву, магазин, который я буду ломать. Это не должен быть крупный проект типа amazon.com, но и с захудалой неработающей лавчонки толку тоже будет мало. Лучше всего работать с магазинами средней руки – их в интернете очень много, дневной оборот средств в них не слишком велик, но информации о кредах в таких системах хранится немало.

Самый верный способ найти себе подобного клиента – порыться в различных каталогах типа shopping.yahoo.com, там представлены тысячи буржуйских е-шопов. Но это как раз и не входило в мои первоначальные планы. Размышляя, кого и как я буду ломать, я сразу захотел похалявить. Я зашел на securityfocus.com и усиленно принялся искать опубликованную в багтраке информацию об уязвимостях в популярных корзинах покупок. Вывалилось море инфы, но вся она, увы, оказалась устаревшей: заезженный cart32 древних версий и куча малораскрученных корзинок с багами 2001 года. Поискав через гугл бажные магазины, я понял, что из этого мало что получится – всех, кого можно было сломать, уже по 10 раз сломали, соответственно, оставались те, которых при помощи инфы из багтрака сломать нельзя, - халява на этот вечер отменялась. Первым делом я отправился на гугл и нарыл десяток сайтов, которые и принялся изучать.

Концепт

При поиске уязвимостей в каких-либо скриптах взломщик, не имея исходных кодов этих программ, обычно пытается таким образом модифицировать передаваемые скрипту параметры, чтобы сценарий аварийно прекратил свое выполнение и вывел хоть какие-то сведения. Для этого нужно иметь некоторое представление о работе ломаемой системы. В рассматриваемом примере интернет-магазина вся информация о товарах обычно хранится в базе данных. Соответственно, когда юзер заходит в какой-то раздел магазина, скрипт выбирает из таблицы нужные товары и выводит пользователю эту информацию. Для этого сценарию передается параметр, указывающий, товары из какого раздела интересны посетителю. Часто такая переменная носит характерное имя типа “сategory”, “cid” или “catid”. Я перемещался по найденным сайтам, жестоко издеваясь над скриптами – подставлял во все возможные параметры специально придуманные значения. Какие-то программы вполне откровенно меня посылали, какие-то предлагали повторить попытку позже :). Все это меня не устраивало, мне нужен был скрипт, который завершит работу с ошибкой и выдаст мне об этом сведения. И вот, примерно через час поисков, я наткнулся на такой магазин: после того как я поставил одинарную кавычку после параметра “ProductCode”, скрипт сказал буквально следующее: “Unclosed quotation mark before the character string '780422-S' and Stock >= 0'. /path/to/script.asp, line 15”. Отлично, это наш клиент! Опытный читатель воскликнет: “Да это же sql-injection!” Именно так :). Остается только догадываться, о чем думали программисты, когда разрабатывали систему. Хотя не тороплюсь ли я? Может быть, ничего существенного через этот баг сделать толком и не удастся? Сейчас проверим. Один неприятный момент уже есть – магазин работает на asp, а с этим языком я до сих пор имел не самые близкие отношения, хотя чего там, sql-injection он и в Африке sql-injection.

Содержание  Вперед на стр. 065-074-2
ttfb: 3.4310817718506 ms