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


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


  Mostrar Mensajes
Páginas: [1] 2 3 4
1  Foros Generales / Dudas Generales / Re: ¿Es posible descargar de golpe estos PDF de una Web? en: 29 Julio 2020, 17:07




¿Dónde pongo el enlace https://www.aguastenerife.org/9_OCAS/pdf/OCAS_InfGeneral_2018_corto.pdf?

¿Qué hago ahora?

Saludos.

Tienes que copiar las 133 lineas que te puse en el primer mensaje y cuando lo ejecutes deberías ver algo así.


Resultado con todos los pdfs descargados:

2  Foros Generales / Dudas Generales / Re: ¿Es posible descargar de golpe estos PDF de una Web? en: 28 Julio 2020, 23:03
Hola:

Busco todos los PDF de esos enlaces de esta web https://www.aguastenerife.org/9_OCAS/pdf/OCAS_InfGeneral_2018_corto.pdf

Son muchísimos y de momento los descargo uno a uno al disco duro, ya que el de la Web dice que no los tiene todos para descargarlo de golpe.

¿Puedes poner el código fuente del programa que hicieron?

¿Qué consola están habalndo exactamente, de Windows, del navegador web, de Visual Studio?

Tengo instalado Python de Visual studio Community 2019 por si acaso.

Saludos.
El codigo te lo puse en el mensaje anterior, fijate que al final pongo esto para descargarlos. Ejecutalo con python 3.

Código
  1. for pdf in pdfs:
  2.    print("[ * ]DESCARGANDO " + str(pdf))
  3.    wget.download(pdf)

Me refería a la consola del navegador, simplemente pones un código javascript y te pinta el output correspondiente.
3  Foros Generales / Dudas Generales / Re: ¿Es posible descargar de golpe estos PDF de una Web? en: 28 Julio 2020, 22:50
Sigo sin entender como sacaron todos esos enlaces.

¿No hay otro languaje con cual se pueda hacer?

Ya tengo instalado Python, 2 y 3.

Si se puede hacer con otro lenguaje, estoy dispuesto también.

Los enlaces se pueden sacar de distintas formas, o bien con javascript poniendo ese código en la consola o en python haciendo una petición GET y parseando el DOM para sacarlos y meterlos en un array.

En el código que te puse antes simplemente los metí en un array a mano y después descargas cada uno.
Has probado a ver si es lo que buscas?
4  Foros Generales / Dudas Generales / Re: ¿Es posible descargar de golpe estos PDF de una Web? en: 28 Julio 2020, 16:39
Una vez que ya tienes los enlaces que te ha sacado drvy puedes hacer un sencillo script en python para descargar cada pdf, a continuación te dejo uno que te los descarga todos.
Te recomiendo que lo ejecutes en la carpeta donde los quieras tener por que si por ejemplo lo ejecutas en el escritorio se te van a descargar todos ahí.

Si te dice que no encuentra el modulo 'wget' pon en la terminal pip3 install wget.

Código
  1. import wget
  2.  
  3. pdfs = ["http://www.aguastenerife.org/9_OCAS/fichas/2018/0202302.pdf",
  4. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0203301.pdf",
  5. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0203306.pdf",
  6. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505719.pdf",
  7. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504321.pdf",
  8. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505715.pdf",
  9. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505701.pdf",
  10. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504207.pdf",
  11. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505602.pdf",
  12. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505710.pdf",
  13. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504303.pdf",
  14. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505702.pdf",
  15. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504211.pdf",
  16. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504210.pdf",
  17. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504306.pdf",
  18. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504311.pdf",
  19. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505704.pdf",
  20. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504302.pdf",
  21. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504301.pdf",
  22. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504202.pdf",
  23. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504305.pdf",
  24. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504307.pdf",
  25. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504319.pdf",
  26. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505709.pdf",
  27. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504206.pdf",
  28. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504308.pdf",
  29. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505707.pdf",
  30. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505705.pdf",
  31. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0504304.pdf",
  32. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505706.pdf",
  33. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505711.pdf",
  34. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505712.pdf",
  35. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505734.pdf",
  36. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505713.pdf",
  37. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505617.pdf",
  38. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505716.pdf",
  39. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505703.pdf",
  40. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0507306.pdf",
  41. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505606.pdf",
  42. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0505607.pdf",
  43. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0712013.pdf",
  44. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1113203.pdf",
  45. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1113206.pdf",
  46. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1113202.pdf",
  47. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0712015.pdf",
  48. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0712012.pdf",
  49. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0710707.pdf",
  50. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0710805.pdf",
  51. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0712011.pdf",
  52. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102805.pdf",
  53. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102806.pdf",
  54. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603505.pdf",
  55. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603507.pdf",
  56. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102804.pdf",
  57. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0604404.pdf",
  58. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603503.pdf",
  59. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603508.pdf",
  60. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0604403.pdf",
  61. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0604412.pdf",
  62. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0604405.pdf",
  63. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603506.pdf",
  64. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102808.pdf",
  65. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603502.pdf",
  66. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603514.pdf",
  67. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0503407.pdf",
  68. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0503415.pdf",
  69. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603509.pdf",
  70. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603501.pdf",
  71. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603512.pdf",
  72. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102812.pdf",
  73. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603604.pdf",
  74. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603605.pdf",
  75. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102902.pdf",
  76. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603614.pdf",
  77. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603615.pdf",
  78. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102903.pdf",
  79. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102901.pdf",
  80. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603616.pdf",
  81. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0101906.pdf",
  82. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603613.pdf",
  83. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0101901.pdf",
  84. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102803.pdf",
  85. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102810.pdf",
  86. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603612.pdf",
  87. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102813.pdf",
  88. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102801.pdf",
  89. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603602.pdf",
  90. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102904.pdf",
  91. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0101903.pdf",
  92. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0101902.pdf",
  93. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603601.pdf",
  94. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102802.pdf",
  95. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102807.pdf",
  96. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0603611.pdf",
  97. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102907.pdf",
  98. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102906.pdf",
  99. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0406610.pdf",
  100. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0406609.pdf",
  101. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0102811.pdf",
  102. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0406621.pdf",
  103. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0708012.pdf",
  104. "http://www.aguastenerife.org/9_OCAS/fichas/2018/0708002.pdf",
  105. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1217003.pdf",
  106. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216907.pdf",
  107. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216003.pdf",
  108. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216004.pdf",
  109. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216006.pdf",
  110. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1217002.pdf",
  111. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216011.pdf",
  112. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216002.pdf",
  113. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1215904.pdf",
  114. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1217004.pdf",
  115. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216901.pdf",
  116. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216005.pdf",
  117. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1214901.pdf",
  118. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1214917.pdf",
  119. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1215901.pdf",
  120. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1214904.pdf",
  121. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216911.pdf",
  122. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216903.pdf",
  123. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216906.pdf",
  124. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216914.pdf",
  125. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1217007.pdf",
  126. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1217006.pdf",
  127. "http://www.aguastenerife.org/9_OCAS/fichas/2018/1216912.pdf"
  128. ]
  129.  
  130. for pdf in pdfs:
  131.    print("[ * ]DESCARGANDO " + str(pdf))
  132.    wget.download(pdf)
  133.  
  134.  
5  Foros Generales / Foro Libre / Re: Temas makineros en: 9 Mayo 2020, 20:52
Esa música me recuerda a neng xD

6  Seguridad Informática / Abril negro / Abril Negro 2020 - phpRecon en: 7 Mayo 2020, 23:56

Autor: medi.
Nombre de la herramienta: phpRecon
Categoría: Hacking web.
Lenguajes usados: php y js.


A continuación les dejo el enlace a github con el proyecto:
Github : phpRecon



Definiendo la idea:
La idea de este programa es recolectar información dado un dominio para planificar un vector de ataque.
Los tipos de informacion a mostrar son los siguientes:

- Comentarios HTML para obtener posibles funcionalidades ocultas, información adicional sobre algún componente del backend.
- Formularios HTML con todos sus input para hacernos una idea de si implementa algún tipo de mecanismo para defenderse de ataques tipo CSRF y derivados.
- Cabeceras HTTP, de este modo podemos fijarnos como hace uso del cache, manejo de cookies...



Funcionamiento:
Lo primero es introducir una URL, con este dato el backend hará una solicitud GET para obtener todos los enlaces que pertenecen al mismo dominio, para cada enlace obtenido hará otra solicitud GET para obtener los enlaces del mismo dominio y guardarlos en un array, por otro lado solo obtiene los enlaces de la URL introducida hasta un nivel de dos capas.

Tomemos un ejemplo:

Introducimos la url "http://mypage.com". Esta url tiene un enlace: "http://mypage.com/login". A su vez, la página de inicio de sesión tiene el enlace "http://mypage.com/register" que se guardará correctamente en nuestro array, pero si esta URL contiene "http://mypage.com/forgot-password" no la guardaremos en el array ya que han pasado más de dos capas desde la URL introducida.

Finalmente, iteramos a través de cada URL en el array generado y guardamos todos los comentarios HTML, formularios, cabeceras HTTP de cada página y mostramos el archivo robots.txt en caso de que exista.

Interfaz:


Este es el resultado de introducir alguna pagina:
El ejemplo que muestro a continuación es de una pagina miá en local.

Pongamos la url 'http://hatnet.com:81':





En este caso solo he mostrado la información de un enlace para que os hagáis una idea del funcionamiento, también en la parte de la arriba podemos filtrar lo que queremos mostrar en función de nuestras necesidades.
7  Programación / PHP / Re: Hash y control de usuario en: 4 Mayo 2020, 19:57
Buenas, veo varias cosas que se pueden mejorar en tu código:

1. Siempre que quieras redirigir a una determinada pagina puedes usar la función 'header' de php para mandar determinadas cabeceras, en este caso concreto puedes usar la cabecera 'Location' seguida del fichero a donde lo quieras redirigir.Por ejemplo:
Código
  1. header('Location: index.php');'

2. Y por ultimo para acceder a los datos del array '$_SESSION' en vez de pasárselo en formularios con parámetros ocultos solo debes poner 'session_start()' en todos los ficheros php que vas a necesitar tales datos, de esta forma podrás acceder a los datos del array sin problema.
Por ejemplo, en el index.php puedes poner session_start() al inicio del fichero y acceder al uid del usuario de forma normal, $_SESSION['uid']

3.Con lo que preguntas de comprobar las contraseñas es cifrar la contraseña que ha metido el usuario en el formulario y comprobar si su hash correspondiente es valido con el hash de la contraseña en la base de datos.
Código
  1. <?php
  2. $hash = password_hash($pw, PASSWORD_DEFAULT, array("cost"=>12));
  3. $isOk = password_verify($passUserBD, $hash);


Al código te faltaría meterle mas consultas sql pero te he ordenado lo de redirigir a los usuarios.
Código
  1. <?php
  2.    //conectar BD
  3.    include("conectar_bd.php");
  4.    conectar_bd();
  5.  
  6.    $usr = $_POST['usuario'];
  7.    $pw = $_POST['password'];
  8.    //Obtengo la version cifrada del password
  9.    $pw_enc =password_hash($pw, PASSWORD_DEFAULT, array("cost"=>12));
  10.  
  11.    $result=$conexio->query("SELECT id_usuario FROM tbl_users
  12.            INNER JOIN ctg_tiposusuario
  13.            ON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuario
  14.            WHERE tx_username = '".$usr."'
  15.            AND tx_password = '".$pw_enc."' ");
  16.  
  17.    $uid = "";
  18.  
  19.    //Si existe al menos una fila
  20.    if( $fila=$result->fetch_array(MYSQLI_ASSOC))
  21.    {
  22.        //Obtener el Id del usuario en la BD
  23.        $uid = $fila['id_usuario'];
  24.        //Iniciar una sesion de PHP
  25.        session_start();
  26.        //Crear una variable para indicar que se ha autenticado
  27.        $_SESSION['autenticado'] = 'SI';
  28.        //Crear una variable para guardar el ID del usuario para tenerlo siempre disponible
  29.        $_SESSION['uid'] = $uid;
  30.        //CODIGO DE SESION
  31.        header('Location: principalcero.php');
  32.    }
  33.    else
  34.    {
  35.        //En caso de que no exista una fila...
  36.        header('Location: index.php');
  37.    }
  38.  

Un saludo
8  Programación / PHP / Duda curl y buffer php en: 1 Marzo 2020, 21:28
Muy buenas, he conseguido mediante la librería de curl en php pintar los directorios encontrados dado un dominio de forma dinámica mediante el buffer de php, ya que sino lo haces así tienes que esperar a que se procesen todas las peticiones para que te pinte los resultados.

El código que muestro a continuación funciona a la perfección pero lo he estado intentando pasar a programación POO y no los pinta de forma dinámica, ¿alguien sabe a que se debe?

Buffer php => https://www.php.net/manual/en/function.ob-start.php


Código en programacion estructurada como prueba de concepto
Código
  1. <?php
  2. $lista = file_get_contents('lista.txt');
  3. $directorios = explode("\n" , $lista);
  4.  
  5. foreach($directorios as $dir)
  6.        $list[] = trim("http://www.google.com/".$dir);
  7.  
  8. echo "<pre>";
  9. echo "Loading ...";
  10. $directorios = array();
  11. $rolling_window = 100;
  12. $rolling_window = (count($list) < $rolling_window) ? count($list) : $rolling_window;
  13. $master = curl_multi_init();
  14. $curl_arr = array();
  15. $std_options = array
  16. (
  17.    CURLOPT_RETURNTRANSFER => true,
  18.   CURLOPT_FOLLOWLOCATION => true,
  19.    CURLOPT_USERAGENT => 'DHunter');
  20. $options = $std_options;
  21. for ($i = 0; $i < $rolling_window; $i++)
  22. {
  23.    $ch = curl_init();
  24.    $options[CURLOPT_URL] = $list[$i];
  25.    curl_setopt($ch, CURLOPT_HEADER, 0);
  26.    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,'progress');
  27.    curl_setopt($ch, CURLOPT_NOPROGRESS, false);
  28.    curl_setopt_array($ch,$options);
  29.    curl_multi_add_handle($master, $ch);
  30. }
  31. $i = 0;
  32. do
  33. {
  34.  while(($execrun = curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
  35.  if($execrun != CURLM_OK)
  36.      break;
  37.  while($done = curl_multi_info_read($master))
  38.  {
  39.      $info = curl_getinfo($done['handle']);
  40.      if ($info['http_code'] == 200)
  41.      {
  42.          $directorios[] = $info['url'];
  43.          $i++;
  44.          echo  $info['url']."<br>";
  45.       }
  46.      $output = curl_multi_getcontent($done['handle']);
  47.      $ch = curl_init();
  48.      curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,'progress');
  49.      curl_setopt($ch, CURLOPT_HEADER, 0);
  50.      curl_setopt($ch, CURLOPT_NOPROGRESS, false);
  51.      curl_setopt_array($ch,$options);
  52.      curl_multi_add_handle($master, $ch);
  53.      curl_multi_remove_handle($master, $done['handle']);
  54.      $options[CURLOPT_URL] = $list[$i++];
  55.  }
  56. }while ($running);
  57. echo "<br>Done";
  58.  
  59. function progress()
  60. {
  61.    ob_flush();
  62.    flush();
  63. }
  64.  


Esta es la version de POO que no pinta los resultados de forma dinamica:
Clase BruterDirectory
Código
  1. <?php
  2.    class BruterDirectory extends Bruter
  3.    {
  4.        private $directories;
  5.        private $domain;
  6.        public $handle;
  7.  
  8.        public function __construct($domain,$list)
  9.        {
  10.            parent::__construct($list);
  11.            $this -> domain = $domain;
  12.            $this -> directories = array();
  13.        }
  14.  
  15.       public function doSearch()
  16.       {
  17.           ob_implicit_flush(true);
  18.           ob_end_flush();
  19.           ob_start();
  20.           echo "<pre>";
  21.           echo "Loading ...";
  22.           ob_flush();
  23.           flush();
  24.             $directorios = array();
  25.             $rolling_window = 100;
  26.             $rolling_window = (count($this -> list) < $rolling_window) ? count($this -> list) : $rolling_window;
  27.             $master = curl_multi_init();
  28.             $curl_arr = array();
  29.             $std_options = array
  30.             (
  31.                 CURLOPT_RETURNTRANSFER => true,
  32.                 CURLOPT_FOLLOWLOCATION => true,
  33.                 //CURLOPT_MAXREDIRS => 2,
  34.                 CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Windows; Windows10_64bits; rv:72.0) Gecko/20100101 Firefox/72.0');
  35.             $options = $std_options;
  36.             for ($i = 0; $i < $rolling_window; $i++)
  37.             {
  38.               $ch = curl_init();
  39.               $options[CURLOPT_URL] = $this -> list[$i];
  40.               curl_setopt($ch, CURLOPT_HEADER, 0);
  41.               curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,array($this, 'progress'));
  42.               curl_setopt($ch, CURLOPT_NOPROGRESS, false);
  43.               curl_setopt_array($ch,$options);
  44.               curl_multi_add_handle($master, $ch);
  45.             }
  46.             $i = 0;
  47.             do
  48.             {
  49.               while(($execrun = curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
  50.               if($execrun != CURLM_OK)
  51.                   break;
  52.               while($done = curl_multi_info_read($master))
  53.               {
  54.                   $info = curl_getinfo($done['handle']);
  55.                   if ($info['http_code'] == 200)
  56.                   {
  57.                       $directorios[] = $info['url'];
  58.                       $i++;
  59.                       echo  $info['http_code']."<br>";
  60.                    }
  61.                   $output = curl_multi_getcontent($done['handle']);
  62.                   $ch = curl_init();
  63.                   curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, array($this, 'progress'));
  64.                   curl_setopt($ch, CURLOPT_HEADER, 0);
  65.                   curl_setopt($ch, CURLOPT_NOPROGRESS, false);
  66.                   curl_setopt_array($ch,$options);
  67.                   curl_multi_add_handle($master, $ch);
  68.                   curl_multi_remove_handle($master, $done['handle']);
  69.                   $options[CURLOPT_URL] = $this -> list[$i++];
  70.               }
  71.           }while ($running);
  72.         curl_multi_close($master);
  73.         echo "<br>Done";
  74.         return $directorios;
  75.       }
  76.  
  77.       public function progress()
  78.       {
  79.           ob_flush();
  80.           flush();
  81.       }
  82.  

Y la llamada al metodo "doSearch" en el fichero main.php
Código
  1. $domain="http://www.google.com";
  2. $list = file_get_contents('lista.txt');
  3. $directorios = explode("\n" , $list);
  4. foreach($directorios as $dir)
  5.        $urls[] = trim($domain.$dir);
  6. $bruterDir = new BruterDirectory($domain,$urls);
  7. dirs = $bruterDir -> doSearch();
  8.  

Cualquier sugerencia es bienvenida.
9  Seguridad Informática / Hacking Ético / Re: Programado de tareas en: 28 Febrero 2020, 22:37
Lo que estas buscando es Cron jobs.
En esta pagina lo explican bien
 https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
10  Programación / Desarrollo Web / Re: [Resuelto] ¿Como puedo modificar la URL? en: 28 Febrero 2020, 22:35
Casi siempre que se tenga dudas entre hacer algo utilizando la configuración del servidor y hacerlo en php, suele ser mucho más óptimo hacerlo modificando los archivos del servidor.
Pero en este caso podemos encontrarnos con que sea una ruta personalizada y que no tenga nada que ver con la estructura de directorios del servidor. Por ejemplo ahora me encuentro haciendo una pagina web de retos a lo CTF y las rutas que tengo son las siguientes:
A la hora de especificar las rutas vereis unos '{}', son unos parametros que se pasan por la url de modo que desde el controlador podemos obtenerlos y filtrar resultados.
Código
  1. //RETOS
  2. //Muestra todos los usuarios que han completado esos retos
  3. Route::get('retos/validations/{reto}','RetoController@getValidations');//Ej:http://mypage.com/retos/validations/Nombre-Reto
  4. //Pagina principal que muestra todas las categorias disponibles
  5. Route::get('retos','RetoController@getRetos');;//Ej:http://mypage.com/retos
  6. //Pagina con un formulario para crear reto
  7. Route::get('retos/crear','RetoController@getCrear');;//Ej:http://mypage.com/retos/crear
  8. //Enviando datos para crear reto
  9. Route::post('retos/crear','RetoController@postCrear');;//Peticion POST para crear un nuevo reto
  10. //Obtiene todos los retos de una categoria
  11. Route::get('retos/{categoria}','RetoController@getRetosCategoria');;//Ej:http://mypage.com/retos/reversing
  12. //Muestra un reto especifico
  13. Route::get('retos/{categoria}/{reto}','RetoController@getReto');//Ej:http://mypage.com/reversing/nombre-reto
  14.  
Tomando como referencia el ultimo reto no tendria sentido crear esa estructura de directorios sino que en base a esos parametros puede obtener los datos de ese reto y mostrarselos al usuario en una vista.
El metodo 'getReto' del controlador 'RetoController' es el siguiente, fijaos que recibe los dos parametros pasados en la ruta.
Código
  1. public function getReto($categoria,$reto)
  2.    {
  3.      $idReto =
  4.      Project::where('nombre',$reto)
  5.      ->pluck('id')
  6.      ->all()[0];
  7.  
  8.      return view('retos.mostrar',
  9.      array('reto' => Project::findOrFail($idReto)));
  10.    }
  11.  
Y ya en la vista mostramos el reto que hemos pasado en el array
Páginas: [1] 2 3 4
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines