elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Ayuda con archivos PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con archivos PHP  (Leído 1,668 veces)
antoz

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Ayuda con archivos PHP
« en: 2 Octubre 2011, 20:53 pm »

Hola tengo que crear un archivo PHP que cumpla las siguientes características:

-Que recoja una variable mediante $_GET["archivo"].
-Que recoja otra variable mediante $_GET["pass"].
-Que para continuar leyendo código se necesite una contraseña (123456).
-Que cree un archivo llamado $archivo0 y que, en caso de que exista, se llame $archivo1, $archivo2 ... y así sucesivamente (de forma que no se repita ningún archivo).
-Que dentro del archivo se escriba $archivo.

Ahora bien, por si no me he explicado bien, lo que quiero es crear un archivo php que  recoja dos variables (archivo y pass) de la siguiente forma: http://ejemplo.com/aplicacion.php?archivo=EJEMPLO?pass=123456, que compruebe si la variable contraseña es 123456 para continuar ejecutando el código y de ser así, que se cree un archivo de texto que se llame como la variable archivo y un número más una unidad. $archivo0.txt, $archivo1.txt, $archivo2.txt... de forma que nunca se repitan los nombres de los archivos y se vayan creando nuevos.

Alguna sugerencia? Gracias de antemano.
Saludos


« Última modificación: 3 Octubre 2011, 16:04 pm por antoz » En línea

antoz

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda con archivos PHP
« Respuesta #1 en: 2 Octubre 2011, 21:45 pm »

Esto es lo que tengo x ahora, pero no funciona:

Código:
<?
$archivo = $_GET["a"];
$password = $_GET["p"];
$nserie = $_GET["n"];
if ($password=="portoscanprivatebuild")
{
$abrir = "count.txt";
$abre = fopen($abrir, "r");
$total = fread($abre, filesize($abrir));
fclose($abre);
$abre = fopen($abrir, "w");
$total = $total + 1;
$grabar = fwrite($abre, $total);
fclose($abre);
$abrir2 = .$archivo. .$total. '.txt';
$fp = fopen($abrir2, "a");
$string = "Numero de serie de la unidad: ".$nserie.;
$write = fputs($fp, $string);
fclose($fp); 
}
else
{
echo "Error";
}
?>


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Ayuda con archivos PHP
« Respuesta #2 en: 2 Octubre 2011, 22:21 pm »

dame un segundo y arreglo el código
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Ayuda con archivos PHP
« Respuesta #3 en: 2 Octubre 2011, 22:52 pm »

Ya está:
http://127.0.0.1/tarea1.php?archivo=test.php&pass=123456

Código
  1. <p>
  2. -Que recoja una variable mediante $_GET["archivo"].
  3. -Que recoja otra variable mediante $_GET["pass"].
  4. -Que para continuar leyendo código se necesite una contraseña (123456).
  5. -Que cree un archivo llamado $archivo0 y que, en caso de que exista, se llame $archivo1, $archivo2 ... y así sucesivamente (de forma que no se repita ningún archivo).
  6. -Que dentro del archivo se escriba $archivo.
  7. </p>
  8.  
  9. <?php
  10. $basepath = dirname(__file__);
  11. if(isset($_GET['archivo']) and isset($_GET['pass'])){
  12. /* Previene Disclosure y crackeo de colisiones */
  13. if(md5(sha1($_GET['pass'])) == 'd93a5def7511da3d0f2d171d9c344e91'){
  14. /* prevee LFI y carácteres inválidos. */
  15. if($file = preg_replace('|[^A-Za-z0-9_\.]|i', '', basename($_GET['archivo']).PHP_EOL)){
  16. if(file_exists($file)){
  17. /* Separa el nombre de la extensión */
  18. if($extension = explode('.', $file)){
  19. $extension = $extension[count($extension) - 1];
  20. $full_filename = substr($file, 0, (strlen($file) - strlen($extension) - 1));
  21. }else{
  22. $extension = '';
  23. $full_filename = $file;
  24. }
  25. /* Ya existe un archivo renombrado con la misma extensión */
  26. if($change = glob($full_filename.'_*.'.$extension)){
  27. /* Obtiene el último archivo incrementado */
  28. sort($change);
  29.  
  30. $full_filename = $change[count($change) - 1];
  31. /* Elimina la extensión */
  32. $full_filename = substr($full_filename, 0, (strlen($full_filename) - strlen($extension) - 1));
  33. /* Obtiene el número incrementado */
  34. $number = explode('_', $full_filename);
  35. $number = $number[count($number) - 1];
  36. /* Cambia el nombre del archivo */
  37. $full_filename = substr($full_filename, 0, (strlen($full_filename) - strlen($number)));
  38. $full_filename .= (int)$number + 1; /* Incementa un valor */
  39.  
  40. file_put_contents($basepath.'/'.$full_filename.'.'.$extension, $full_filename.'.'.$extension);
  41.  
  42. }else{ /* No existe el archivo renombrado, lo creará... */
  43. /* Crea el primer autoincrementado */
  44. file_put_contents($basepath.'/'.$full_filename.'_0.'.$extension, $full_filename.'_0.'.$extension);
  45. }
  46. }else{
  47. file_put_contents($basepath.'/'.$file, $file);
  48. }
  49. }else{
  50. echo '<p>Debe ingresar un nombre de archivo.</p>';
  51. }
  52. }else{
  53. echo '<p>Contraseña inválida.</p>';
  54. }
  55. }
  56. ?>
  57.  
  58. <form method="get" action="?">
  59. <input type="text" name="archivo" /> Nombre del archivo<br />
  60. <input type="password" name="pass" /> Contraseña<br />
  61. <input type="submit" />
  62. </form>

Si ya existe un archivo le cambia solamente el número manteniendo la extensión y evitando lfi para que no pongan de nombre un "../../../../autoexec.bat".
También corregí el nombre del archivo y le agregué un hash en ves de pasar el password en texto plano porque si te hackean te revelan la contraseña, en cambio de esta forma no podrán obtener tu contraseña porque le hize doble codificación para evitar crackeos y colisiones.

De todas formas no me gustó el diseño del código, para mi eso es un mal diseño porque hubiera sudo mas fácil y mas corto poner un
archivo_md5(microtime())_.extension
y con eso no hubieras necesitado obtener numeros ni autoincrementar ni nada. de hecho así lo hace facebook, imageshack, etc.

Además el hacerlo via GET sin tokens es una muy mala practica ya que este código tiene xsrf por causa de su diseño ya que un ataque csrf via get es mucho mas facil de ejecutar que uno via post, por ejemplo:
Código:
<img src="http://127.0.0.1/tarea1.php?archivo=test.php&pass=123456" />
Cosa que no pasaría su estubiera via get.

En fin, yo me hubiera ahorrado mucho código y hacerlo mucho mas seguro si el diseño hubiera sido diferente.

Saludos.
En línea

antoz

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda con archivos PHP
« Respuesta #4 en: 3 Octubre 2011, 16:04 pm »

muchas gracias, es incluso mejor de lo que esperaba  :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con archivos ASF y WMV
Multimedia
dama 1 1,863 Último mensaje 7 Diciembre 2004, 20:19 pm
por Songoku
AYUDA:ARCHIVOS BIN Y CUE
Software
Kasswed 1 9,290 Último mensaje 8 Enero 2005, 01:51 am
por el-brujo
Ayuda con archivos .ape y .cue
Multimedia
josocli 1 1,898 Último mensaje 1 Febrero 2005, 10:40 am
por Songoku
ayuda con archivos nsv
Multimedia
darkwakko 1 1,988 Último mensaje 22 Junio 2006, 20:30 pm
por Sourraund
ayuda archivos wmv
Multimedia
raulll 3 2,173 Último mensaje 28 Septiembre 2006, 09:36 am
por Sourraund
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines