Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: SrTrp en 23 Octubre 2020, 19:25 pm



Título: Ya no envía mas correos vía mail()
Publicado por: SrTrp en 23 Octubre 2020, 19:25 pm
Bueno estaba en mi servidor probando enviar correos, probaba de 1 en 1, si me los enviaba correctamente con el archivo que deseaba, pero después cuando implemente esto en mi sistema cree un bucle donde me envió demasiados correos para ser exactos 500, y me los envió con el archivo y todo, después de esto obviamente me percate que había algo mal, lo solucione para que ya no se ciclara pero ya no envía correos ni manualmente de 1 en 1, después revise desde mi bandeja de entrada de correos del servidor y había un mensaje que decía algo así "llego al limite de 500/500 (100%) de correos por hora" aquí les dejo mi código si tienen alguna idea aun que al parecer mi código esta bien no le moví nada al de envió de correos en si me sigue arrogando true.
Código
  1. <?php
  2. $to = $_POST['email'];
  3.  
  4. $from = 'atencionclientes@dominio.com';
  5. $fromName = 'TESTING';
  6.  
  7. $subject = 'ASUNTO';
  8.  
  9. $file = "pdfs_tick/".$_POST['token'].".pdf";
  10.  
  11. $htmlContent = '<h1>Hola '.$_POST['nombre'].'! tu Folio/Referencia es: <strong>'.$_POST['token'].'</strong></h1>';
  12.  
  13. $headers = "De: $fromName"." <".$from.">";
  14.  
  15. $semi_rand = md5(time());
  16. $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  17.  
  18. $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
  19.  
  20. $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
  21. "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n";
  22.  
  23. //preparación de archivo
  24. if(!empty($file) > 0){
  25.    if(is_file($file)){
  26.        $message .= "--{$mime_boundary}\n";
  27.        $fp =    @fopen($file,"rb");
  28.        $data =  @fread($fp,filesize($file));
  29.  
  30.        @fclose($fp);
  31.        $data = chunk_split(base64_encode($data));
  32.        $message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" .
  33.        "Content-Description: ".basename($files[$i])."\n" .
  34.        "Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" .
  35.        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
  36.    }
  37. }
  38. $message .= "--{$mime_boundary}--";
  39. $returnpath = "-f" . $from;
  40.  
  41. $mail = @mail($to, $subject, $message, $headers, $returnpath);
  42.  
  43. echo $mail?"<h1>Correo enviado.</h1>":"<h1>El envío de correo falló.</h1>";
  44.  


Título: Re: Ya no envía mas correos vía mail()
Publicado por: #!drvy en 23 Octubre 2020, 19:46 pm
- Tienes un LFI (Local File Inclusion) en tu codigo. No compruebas nunca si la ruta es valida, solo si el archivo existe. Si te pasan un $_POST['token'] tipo: ../../../../../../../../home/usuario/extracto-bancario podrian sacar cualquier archivo pdf... luego con nullbyte pueden conseguir saltar el .pdf y pillar otros archivos.

Puedes leer más sobre esto aquí:

https://www.php.net/manual/en/security.filesystem.nullbytes.php

- XSS en la línea 12. No escapas $_POST['nombre'].

https://www.php.net/manual/en/function.htmlentities.php

- La variable "$semi_rand" de "rand" tiene más bien poco xD
- El nombre de la variable "$returnpath" no tiene ningún sentido. Son cabeceras (headers)..


Citar
aquí les dejo mi código si tienen alguna idea aun que al parecer mi código esta bien no le moví nada al de envió de correos en si me sigue arrogando true.

No hay mucho que hacer. Has causado SPAM y tu hosting te ha suspendido el servicio temporalmente/permanentemente. La función mail() sigue devolviendo true porque como tal se ejecuta y el correo se envía localmente pero no pasa por los demás nodos.

PD: Linea 33 usas "$files[$i]"... eso imagino es de tu bucle anterior... Pero ya no lo tienes así que eso no se cumple. Te tirará Notice/Warning de index & variable inexistente.

Saludos