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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1] 2 3
1  Seguridad Informática / Hacking / Re: Ayuda con bwapp en: 31 Enero 2022, 00:38 am
Olvidenlo, ya supe el porque no funcionaba nada en bwapp pero aun así daré el porque para que a alguien mas no le pase lo mismo que a mi, por lo que vi esto pasa debido a una llamada a una funcionó cuyo nombre es addedlashes o en otra función que es mysql_real_escape_string y lo que hacen es anteponer una barra invertida en caracteres como:

-'
-"
-\
-NULL (un byte nulo)

Hay una manera de evadir la protección con éxito pero para eso se necesita algo muy especifico y es que no en todas las codificaciones de caracteres funciona y solo es en algunas como por ejemplo la configuración de gbk, dicho esto ahora diré en que se basa, esta técnica se basa concretamente en el hexadecimal 0xbf5c27 y es que como dije por cada ' se antepone una barra quedando asi: \' evitando asi la SQL injection, en ese caso estaria como 0x5c27 donde 0x5c es la \ y 0x27 la ' pero entonces si logramos anteponer un caracter antes de la ' y que una vez addedlashes ponga la \ en la ', si ese caracter combinado con la \ se lee como un solo caracter lograriamos que podamos tener una ' separada de la \ y asi ejecutar una SQL injection, a ese caracter en especifico le corresponde el hexadecimal 0xbf, entonces recapitulando:

-0xbf5c se leeria como un caracter
-0x27 se leeria como otro caracter aparte cumpliendo su funcion correctamente

No pondre como quedaria la consulta pero tendria el caracter 縗, esta metodo solo sirve en ciertas codificaciones asi si alguien sabe como podria evadir esto sin tener en cuenta la configuracion de caracteres le agredeceria compartir su informacion y publicarlo aqui y ya por ultimo como referencias dejare a estos 2 links:

https://ditt0.medium.com/journey-with-bwapp-5aad4b97c5a0
https://www.php.net/manual/es/function.addslashes.php
2  Seguridad Informática / Hacking / Ayuda con bwapp en: 30 Enero 2022, 14:05 pm
Hola gente, espero se encuentren bien, pues la otra vez me encontraba practicando un poco el hacking web y estaba todo chido pero me puse un nivel de SQLi en mi vm de bwapp, en el area de login form pero me atore un monton, en el nivel low pues estaba bien facil, con un me salia pero le puse en medium y no se que estoy haciendo mal, le puse comentarios en cada espacio, anticomentarios, URL encoding, no se como se llama pero ponia la funcion or asi: oorr, le puse comparacion de caractares que se concatenaban, tambien le puse el cambiar la forma en que se escribia la funcion como oR, le puse todo lo que se me ocurrio y nada funciono, solo me tiraba el mensaje de invalid credentials y pues no se que estoy haciendo mal y no se si a alguien ya le haya pasado el problema y que me ayude porfavor por que si me gustaria saber en donde esta el problema
3  Programación / Bases de Datos / Re: Ayuda con archivos myd frm myi en: 30 Junio 2021, 03:05 am
lo que hice fue descargarme wampserver para instalar phpmyadmin desde windows y ya cuando acabe de instalar reinicie la maquina y ya con el puerto 80 abierto(wampserver instala apache2) abri mi navegador y me fui a mi propia maquina que hay varios metodos no como es poner 127.x.x.x donde x es un numero entre 1 y 255, esta localhost, poner tu propia IP privada, etc... como ustedes quieran el punto es acceder, y te vas a la carpeta de phpmyadmin como: 127.75.75.75/phpmyadmin y ya ingresas con tus credenciales de mysql, creas una base de datos con cualquier nombre que la puedes hacer desde la misma GUI de phpmyadmin o con una consulta
Código
  1. CREATE DATABASE nombre_de_la_base_de_datos;
como sea, una vez hecho la base de datos te vas a la carpeta donde esta la base y pues yo la verdad no me acuerdo de las ubicaciones de las carpetas asi que pueden hacer como yo y abrir un cmd y escribir
Código
  1. cd / && dir nombre_de_la_base_de_datos /s /a
y ya les va a aparecer la ubicacion, ahora se copia los archivos de las tablas en esa carpeta que les dio y reinician la pagina y ya deberian poder ver graficamente las tablas y pues como dije aun estoy viendo las bases de datos asi que en metodo CLI no he encontrado forma pero pues ahi tienen mi solucion al problema
4  Programación / Bases de Datos / Re: Ayuda con archivos myd frm myi en: 30 Junio 2021, 02:50 am
ok ya voy, voy a tardar unos 15 mins
5  Programación / Bases de Datos / Re: Ayuda con archivos myd frm myi en: 30 Junio 2021, 00:11 am
Olvidenlo, ya lo resolvi
6  Programación / Bases de Datos / Ayuda con archivos myd frm myi en: 24 Junio 2021, 04:58 am
hola a todos, la verdad es que no tengo mucha experiencia con las bases de datos y de hecho me estoy intentando adentrar en el campo s ver si me gusta tambien pero cuando estaba viendo lo de la exportacion de las tablas de MySQL me dio unos archivos que terminaban con las extensiones myi myd y frm y ahora quiero importar esos archivos en otra maquina pero el problema es que no encontre la manera de abrirlos y estuve investigando y vi que las tablas tienen diferentes motores y el de esos archivos estan en MyISAM y el de la maquina en donde quiero importar los archivos esta en Innodb y me salio que para cambiar el motor por default de las tablas era meterse en la carpeta /etc/my.cnf (es un linux donde quiero importar los archivos) y tambien esta /etc/mysql/my.cnf pero al abrirlos no esta nada, nada mas dice que son los archivos de configuracion de mysql y abajo tienen !includedir y una ruta y ya y le pongo skip-innodb para ver si asi pero solo me sale un error cuando reinicio el servicio de mysql y tambien vi que podia crear una base de datos que vaya a contener los tablas y que dentro de su carpeta le ponga los archivos que me dio y tampoco funciono porque me sale que no existe y tambien hice una tabla con el motor de MyISAM con el nombre de los archivos de antes del myd y eso y ya despues apagar, remplazar por los archivos myd etc... reiniciar mysql y tampoco funciono o no se si haya alguna forma de convertirlos en ibd que son los de Innodb o algo asi porque ya no se que hacer, tambien prove con ponerle el chown mysql:mysql a los archivos, reparar tablas pero tampoco funciona y pues no se si alguien sepa que hacer para importar eso?
7  Programación / Programación C/C++ / Re: Sobre lo del visor de eventos en: 7 Junio 2021, 15:36 pm
muchas gracias!!!
8  Programación / Programación C/C++ / Re: Punteros en c++ en: 7 Junio 2021, 15:11 pm
Espero que no sea demasiado tarde para contestar pero paso a responder, los punteros es una de las cosas que la verdad mas me costo dominar pero fue porque cuando lei documentacion pues digamos como que no explicaba bien todo al fondo y pus espero hacerme entender porque los voy a explicar como a mi me hubiera gustado que me lo explicaran, bueno, ves las variables? para este ejemplo vamos a tomar una a casa, el valor de la variable sera el numero de personas viviendo ahi, en una casa hay 5 personas viviendo y esa casa es A, sin embargo, una casa tiene una direccion verdad y digamos que dicha direccion sea la Calle Pepe no.245 como ejemplo(obviamente es una direccion falsa) ahora digamos que hay una persona que le quiere enviar una carta a uno de los integrantes de la familia de 5, esa carta tiene que tener la DIRECCION de la casa para poder enviarla asi que tendra que escribir en la carta que es para fulanito de tal para Calle Pepe no.245. Pues bueno lo mismo pasa con las compus, digamos que declaramos la variable "int a = 5"(haciendo el ejemplo de la casa), pero ahora queremos tener algo que no tenga exactamente un valor, sino que tenga una direccion de memoria, es decir, algo que le diga a la compu onta la variable a y como hacemos eso? pues nada mas y nada menos que con los punteros, en programacion c/c++ para saber la direccion de memoria de una variable se utiliza el caracter address-of que es este de aqui& y para que me entienda mejor, zy tu quieres decir la direccion de la casa A del ejemplo anterior como si fuera estilo programacion dirias &casa_A = Calle Pepe no.245 y pues como practica en lo mientras vamos a depurar un sencillo programa con gdb:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.        int a = 5;
  5.  
  6.        return 0;
  7. }
  8.  

Una vez compilado este programa(yo lo compilare en linux y para hacerlo desde ahi es con: gcc nombre_programa_c.c -o nombre_programa_compilado), ahora abriremos el gdb con

Código
  1. gdb -q nombre_programa_compilado
  2.  
                                                                 

ahora lo que haremos sera poner un breakpoint justo despues de que la instruccion de la declaracion de a se haya dado y eso es en la linea 5 como podras ver(int a = 5; esta en la linea 4) asi que pondremos un breakpoint en la linea 5  y ejecutaremos el programa con:

Código
  1. (gdb) break 5
  2. Breakpoint 1 at 0x1129: file ejemplo.c, line 6.
  3. (gdb) run
  4.  

yo le puse ejemplo.c al archivo por cierto pero continuando, a tiene un valor de 5 y para comprobarlo desde gdb podemos usar:

Código
  1. (gdb) print a
  2. $1 = 5
  3. (gdb) p a
  4. $2 = 5
  5.  

los $1 y $2 son variables que se guardaran temporalmente, puse print y p porque muchos comandos de gbd estan abreviados y pus eso pero lo que importa es que como dice gdb a tiene un valor de 5 pero ahora queremos saber la direccion de memoria de a y para hacerlo usaremos el caracter &(address-of) antes de a, asi:

Código
  1. (gdb) p &a
  2. $3 = (int *) 0x7fffffffdfcc
  3.  

y como puedes ver la direccion de memoria de a es: 0x7fffffffdfcc(en este ejemplo esta larga porque en donde estoy corriendo el programa es de 64 bits pero en la de 32 bits es de unos 4 bytes pero ahorita no me voy a poner a explicar eso) esta direccion de memoria vendria ser como la direccion de la casa A que era Calle Pepe no.245, si queremos hacer un programa donde ya no tengamos que depurar podemos usar el formato de cadena %p en un printf asi:

Código
  1. include <stdio.h>
  2.  
  3. int main(void){
  4.        int a = 5;
  5.        printf("Direccion de memoria de a es: %p", &a);
  6.        return 0;
  7. }
  8.  

pues ahora zy con todo esto porfin puedo pasar a explicar lo que es un puntero, hasta ahora vimos que podiamos saber la direccion de memoria de a usando el caracter & pero  ahora queremos que haya algo que pueda tener el valor de la direccion de memoria de a y aqui es donde entran los punteros, en c/c++ para declarar los punteros se utiliza el caracter * antes de poner el nombre del puntero, para entenderme mejor veamos un ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.        int a = 5;
  5.        int *pa;
  6.        pa = &a;
  7.        return 0;
  8. }
  9.  

aqui tenemos a nuestro puntero pa, yo le puse de nombre pa aunque perfectamente se podia declarar como int *a; pero le pongo pa porque me gusta diferenciar punteros de variables cuando se tratan de proyectos complejos, siempre que se declaren punteros recuerda que se usa *<nombre_puntero> y una cosa tambien, es importante siempre indicar el tipo de datos del puntero que en este caso es int porque zy juntas por ejemplo uno char con uno int pues obviamente te va a salir error porque se va malinterpretar a la hora del tamaño de los bytes pero ya teniendo esto en cuenta de que zy vas a usar una variable y un punteros los uses con el mismo tipo pues explicare la parte de pa = &a; esto es asi porque recuerda que los punteros no tienen un valor sino que tienen direcciones de memoria en su lugar y con el caracter & es como indicabamos la direccion de memoria de una variable, asi zy le dices a la compu que pa es igual a la direccion de memoria de a pues te va a entender que te estas poniendo algo para saber onta a(espero que no este cantinfleando a este punto xd) pero bueno, vamos a correr este programa con gdb en la linea que esta despues de la asignacion de la direccion que tendra el puntero pa  y es la linea 7 asi:

Código
  1. (gdb) break 7
  2. Breakpoint 1 at 0x1138: file ejemplo.c, line 7.
  3. (gdb) run
  4.  

y empezaremos a ver los ver que tienen dentro la variable y el puntero:

Código
  1. (gdb) p a
  2. $1 = 5
  3. (gdb) p &a
  4. $2 = (int *) 0x7fffffffdfc4
  5. (gdb) p pa
  6. $3 = (int *) 0x7fffffffdfc4
  7. (gdb) p &pa
  8. $4 = (int **) 0x7fffffffdfc8
  9. (gdb)
  10.  

y como puedes notar a sigue teniedo el valor de 5 pero lo interesante esta en el valor de la direccion de memoria de a y la direccion a la que apunta pa que son las mismas y esa direccion es: 0x7fffffffdfc4 y es de hecho una cosa importante que se me olvido mencionar y es que la direccion a la que apuntara un puntero no sera la misma que la de su direccion de memoria, tomare nuevamente el ejemplo de la casa A, cuando alguien le mando la carta a la casa A el que la mando no estaba en la casa A, estaba en B y sus direcciones no son las misma y es que asi B puede estar en Calle Jose no.456 y que el mande la carta a Calle Pepe no.245 y pues aca pasa lo mismo, pa puede estar en un lado pero tener el donde esta otro lugar y pues hasta aca todo bien pero ahora explicare la parte donde la mayoria se confunden y es esto:

Código
  1. (gdb) p *pa
  2. $5 = 5
  3. (gdb) p pa
  4. $6 = (int *) 0x7fffffffdfc4
  5. (gdb)
  6.  

cuando despues de declarar un putero volvemos a poner el signo * nos referimos al valor de la variable a la que esta apuntando el puntero, pa esta apuntando a la variable a y a tiene el valor de 5 y zy nos referimos al valor de lo apuntado tambien deberia ser 5 y es asi  como lo muestra p *pa, sin embargo cuando no ponemos de nuevo el signo * significa que nos referiremos a la direccion a la que apunta, entonces en resumen:

*pa = valor de lo que esta apuntando
pa = direccion de memoria de lo que esta apuntando

Ahora para aclarar un poco mas esto el siguiente programa lo terminara de hacer:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.        int a = 5;
  5.        int *pa;
  6.        pa = &a;
  7.        printf("El valor de la variable a la que apunta pa es: %i", *pa);
  8.        printf("\nEl valor de la variable a es: %i", a);
  9.        printf("\nLa direccion de memoria a la que apunta pa es: %p", pa);
  10.        printf("\nLa direccion de memoria de a es: %p", &a);
  11.        return 0;
  12. }
  13.  

Entonces cuando te sientas confundido con los punteros siempre recuerda que *pa hace referencia al valor de lo que esta apuntando y pa a la direccion de lo que apunta, y todavia esta lo de las funciones pero creo que por el momento es suficiente y por zy acaso, la salida del programa anterior es:

El valor de la variable a la que apunta pa es: 5
El valor de la variable a es: 5
La direccion de memoria a la que apunta pa es: 0x7ffdd29322f4
La direccion de memoria de a es: 0x7ffdd29322f4

y ya como ultimo te dejare aqui unos programas que hacen practicamente lo mismo(a uno nada mas le agregue una comparacion para saber cuando un usuario intenta engañar al programa pero es lo de menos), para que veas la diferencia entre usar y no los punteros:

SIN punteros:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void){
  5. int a, c, d, b = 1000;
  6. printf("Bienvenido a cajero automatico 1!!!, tienes 1000 varos");
  7. printf("\n\nOpcion 1: Retirar");
  8. printf("\nOpcion 2: Depositar");
  9. printf("\nOpcion 3: Salir");
  10. printf("\n\n\nEliga una opcion: ");
  11. scanf("%i", &a);
  12. switch(a){
  13. case 1:
  14. c;
  15. printf("\n\nIngrese la cantidad a retirar: ");
  16. scanf("%i", &c);
  17. d = b - c;
  18. printf("\nLa cantidad que quedo es de: %i", d);
  19. system("pause>nul");
  20. break;
  21.  
  22. case 2:
  23. c;
  24. printf("\n\nIngrese la cantidad a depositar: ");
  25. scanf("%i", &c);
  26. d = b + c;
  27. printf("\nLa cantidad que quedo es de: %i", d);
  28. system("pause>nul");
  29. break;
  30.  
  31. case 3:
  32. printf("\n\nSaliendo...");
  33. system("pause>nul");
  34. break;
  35.  
  36. default:
  37. printf("Ingrese algo correcto");
  38. system("pause>nul");
  39. break;
  40. }
  41. return 0;
  42. }
  43.  

CON punteros:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4.  
  5. struct cajero{
  6. uint16_t cantidad;
  7. uint16_t varia;
  8. uint16_t deposito;
  9. uint16_t numero;
  10. uint16_t *pcantidad;
  11. };
  12.  
  13. void retirar(int *cantidad_retirar, int *valor_o){
  14. struct cajero retir;
  15. if(*cantidad_retirar <= 0){
  16. printf("Ingrese una cantidad valida");
  17. }
  18. else{
  19. if(*cantidad_retirar > *valor_o){
  20. printf("\nNo tienes esa cantidad de dinero");
  21. }
  22. else{
  23. retir.varia = *valor_o - *cantidad_retirar;
  24. printf("\nSe han retirado %u y el saldo final es de: %u", *cantidad_retirar, retir.varia);
  25. }
  26. }
  27. }
  28.  
  29. void depositar(int *depositar_cantidad, int *valor_o){
  30. struct cajero deposite;
  31. if(*depositar_cantidad <= 0){
  32. printf("Ingrese una cantidad valida");
  33. }
  34. else{
  35. deposite.deposito = *depositar_cantidad + *valor_o;
  36. printf("\nSe ha depositado satisfactoriamente");
  37. printf("\nAhora tienes en tu cuenta %u", deposite.deposito);
  38. }
  39. }
  40.  
  41. void salir_x(void){
  42. printf("\nAviso!: Esta saliendo del programa");
  43. }
  44.  
  45. int main(void){
  46. struct cajero opcion;
  47. opcion.cantidad = 1000;
  48. printf("Bienvenido a cajero automatico 2!!!, tienes 1000 varos");
  49. printf("\n\nOpcion 1: Retirar");
  50. printf("\nOpcion 2: Depositar");
  51. printf("\nOpcion 3: Salir");
  52. printf("\n\n\nEliga una opcion: ");
  53. scanf("%u", &opcion.numero);
  54. switch(opcion.numero){
  55. case 1:
  56. opcion.pcantidad = &opcion.cantidad;
  57. printf("\n\nIngrese la cantidad a retirar: ");
  58. scanf("%u", &opcion.varia);
  59. retirar(&opcion.varia, opcion.pcantidad);
  60. getch();
  61. break;
  62.  
  63. case 2:
  64. opcion.pcantidad = &opcion.cantidad;
  65. printf("\n\nIngrese la cantidad a depositar: ");
  66. scanf("%u", &opcion.varia);
  67. depositar(&opcion.varia, opcion.pcantidad);
  68. getch();
  69. break;
  70.  
  71. case 3:
  72. salir_x();
  73. getch();
  74. return 0;
  75.  
  76. default:
  77. printf("Ejecute algo correcto");
  78. getch();
  79. return -1;
  80. }
  81. return 0;
  82. }
  83.  

Nota: si se usan los punteros es para evitar usar mucha memoria porque creeme que muchas veces en programacion vas a tener que usar el mismo valor de una variable dentro de otras funciones pero cuando son proyectos de muchas lineas de codigo puede llenar mucha memoria y con lo punteros se evita todo ese gasto de energia utilizando solamente referencias a en que parte del programa esta la variable y por el momento es todo de mi parte, zy te quedaron dudas te dejo este link de este profe:

https://www.youtube.com/watch?v=5TS1tdBcIoM&list=PLcYO0Mqfc4g87Y-XcZ0TWwrSiKlNXo0kh&index=9
9  Programación / Programación C/C++ / Sobre lo del visor de eventos en: 7 Junio 2021, 13:25 pm
Hola otra vez yo con mis dudas xd, habra alguna libreria en c/c++ con la que pueda acceder a los eventos que hay que en el visor de eventos porque estuve investigando y lo que mejor que me salio son programas como sustitutos del visor de eventos normal y pus no se zy hay alguien que sepa aqui
10  Seguridad Informática / Hacking / Re: Curso de Introducción a la Seguridad Informática en: 4 Junio 2021, 06:25 am
gracias por el aporte  ;D
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines