Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #70, ОКТЯБРЬ 2004 г.

Подложи свинью в консоль

Докучаев Дмитрий aka Forb

Хакер, номер #070, стр. 070-114-4


Как ты догадался, мы переопределим вызов /bin/su на поддельный .su. В нем напишем, что «к сожалению, юзер не имеет прав для вызова /bin/su». Естественно, прежде чем смотреть алиасы, админ будет долго анализировать свои права и добавлять себя в неизвестные группы (если, конечно, под рукой будет открытая рутовая консоль), а лишь затем догадается о подставе. Немного фантазии - и ты можешь превратить .su в полноценный рутовый шелл, который будет слегка глючить и сбоить. Вот и весь сценарий:

#!/bin/sh

echo -e "You are not allowed to su root!\nSorry."

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

Что нам стоит шелл построить?

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

Когда юзер отойдет на обед (в туалет, покурить, поговорить по мобиле – нужное подчеркнуть ;)), аккуратно перенеси подложный скрипт в его каталог, а затем запусти его. Перед этим ты умело подкорректируешь приглашение интерпретатора, а также придумаешь заподлянские выводы от команд (впрочем, можешь оставить дефолтовые - я не обижусь). Собственно, творение называется bash, выполняет функции /bin/bash, а на первый взгляд вообще неотличимо от шелла. Но только на первый :). Стоит юзеру выполнить какую-нибудь команду, как скрипт ругнется на нехватку памяти, на права, на ошибку сегментации. В итоге у юзера пропадет желание работать, а у тебя существенно поднимется настроение и боевой дух :).

Поддельный интерпретатор

#!/bin/sh

BEGIN='[user@localhost user]$ ';

trap "echo -n $BEGIN" SIGINT

while true; do

echo -n "$BEGIN"

read cmd

if [ "$cmd" != '' ]

then

rand=$((RANDOM%5+1))

case "$rand" in

"1" ) echo "Segmentation fault (core dumped)"

;;

"2" ) echo "-bash: fork: resource temporary unavaliable"

;;

"3" ) echo "-bash: $cmd: command not found"

;;

"4" ) echo "-bash: $cmd: Permission denied"

;;

"5" ) echo "Wait for 5 minutes"

sleep 300

;;

esac

fi

done

Как я уже сказал, нужно подправить приглашение. Оно задается в первой строке кода. Затем переопределяется реакция на SIGINT (полная имитация Ctrl+C). Потом входим в бесконечный цикл и читаем там команду. Если она поступила, генерируем случайное число от 1 до 5 (это ты уже умеешь делать). Далее анализируем число: если это единица – выдаем ошибку сегментации, двойка – ругаемся на нехватку памяти, тройка – пишем ошибку 404 :), четверка – ругаемся на права, пятерка – вынуждаем юзера подождать 5 минут. Никто не мешает тебе нагенерить собственные шутки и внедрить их в скрипт. Для этого достаточно расширить диапазон рандома и вставить пару строк в конструкцию case/esac. Можно придумать всего один прикол, а в остальных случаях исправно выполнять команду. Возможно, так будет интереснее: юзер не сразу поймет, что над ним прикололись.

Назад на стр. 070-114-3  Содержание  Вперед на стр. 070-114-5