Ch3ck
30.06.2006, 15:17
Первый прикол подойдет для абсолютно любой жертвы. Угадай, кого больше всего боится непросвещенный юзер? Правильно, хакеров! Хакер для ламера сродни божеству, которого малограмотный пользователь старается избегать. Как только работник увидит в консоли слово hack, он тут же вскочит с места и закричит, как будто его писюк загорелся! Давай же заставим бедного работника сделать это . Попробуем составить изысканный списочек файлов, после просмотра которого лицо даже самого стойкого человека покроется красными пятнами. Главное - пофантазировать и составить массив ярких имен файлов, которые ну никак не должны находиться на компе жертвы. Пусть это будут слова cool_porn, trojan, exploit, ddos, attack и т.п. Мы не будем создавать эти файлы физически. Это не элитно . Лучше наколбасить какой-нибудь скрипт, который заменит команду ls.
Как ты знаешь, после входа пользователя в систему подгружается файл ~/.bash_profile– эдакий профиль каждого логина (при использовании неначального/порожденного интерактивного командного интерпретатора все настройки читаются из конфига /profile, ~/.profile ~/.bash_profile и ~/.bash_login[/ оболочкой игнорируются, так что будь внимателен). Там могут объявляться новые переменные, процедуры и алиасы. Как раз последнее нам и пригодится. Мы засунем в профиль алиас на команду ls, а точнее, подгрузим шпионский файл ~/.functions с подложными алиасами, чтобы не вызвать панику у слегка «продвинутого» юзера.
Прописав алиас в якобы служебном файле ~/.functions, мы добились замены системной команды ls на ~/.tmp/.ls (во временном каталоге будут находиться все твои подложные сценарии). Когда плацдарм для прикола готов, можно приступить непосредственно к кодингу.
Как я уже говорил, наша задача состоит в том, чтобы вывести список хакерских файлов по команде ls. Это просто, мало того, для остроты ощущений мы оформим все в цвете – ведь юзер привык, что листинг окрашивает имена документов в разные цвета. Сперва поставим одно условие: если команда имеет параметры, то необходимо обращаться к реальному /bin/ls. Только в противном случае можно активизировать прикол. Таким образом, юзер не сразу догадается, что его подставили.
.ls собственной персоной
#!/bin/sh
if [ "$*" == "" ]
then
echo -e "\033[01;32m0day-exploit\t\t\t\033[00;mmremap.c\n\033[01;32m7350fun\t\t\t\t\033[01;31moral_sex.mpg"
echo -e "all-logwipers.tgz\t\t\033[00;mpasswords.crk\n\033[01;31manal_sex.avi\t\t\t\033[01;34mporno"
.......
exit
fi
/bin/ls --color=auto $*
Необходимо знать, что служебная переменная $* хранит в себе аргументы команды. Ее мы, собственно, и анализируем. Для цветопечати нужно воспользоваться конструкцией \033[код_фона;код_цвета+m. Вся сложность прикола в том, что тебе потребуется грамотно выстроить и окрасить цепочку файлов. Результат поражает! Проверено на реальных жертвах.
Злополучные каталоги
Если тебе кажется, что прикол с ls не выведет жертву из себя, можно попробовать насолить коллеге с помощью команды cd. Интересно, как нормальный человек отреагирует на то, что из-за перехода в каталог стали бы удаляться файлы во всех папках? :). Пришло время это проверить. Прописывай второй алиас в виде alias cd=~/.tmp/.cd и приступай к кодингу смертельного сценария.
На самом деле ничего удалять мы не будем, просто припугнем юзера, что вся его информация может полететь к чертовой матери, и не забудем перехватить сигнал SIGINT (который, как известно, посылается при нажатии Ctrl+C). Все это реально сделать в маленьком bash-скрипте.
Запусти cd и попрощайся с системой
#!/bin/sh
trap true SIGINT
DIRS=`/bin/ls -1 /`
for each in $DIRS
do
echo "rm: cannot remove directory \`/$each': Is a directory"
rand=$((RANDOM%10+1))
sleep $rand
done
Первым делом мы перехватили сигнал. Это осуществляется шелловой командой trap, которой передаются два параметра: команда, выполняемая после прихода сигнала, и сам сигнал. Далее выполняем листинг корневого каталога и загоняем вывод в переменную. Затем создаем цикл по каждой строчке переменной (а строка – название папки в корне) и оповещаем юзера, что внутренности системы незамедлительно удаляются (лишь верхним папкам удается уцелеть. Чтобы жертва не приняла удаление за прикол, генерируем случайное число от 1 до 10 и молчим все это время. В итоге создается реальное ощущение работы с каталогами .
Угадай, что сделает юзер в первую очередь, как увидит подобное сообщение? Разумеется, нажмет Ctrl+C. Но не тут-то было! Перехват сделает свое дело и не даст команде аварийно завершиться. Юзер напрасно тратит нервы на убийство роковой команды, бьет кулаками по клавиатуре и монитору и кричит благим матом . Зрелище, которое ты так давно хотел увидеть.
Он выключил сервер!
Что делают работники в консоли? Правильно, работают . Корректируют документы, компилят различные сценарии и никчемные проекты. Пришло время нарушить их рабочую идиллию и вмешаться в процесс грязными хакерскими руками: создать алиас на профессиональный редактор vi, которым пользуются особо одаренные линуксоиды. Этот скрипт внушит твоему любимому коллеге мысль, от которой у него может пропасть дыхание и желание жить. На его экране появится сообщение, характерное для процесса завершения работы, консоль повиснет, а ты и твои заранее предупрежденные сотрудники повернетесь к нему и начнете «благодарить» разными словами. Ведь он только что… удаленно уронил сервер!
Уверен, что у такого работника пропадет желание трудится до конца смены, даже несмотря на то, что на самом деле никакого шатдауна не произойдет.
.vi вызывающий halt
#!/bin/sh
DATE=$(LC_ALL=en date +'%c')
TTY=$(basename `tty`)
echo -e "Broadcast message from $USER (pts/$TTY) ($DATE)\n\nThe system is going down for system halt NOW!"
sleep 500
Чтобы осуществить прикол, нужно знать вывод команды halt. Уверен, ты выучил его наизусть. Осталось лишь вставить в мессагу переменные $USER, $TTY и текущую дату. Последняя выводится на буржуйском языке в формате %c, как это видно из кода. Что касается псевдоустройства, то прежде чем его напечатать, необходимо удалить из переменной каталог /dev/. Эта проблема быстро решается при помощи регвыра утилиты sed, либо при помощи программы basename. В скрипте был использован второй вариант. Можешь нагрузить сценарий перехватом сигнала SIGINT (чтобы реальнее было!) и отключением отображения символов (с помощью команды stty).
Удаляем... и зависаем!
Часто юзер вычищает из своего каталога мусор. Чтобы выпендриться, некоторые личности юзают консольную команду rm, а не удобный интерфейс редактора mc. Над такими коллегами мы и будем прикалываться. Представь, что юзер запустил rm, а бинарник злосчастно завис. Жертва будет искать всевозможные причины – протрояненный /bin/rm, падение сервера или повреждение кабеля. От тебя требуется лишь поддакивать ламеру, мол, у меня такая же проблема, не волнуйся, друг .
Алгоритм сценария будет следующим: скрипт проанализирует параметры rm и возьмет последний в качестве файла (так оно и бывает чаще всего). Затем будет выведено предупреждение об удалении особо важного документа. Юзер, не раздумывая, попытается нажать «y», но не тут-то было! Консоль намертво подвиснет. Это произойдет из-за того, что в сценарии будет выключено отображение ввода, а также перехвачен сигнал SIGINT.
.rm – удалит файл и подвесит систему
#!/bin/sh
trap "stty echo" EXIT
trap true SIGINT
for file in "$@"
do
last=$file
done
echo -n "rm: remove write-protected regular file \`$file'? "
`stty -echo`
while read $deep
do
false > /dev/null 2> &1
done
Видно, что на всякий случай я перехватил и второй сигнал – сигнал выхода из программы. Когда это произойдет (через kill и т.п.), все символы снова будут отображаться как ни в чем не бывало. До повторного запуска /bin/rm .
Только для посвященных!
По счастливой случайности ты увидел открытую консоль админа, который владеет рутовым паролем? Очень хорошо! Самое время для приколов над умными людьми. Я уверен, сисадм долго будет искать подставу, а когда найдет, не отойдет от открытой консоли ни на шаг. К тому же, если администратор не запалил тебя у его компа, у тебя будет железное алиби . Да, собственно, прикол будет безобидным. Всего-то выведем админу сообщение, что он недостоин рутовых привилегий. Поверь, такие мессаги больше всего бесят сисадмов .
Как ты догадался, мы переопределим вызов /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. Можно придумать всего один прикол, а в остальных случаях исправно выполнять команду. Возможно, так будет интереснее: юзер не сразу поймет, что над ним прикололись.
(Це) ][akep
Как ты знаешь, после входа пользователя в систему подгружается файл ~/.bash_profile– эдакий профиль каждого логина (при использовании неначального/порожденного интерактивного командного интерпретатора все настройки читаются из конфига /profile, ~/.profile ~/.bash_profile и ~/.bash_login[/ оболочкой игнорируются, так что будь внимателен). Там могут объявляться новые переменные, процедуры и алиасы. Как раз последнее нам и пригодится. Мы засунем в профиль алиас на команду ls, а точнее, подгрузим шпионский файл ~/.functions с подложными алиасами, чтобы не вызвать панику у слегка «продвинутого» юзера.
Прописав алиас в якобы служебном файле ~/.functions, мы добились замены системной команды ls на ~/.tmp/.ls (во временном каталоге будут находиться все твои подложные сценарии). Когда плацдарм для прикола готов, можно приступить непосредственно к кодингу.
Как я уже говорил, наша задача состоит в том, чтобы вывести список хакерских файлов по команде ls. Это просто, мало того, для остроты ощущений мы оформим все в цвете – ведь юзер привык, что листинг окрашивает имена документов в разные цвета. Сперва поставим одно условие: если команда имеет параметры, то необходимо обращаться к реальному /bin/ls. Только в противном случае можно активизировать прикол. Таким образом, юзер не сразу догадается, что его подставили.
.ls собственной персоной
#!/bin/sh
if [ "$*" == "" ]
then
echo -e "\033[01;32m0day-exploit\t\t\t\033[00;mmremap.c\n\033[01;32m7350fun\t\t\t\t\033[01;31moral_sex.mpg"
echo -e "all-logwipers.tgz\t\t\033[00;mpasswords.crk\n\033[01;31manal_sex.avi\t\t\t\033[01;34mporno"
.......
exit
fi
/bin/ls --color=auto $*
Необходимо знать, что служебная переменная $* хранит в себе аргументы команды. Ее мы, собственно, и анализируем. Для цветопечати нужно воспользоваться конструкцией \033[код_фона;код_цвета+m. Вся сложность прикола в том, что тебе потребуется грамотно выстроить и окрасить цепочку файлов. Результат поражает! Проверено на реальных жертвах.
Злополучные каталоги
Если тебе кажется, что прикол с ls не выведет жертву из себя, можно попробовать насолить коллеге с помощью команды cd. Интересно, как нормальный человек отреагирует на то, что из-за перехода в каталог стали бы удаляться файлы во всех папках? :). Пришло время это проверить. Прописывай второй алиас в виде alias cd=~/.tmp/.cd и приступай к кодингу смертельного сценария.
На самом деле ничего удалять мы не будем, просто припугнем юзера, что вся его информация может полететь к чертовой матери, и не забудем перехватить сигнал SIGINT (который, как известно, посылается при нажатии Ctrl+C). Все это реально сделать в маленьком bash-скрипте.
Запусти cd и попрощайся с системой
#!/bin/sh
trap true SIGINT
DIRS=`/bin/ls -1 /`
for each in $DIRS
do
echo "rm: cannot remove directory \`/$each': Is a directory"
rand=$((RANDOM%10+1))
sleep $rand
done
Первым делом мы перехватили сигнал. Это осуществляется шелловой командой trap, которой передаются два параметра: команда, выполняемая после прихода сигнала, и сам сигнал. Далее выполняем листинг корневого каталога и загоняем вывод в переменную. Затем создаем цикл по каждой строчке переменной (а строка – название папки в корне) и оповещаем юзера, что внутренности системы незамедлительно удаляются (лишь верхним папкам удается уцелеть. Чтобы жертва не приняла удаление за прикол, генерируем случайное число от 1 до 10 и молчим все это время. В итоге создается реальное ощущение работы с каталогами .
Угадай, что сделает юзер в первую очередь, как увидит подобное сообщение? Разумеется, нажмет Ctrl+C. Но не тут-то было! Перехват сделает свое дело и не даст команде аварийно завершиться. Юзер напрасно тратит нервы на убийство роковой команды, бьет кулаками по клавиатуре и монитору и кричит благим матом . Зрелище, которое ты так давно хотел увидеть.
Он выключил сервер!
Что делают работники в консоли? Правильно, работают . Корректируют документы, компилят различные сценарии и никчемные проекты. Пришло время нарушить их рабочую идиллию и вмешаться в процесс грязными хакерскими руками: создать алиас на профессиональный редактор vi, которым пользуются особо одаренные линуксоиды. Этот скрипт внушит твоему любимому коллеге мысль, от которой у него может пропасть дыхание и желание жить. На его экране появится сообщение, характерное для процесса завершения работы, консоль повиснет, а ты и твои заранее предупрежденные сотрудники повернетесь к нему и начнете «благодарить» разными словами. Ведь он только что… удаленно уронил сервер!
Уверен, что у такого работника пропадет желание трудится до конца смены, даже несмотря на то, что на самом деле никакого шатдауна не произойдет.
.vi вызывающий halt
#!/bin/sh
DATE=$(LC_ALL=en date +'%c')
TTY=$(basename `tty`)
echo -e "Broadcast message from $USER (pts/$TTY) ($DATE)\n\nThe system is going down for system halt NOW!"
sleep 500
Чтобы осуществить прикол, нужно знать вывод команды halt. Уверен, ты выучил его наизусть. Осталось лишь вставить в мессагу переменные $USER, $TTY и текущую дату. Последняя выводится на буржуйском языке в формате %c, как это видно из кода. Что касается псевдоустройства, то прежде чем его напечатать, необходимо удалить из переменной каталог /dev/. Эта проблема быстро решается при помощи регвыра утилиты sed, либо при помощи программы basename. В скрипте был использован второй вариант. Можешь нагрузить сценарий перехватом сигнала SIGINT (чтобы реальнее было!) и отключением отображения символов (с помощью команды stty).
Удаляем... и зависаем!
Часто юзер вычищает из своего каталога мусор. Чтобы выпендриться, некоторые личности юзают консольную команду rm, а не удобный интерфейс редактора mc. Над такими коллегами мы и будем прикалываться. Представь, что юзер запустил rm, а бинарник злосчастно завис. Жертва будет искать всевозможные причины – протрояненный /bin/rm, падение сервера или повреждение кабеля. От тебя требуется лишь поддакивать ламеру, мол, у меня такая же проблема, не волнуйся, друг .
Алгоритм сценария будет следующим: скрипт проанализирует параметры rm и возьмет последний в качестве файла (так оно и бывает чаще всего). Затем будет выведено предупреждение об удалении особо важного документа. Юзер, не раздумывая, попытается нажать «y», но не тут-то было! Консоль намертво подвиснет. Это произойдет из-за того, что в сценарии будет выключено отображение ввода, а также перехвачен сигнал SIGINT.
.rm – удалит файл и подвесит систему
#!/bin/sh
trap "stty echo" EXIT
trap true SIGINT
for file in "$@"
do
last=$file
done
echo -n "rm: remove write-protected regular file \`$file'? "
`stty -echo`
while read $deep
do
false > /dev/null 2> &1
done
Видно, что на всякий случай я перехватил и второй сигнал – сигнал выхода из программы. Когда это произойдет (через kill и т.п.), все символы снова будут отображаться как ни в чем не бывало. До повторного запуска /bin/rm .
Только для посвященных!
По счастливой случайности ты увидел открытую консоль админа, который владеет рутовым паролем? Очень хорошо! Самое время для приколов над умными людьми. Я уверен, сисадм долго будет искать подставу, а когда найдет, не отойдет от открытой консоли ни на шаг. К тому же, если администратор не запалил тебя у его компа, у тебя будет железное алиби . Да, собственно, прикол будет безобидным. Всего-то выведем админу сообщение, что он недостоин рутовых привилегий. Поверь, такие мессаги больше всего бесят сисадмов .
Как ты догадался, мы переопределим вызов /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. Можно придумать всего один прикол, а в остальных случаях исправно выполнять команду. Возможно, так будет интереснее: юзер не сразу поймет, что над ним прикололись.
(Це) ][akep