Autor
|
Tema: Depuración (In)Segura (Leído 3,158 veces)
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Los que ya tengan algo de tiempo programando en PHP, sabrán que la mayoría de los servidores tipo hosting están configurados para que el Server no tire los mensajes de error hacia el navegador. Esto complica un poco el tema a la hora de realizar un poco de depuración en un sitio en producción. Lo ideal seria tener un equipo para depurar el código fuera del entorno de producción, depurar y volver a subir el codigo ya corregido, esto es el deber ser cuando trabajas sobre el sitio de alguien mas. Sin embargo en mi caso y para mi pagina personal, me da mucha flojera estar haciendo las cosas como debería de ser, lo cual he implementado un forma de depuración un tanto protegida. NOTA sigue siendo inseguro, pero dado que lo password basados en el tiempo de UNIX que duran 30 segundos son algo difíciles de adivinar y poco probable que alcances a forcebrutear las 999999 posibilidades en los 30 segundos que dura el password, confio el que el metodo es mas o menos seguro para lo que necesito. La idea es básicamente la siguiente, incluir un archivo en el index que busque si existe la variable debug y si existe válida si el valor es igual generado mediante la función TOTP (Función que publique en este mismo subforo ) Si estas condiciones se cumplen habilita que se muestren los errores que arroje el PHP <?php if(isset($_GET["debug"]) { $valor = $_GET["debug"]; if(strncmp($valor,totp ($key),6) == 0) { ini_set('display_startup_errors', 1); } else { header("debug: invalid totp"); } } ?>
Consideraciones - No, no tengo un directorio "s3cr3ct_dir/"
- El archivo key.dat se genero mas o menos asi dd if=/dev/urandom of=key.dat bs=1K count=1
- Se tiene que configurar alguna aplicación authenticator (Obvio)
- Se puede intentar forcebrutear el valor actual del Totp (999999) posibilidades en 30 segundos
- Se puede intentar forcebrutear el valor actual del KEY 2^8192 posibilidades en Toda una eternidad
- Actualmente están los headers activos así que pueden intentarlo, tengo un /dummy que no hace nada, pero los headers se mostrarían
- Si se desactivan los headers no hay manera de saber si X sitio implementa una técnica similar
- Se puede cambiar el nombre de la variable
- Tiene que existir un error en la pagina para que sirva de algo
🏴 Saludos!
|
|
« Última modificación: 3 Enero 2020, 07:03 am por AlbertoBSD »
|
En línea
|
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
999.999 peticiones se hacen con un solo equipo en 30 segundos con multihilo. Imagínate si van por ahí explotando XSS para que todos los visitantes te prueben una. Métele un panel de loggin a tu sitio y si no tienen permiso para ver lo que hay en /desarrollo le haces echo de cualquier otra cosa. Le metes un formulario de adorno para que se entretenga si no tiene permisos. xD
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
#!drvy
|
Te abres un SSH con el servidor de Producción, usas tail -n0 sobre el log de errores de PHP y vas depurando cuanto quieras. Con esto solo añades código que añade esfuerzo a la depuración que hay que hacer.
Saludos
|
|
« Última modificación: 3 Enero 2020, 15:52 pm por #!drvy »
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
999.999 peticiones se hacen con un solo equipo en 30 segundos con multihilo.
Si lo se, voy a hacer un post hablando de como atacar una implementacion de este tipo mediante algo de estadistica. Imagínate si van por ahí explotando XSS para que todos los visitantes te prueben una.
Naaa, los XSS se deben de utilizar para algo mejor, mejor has que me manden sus cookies xD Métele un panel de loggin a tu sitio y si no tienen permiso para ver lo que hay en /desarrollo le haces echo de cualquier otra cosa. Le metes un formulario de adorno para que se entretenga si no tiene permisos. xD
Jajaja si es por trolear podria empezar a mandar codigos de errores de bases de dados o de php entre los comentarios. Te abres un SSH con el servidor de Producción, usas tail -n0 sobre el log de errores de PHP y vas depurando cuanto quieras. Con esto solo añades código que añade esfuerzo a la depuración que hay que hacer.
Si, esa manera es el deber ser, la forma segura claro, sin embargo, esta es otra aproximación. por si no tienes el ssh a la mano. Saludos
|
|
|
En línea
|
|
|
|
MinusFour
|
999.999 peticiones se hacen con un solo equipo en 30 segundos con multihilo. Es un servidor compartido, primero truena el servidor antes que le hagas 999,999 hits. Hay servicios de papelería para errores por si te interesa, por ejemplo papertrail: https://www.papertrail.com/
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Voy a echarle un ojo, acabo de ver su pagina y se ve bien, aunque si da algo de desconfianza que un tercero pueda ver tus logs, me imagino que a de estar cifrado hasta cierto punto (I want to believe). Es un servidor compartido, primero truena el servidor antes que le hagas 999,999 hits.
Acabo de realizar unas pruebas mediante AB y no, no se completa el millón de hits en 30 segundos. El /dummy que no devuelve contenido mas que los headers, arrojo estos resultados con las Concurrencies; 1, 8 (Numero de Cores), 30 y 100 Concurrency Level: 1 Time taken for tests: 30.000 seconds Complete requests: 3113 Failed requests: 0 Total transferred: 1021064 bytes HTML transferred: 0 bytes Requests per second: 103.77 [#/sec] (mean) Time per request: 9.637 [ms] (mean) Time per request: 9.637 [ms] (mean, across all concurrent requests) Transfer rate: 33.24 [Kbytes/sec] received
Concurrency Level: 8 Time taken for tests: 30.001 seconds Complete requests: 13335 Failed requests: 0 Total transferred: 4373880 bytes HTML transferred: 0 bytes Requests per second: 444.49 [#/sec] (mean) Time per request: 17.998 [ms] (mean) Time per request: 2.250 [ms] (mean, across all concurrent requests) Transfer rate: 142.37 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 7 15 4.4 14 52 Processing: 1 3 2.7 2 27 Waiting: 0 3 2.6 2 26 Total: 9 18 5.3 17 56
Concurrency Level: 30 Time taken for tests: 30.005 seconds Complete requests: 14244 Failed requests: 0 Total transferred: 4672360 bytes HTML transferred: 0 bytes Requests per second: 474.72 [#/sec] (mean) Time per request: 63.196 [ms] (mean) Time per request: 2.107 [ms] (mean, across all concurrent requests) Transfer rate: 152.07 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 9 46 18.6 43 147 Processing: 1 17 12.1 13 105 Waiting: 0 14 12.0 9 103 Total: 13 63 22.3 60 203
Concurrency Level: 100 Time taken for tests: 30.006 seconds Complete requests: 14160 Failed requests: 0 Total transferred: 4646120 bytes HTML transferred: 0 bytes Requests per second: 471.91 [#/sec] (mean) Time per request: 211.904 [ms] (mean) Time per request: 2.119 [ms] (mean, across all concurrent requests) Transfer rate: 151.21 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 9 152 38.2 151 366 Processing: 5 59 28.5 52 242 Waiting: 2 36 27.8 27 231 Total: 14 211 43.6 206 470
En el mejor de los casos arrojo sobre 14 mil hits, hay que tener en cuenta que la clave del TOTP solo funciona de los segundos 0 al 29 y del 30 al 59, entonces se tendría que empezar a forcebrutear en el segundo exacto. Otra cosa que hay que mencionar la prueba fue realizada localmente, por lo cual los hilos del AB compartían procesador con los hilos del PHP-FPM, Si se hace desde un equipo externo podría incrementar el numero de replies, sin embargo agregaria el tiempo de ida y vuelta, lo cual quedaría mas o menos igual en cuanto a replies. Voy a intentar desde PHP con Curl multi hilo a ver que resultado me da. Saludos!
|
|
|
En línea
|
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
Cual es el AB? Usa el DHunter 1000+ (Peticiones+Respuestas+GuardadoEnArray de la url completa) por segundo en un I7 sin OC con bruteforce. Igual puedes usar algún servicio en línea de computación para romperlo. Sige el código un poco caos que aún estamos trabajando en él. Llama a las funciones directamente en local en vez de usar el front-end.
|
|
« Última modificación: 3 Enero 2020, 21:30 pm por @?0!,5^34 »
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Voy a echarle un ojo a tu repositorio Cual es el AB?
https://httpd.apache.org/docs/2.4/programs/ab.htmlab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs. This especially shows you how many requests per second your Apache installation is capable of serving. Según las pruebas que realice por logica el numero de Threads esta muy ligado al numero de cores. Si te fijas en mi caso no hay mucha diferencia entre 8 hilos, 30 o 100. Si se puede mandar hasta 1000 o 10000 simultáneamente pero igual te quedaras esperando a que el server responda, y pues tambien depende del numero de cores que tiene el server. En el peor de los casos se termina haciendo un DoS momentáneo en que que el server procesa o dropea los request.
Edito. Ya he cambiado el nombre de la variable, ya no es debug. Implemente un force brute con curl milti desde php, remotamente no supera las 4000 peticiones en el lapso de 30 segundos, pero localmente llega a alcanzar hasta 80 mil, si el token esta entre esos primeros 80 mil valores habilita el debug, por lo tanto no seria buena idea publicar el nombre de la variable que lo activa. Adicional al hecho de realizarle fuerza bruta al TOTP, y lograr "por suerte" dar con el token en turno el session_start tira error por estar bloqueado el archivo de la cookie por alguno de los otros hilos. Saludos!
|
|
« Última modificación: 3 Enero 2020, 23:32 pm por AlbertoBSD »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Depuracion VIsual Basic 6 y GEoMEdia
Programación Visual Basic
|
hannah
|
1
|
1,520
|
27 Agosto 2008, 22:59 pm
por ssccaann43 ©
|
|
|
Depuración en Code Blocks - Duda
Programación C/C++
|
h0oke
|
6
|
7,552
|
25 Mayo 2010, 03:39 am
por nicolas_cof
|
|
|
Duda con depuración remota (IDA)
Ingeniería Inversa
|
.:UND3R:.
|
0
|
1,909
|
20 Septiembre 2013, 00:56 am
por .:UND3R:.
|
|
|
n-curses - depuración
GNU/Linux
|
joe2011
|
0
|
1,689
|
3 Marzo 2014, 21:33 pm
por joe2011
|
|
|
Depuracion...
Java
|
BlackZeroX
|
1
|
1,845
|
19 Abril 2016, 04:06 am
por + 1 Oculto(s)
|
|