Mostrar Mensajes

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

Temas - Mortal_Poison

Páginas: [1] 2
1
Buenas a todos/as,

Espero y se encuentren muy bien. Quería traerles este contenido en el canal, ya que, además de incentivar a más personas que se inmiscuyan en la seguridad informática, también hay que demostrar el talento que tiene Latinoamérica en el mundo del Hacking. Dos foros que han sido pilares y ejes de esto, ha sido Underc0de y Elhacker.net, sin duda alguna. Si eres una nueva persona y lees esto, quiero que sepas que puedes sumergirte en este mundo a través de estos grandiosos foros. No es endiosar, pero hay que ser realistas: la información que existe y la comunidad, es muy valiosa. Pero más que eso, también es importante retribuir lo que se aprende a la comunidad, por eso es comunidad. Creo que el ser altruista, contribuye a que se genera una mayor comunidad y un conocimiento progresivo en el tiempo.

Sin más, me gustaría que ustedes opinaran.

¿Qué piensan del Black Hacking?.

¿Qué piensan de lo de irse a otro país con respecto a nuestro campo?.

Estas dos preguntas fueron realizadas a WHK, aquí tienen la entrevista.




Espero que también opinen y generemos un debate interesante. No he visto uno en internet de esa índole y creo que podríamos crearlo ;).

Un abrazo.

2
Criptografía / [Aporte] Destrucción de datos -> MÈTODOS
« en: Diciembre 08, 2018, 11:52:43 pm »

El día de hoy, quiero aportar algo de lo que conozco en lo que respecta a la destrucción de datos. Como Pentesters, hay que saber de todo un poco, a pesar de especializarte en los temas que más te apasionan.

En éste caso enfatizaré más en los HDD.

La restauración y/o la destrucción de datos probablemente son dos caras de la misma moneda. ¿Deseas saber cómo y cuándo recuperar información? entonces deberás comprender cómo puede destruirse irrevocablemente. Se suele vender la idea de que el borrado de archivos es sencillo, sin embargo, es muchísimo más complejo de lo que parece.

Dependiendo del grado o del nivel de cuán importantes son los archivos  que desees borrar, debes aplicar distintas técnicas. Te planteo tres ejemplos que SE DIFERENCIAN ENTRE SÍ:
  • Si deseas borrar unas fotos donde sales desnudo.
  • Si eres un integrante del IS*S.
  • Si eres uno de los administradores de DarkMarkets (P.E SkillRoad).

Como podrás notar, los ejemplos anteriores se asemejan en que se necesitan borrar los archivos pero distan en su contexto. No es lo mismo que desees borrar imágenes de tu galería donde sales desnudo que borrar una galería entera de personas decapitadas. De este modo, si un integrante del IS*S o un administrador de una DarkMarket elimina los archivos con Shred, Wipe, AxCrypt, Ccleaner y/o cualquier otro método convencional, el archivo casi siempre puede ser recuperado en su totalidad.

Para los que no sepan, en un laboratorio se pueden recuperar hasta +70 capas de borrado. Si tengo un archivo denominado: Underc0de.txt y luego creé otro y lo borré por 70 veces, en un laboratorio no tengas duda que será recuperado. ¿Cómo lo hacen? uno de los instrumentos que son usados en éstos laboratorios son los osciloscopios(básicamente es un dispositivo de visualización gráfica que muestra señales eléctricas variables en el tiempo). El proceso es medir la huella magnética de cada bit en el disco y es ahí donde se sabe si en ese bit hubo grabado un 0 o un 1, donde 1 significa que sí hubo grabado algo y 0 no. Un software que cumple con lo anterior, analiza e interpreta las huellas magnéticas y genera los 0's y 1's y lo hace por el número de veces que mencioné anteriormente.


Una recomendación que puedo hacer, es no poner en el nombre de los ficheros nombres tan certeros que indiquen de qué trata el fichero. El motivo de esto es que la mayoría de veces, se el nombre de un archivo, más no su contenido. Por ejemplo, si yo elimino un archivo denominado Passwords-All-Users-Underc0de.txt pues con los software de recuperación, ya sabría que dicho archivo es algo importante y es un .txt, los cuales son dos datos importantes para su recuperación. De hecho, hasta los metadatos suelen quedar en el disco.


UIno de los problemas principales que existen actualmente, es que los fabricantes de los discos duros(HDD) solventan los problemas de una manera "muy peculiar". Resulta, que si un disco duro está grabando un archivo y va en 98% por ejemplo y por "X" o "Y" motivo ocurre un error, algunos discos empiezan a grabar el mismo archivo en otro sector del disco y ese progreso del 98% del archivo, se queda ahí. Otro tipo de discos, lo que hacen es copian el archivo grabado a otro sector del disco para que siga con su progreso normal.  Existen herramientas que aprovechan este tipo de cosas y recuperan los archivos "incompletos".

De esta forma, muchos piensan en recurrir al método Gutmann que lo que hace es de más de 35 pasadas sobreescribe el archivo mediante patrones de ceros y unos para confundir a las herramientas usadas en los laboratorios de recuperación de información. A pesar de que es uno de los más utilizados, puedes recurrir por uno de los que se dice que usa el Departamento de Defensa de EE.UU: U.S. DoD 5220.22-M (ECE). Pueden encontrar un poco más de información aquí.

Entonces si realmente es algo que debes borrar, entonces lo que yo haría es encriptar el/los ficheros. Esto por el simple hecho de que es más complicado desencriptar que recuperar los ficheros/datos borrados. Por último, si deseas seguir un estilo de recomendaciones, lo que yo te compartir es:

- Cambia el nombre y extension del archivo -> Encripta el archivo con una contraseña que confirmes que es compleja de descifrar -> Aplica el método de Gutmann al/los ficheros -> Realiza las limpiezas y/o desfragmentaciones del disco con software como Ccleaner, Advanced SystemCare y los demás que abundan en internet.

Aunque son unas pequeñas recomendaciones, entiendo que habrán unas recomendaciones adicionales que le haga un poco más difícil el volcado de archivos a los forenses, pero insisto, depende de lo importante que sea el fichero.




Probablemente, no me hayan visto últimamente, pero fue porque estuve en una experiencia de desarrollador en una empresa y aunque fue una experiencia muy bonita, ya retomaré nuevamente todo.

Espero que les haya servido. Cualquier aporte es bienvenido.

Un saludo.



3
    Muchos son los problemas que se explotan sin impunidad alguna por los atacantes en la actualidad. Independientemente de la vulnerabilidad(bien sea técnica y/o de capa 8[errores humanos]) el atacante la aprovechará. Una de las características principales de esta problemática, se debe al desconocimiento y desinterés por parte de los desarrolladores para minimizar cualquier brecha de seguridad en su sistema que creen utópicamente infalible.

    Basándonos con ésta premisa, podemos entonces deducir que, la mayoría de las casas de desarrollo, se enfocan en sacar sistemas escalables, flexibles y pensados a futuro, cumpliendo netamente con la ideología de alta cohesión y bajo acoplamiento.


    ¿Eres desarrollador/a?

    Si eres desarrollador, deberías hacerte las siguientes preguntas básicas antes de proseguir a lo técnico:
    • ¿Cuál es la metodología que usas para realizarle auditoria a tu aplicación?. -> Owasp | ¿Por qué Owasp?.
      Owasp no siempre es el indicado para realizar pentesting a tus aplicaciones web. La metodología muestra un top el cual puede resultar no ser el adecuado para lo que estás usando. Por ejemplo, si usas Rails, las asignaciones masivas son un problema, y esta, no aparece en el Owasp Top(2013 & 2017).Te puedo nombrar otro ejemplo y es el de Sans TOP 25: Top 25 - Software errors.
      Aclaro que su última actualización fue ya hace algunos años, pero si nos centramos con ésta lógica, en el Top 10 de Owasp 2016 va liderando la inyección SQL y ésta apareció hace más de 20 años(1998, para ser más precisos).
    • ¿Te confías de tu Framework?
      Grave error. De los desarrolladores que conozco, el 99% de ellos se confían en las funciones que sanitizan las entradas de su aplicación. Por ejemplo,  ¿Sabes que se han descubierto fallos en las mismas funciones, cierto?. No digo que las funciones no deberían tener fallos, pero los desarrolladores deberían además de aplicar dichas funciones, aplicar más filtros para controlar cualquier entrada maliciosa por parte del usuario.
    • ¿Qué versión de DBMS usas?
      En ocasiones, los DBMS(DataBase Management System) no se actualizan porque la aplicación genera errores al realizar las consultas por la versión de ésta. Es un gran problema, pues hemos visto que hay versiones de Mysql por ejemplo, donde en versiones anteriores, se puede realizar escalación de privilegios, lo mismo que en Oracle, MariaDB, entre otros.


    Es difícil, realmente difícil protegerse ante cualquier amenaza, porque el precedente es y será el riesgo de los activos con los que contemos. Pero si de algo estoy seguro, es que nosotros como Pentesters, debemos desarrollar el ojo clínico para lo que hacemos. Cada cosa afecta al sistema que queremos romper, es el entorno que se convertirá en nuestro habitat y una vez lo conozcamos, podremos conocer las posibles vulnerabilidades y explotarlas.

    Sin más preámbulo, vamos a lo técnico y les mostraré algunas vulnerabilidades que podrán parecer de impacto bajo, pero bien explotadas, pueden afectar hasta al mismo gerente de una empresa.

    REDIRECCIONES CONTROLABLES


    Ilustración 1. Plugin de Firefox para controlar las direcciones.

    El plugin de NoRedirect, nos permite controlar las redirecciones de sitio y tomar control a nuestro antojo. Si nosotros desearamos ingresar a www.sitio.com/administracion/index.php, no nos dejaría, porque siempre nos va a redireccionar a login.php. Si lo viéramos desde el código, sería algo como esto:
    [/list]
    Código: (php) [Seleccionar]
    <?php
    if(isset($_COOKIE['id_user'])){
    header('Location: index.php');
    }else{
    //Si la cookie no existe, entonces que siempre me lleve al login.php
    header('Location: login.php');
    }
        
    ?>



    Desde ese punto de vista, lo único que haríamos es bajar el plugin para firefox, instalarlo y luego añadir el sitio del panel de administración con alguna expresion regular si lo deseamos.


    Ilustración 2. Añadir sitio para bloquear el redirect.


    ABRIR NUEVAS PESTAÑAS

    La etiqueta de a href es una de las más usadas en cualquier aplicativo web. De hecho, es usada con el atributo "_blank" para abrirle una nueva pestaña al usuario y evitarle molestias a este. Un claro ejemplo, es este:
    Código: (html5) [Seleccionar]
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    <a href="https://google.com" target="_blank">Google</a>
    </body>
    </html>


    Ilustración 3. Hipervinculo de HTML.

    Si presionamos en el hipervinculo, nos llevará a Google, claro está. El problema es que la mayoría de páginas web implementan opciones como: "el usuario podrá crear un link de su biografia y poner un sitio web o incluso, comentar con un link de su sitio web". Generalmente(si lo vemos desde el lado de los Frameworks), validan desde el Controlador que el link debe ir de una forma en particular. Si un atacante logra observar que puede crear un link del siguiente estilo, podrá redireccionar sin que se de cuenta al usuario a una página para realizar phishing:
    Código: (html5) [Seleccionar]
    <a target="_blank" href="http://viinacademy.com/PoCUnderc0de/index.html"> Mi sitio! </a>
    Y se vería de la siguiente forma:


    Ilustración 4. Como se vería el hipervinculo del atacante.

    Donde el link del atacante(el que está en el atributo de href) contiene lo siguiente:

    Código: (html5) [Seleccionar]
    <html>
    <script>
    if (window.opener) window.opener.parent.location.replace('https://underc0de.org/foro');
    if (window.parent != window) window.parent.location.replace('https://underc0de.org/foro');
    </script>

    The rules of life:

    </html>

    Ahora, si un usuario da click y tiene muchas pestañas abiertas(la mayoría de las personas siempre las tienen), le va a abrir una nueva pestaña que abrirá el link de http://viinacademy.com/PoCUnderc0de/index.html y le mostrará "The rules of life" pero a la página original(la de localhost/Test/index.html) la redireccionará a https://underc0de.org/foro. Esa redirección, bien podría ser un scam o una página maliciosa, dependiendo de la creatividad del atacante.

    Resumiendo esta técnica, parándonos como atacantes, serían los siguientes pasos:

    • Ingresar a la página de sitio.com.
    • Ingresar a alguna vista que nos permita crear un link.
    • Verificar que permitan usar el atributo de target='blank_'".
    • Crear un scam(página idéntica al sitio legítimo) de la página y tenerlo hospedado en un servidor.
    • Poner en un link la página junto a un texto que sea interesante.

    ¿Cómo es posible solucionarlo?

    Siempre deberás usar rel="noopener noreferrer" cuando uses el atributo target="_blank". Esto no permitirá redirigir a los usuarios.

    INYECCIONES SQL

    Qué más que las más conocidas como inyecciones SQL. Daré algunos tips desde el lado del pentester para descubrir inyecciones en lugares donde no se cree que las aplicaciones las tienen. Al ser una de las vulnerabilidades más explotadas, creo que los desarrolladores deben enfocarse en el BUEN filtro de sus campos.

    • Intentar poner la comilla(') probablemente es una de las primeras opciones que intentamos al realizar pentest en una aplicación. Sin embargo, esto puede provocar distintos filtros y una redirección a distintas páginas de error para encubrir la SQLi. Debes intentar generar errores, bien sea, basadas en error y/o en unión, siempre pensando en cómo respondería el DBMS.
    • ¿Qué pasa si comentas alguna sentencia? por ejemplo: %23' o --', pues como sabrán, así se hacen los comentarios cuando hacemos procedimientos almacenados pero al realizar pentest en una aplicación, esto puede generar errores(porque se le ordena que ignore lo que sigue de la consulta al recibir el parámetro).
    • A veces, los desarrolladores pasan funciones como addslashes,htmlspecialchars, entre otras, con el fin de sanitizar las entradas. Sin embargo, la documentación de PHP NO recomiendo usar éste tipo de funciones, pues aparte de estar obsoletas, se ha demostrado que son obsoletas realizando inyecciones de charsets. En especiales, estas funciones filtran la comilla simple y/o dobles("/'), pero podrás intentar poniendo comparaciones de variables que no serán válidos, como @@verxi0n(@@version), @@Slep(@sleep), entre [email protected]
    • Si la entrada es un número, puedes intentar hacer operaciones aritméticas y de ahí, intentar con otros vectores de ataque.
       Por ejemplo, puedes hacer cosas como id=365--' o id=1-2.

    Algunas de éstas vulnerabilidades me han servido para estar en el HoF(Hall Of Fame) de algunas empresas y créanme, los desarrolladores generalmente cometen las mismas fallas debido al uso de metodologías ágiles, de tiempo o de cualquier otro factor que pueda afectar su rendimiento vs cumplimiento.

    Cualquier duda,opinión y/o sugerencia, será bien recibida.

    Un saludo.

    4
    Una duda que quizá a muchos ataca, una duda que probablemente genera desconocimiento.
    Quizá alguna vez hayas escuchado de los programas denominados Bug Bounty. Bug Bounty hace alusión al dinero destinado por las organizaciones para la corrección de vulnerabilidades de sus activos con el fin de que los hackers estén motivados a realizar una divulgación responsable a través de plataformas que actúan como intermediarias como Bug Crowd, HackerOne, CrowdCurity, BountyFactory, VulnScope, entre otras.

    ¿Qué necesitas?

    No necesitas ningún requisito en la mayoría de plataformas, exceptuando algunas, como VulnScope que sí te piden que firmes un contrato de confidencialidad pero ningún requerimiento alto. Entonces, en resumen, lo único que hace falta es registrarse en alguna de las plataformas antes mencionadas, unirte a un programa(en algunas programas) y comenzar a realizar resportes.


    He creado un diagrama en el cual se podrá observar de mejor manera el proceso de Bug Bounty, tanto desde la perspectiva de las empresas como desde los hunters.


    El proceso, a groso modo, es el siguiente:

    • La compañía decide crear un programa de Bug Bounty.
    • La compañía elige la plataforma en donde desea publicarlo[HackerOne, BugCrowd, BountyFactory].
    • Esta, realiza las respectivas reglas y políticas para cuando el programa se lance al público.
    • Una vez lanzado al público, los hunters(cazadores de recompensas) podrán comenzar a testear las aplicaciones.
    • Si un hunter encuentra un fallo, publica el reporte(inicialmente de manera privada) en la plataforma al respectivo programa.
    • La compañía, independientemente de como valide las vulnerabilidades, acepta o rechaza de que es una vulnerabilidad.
    • El hunter es remunerado de alguna forma.
    • La plataforma le concede los respectivos puntos al hunter.
    • El reporte se cierra y dependiendo de las políticas de la empresa, se hace público o privado.

    Comprendiendo el concepto, creo que es necesario mencionar el por qué no todo es tan sencillo como parece.
    Cuando vas en busca de un XSS, una SQLi o un CSRF de una de las aplicaciones que está in-scope(en el alcance) del programa, usualmente, ya ha sido reportada con anticipación. Sin embargo, las hay, pero hay que profundizar más en el aplicativo, debido a que en algún momento, una persona testeó en lo que tú estás testeando ahora: buscador, login, formulario de registro, configuraciones de perfil, entre otras. De hecho, muchos de los vectores de ataque que se han encontrado recientemente en RockstarGames(un XSS en el D0M) debió usar parte de mathml para demostrar que era válido el reporte.

    Volviendo a lo que nos compete, daré algunos consejos que de seguro te servirán si deseas entrar al rubro.

    Código fuente

    Sí, así como lo ves. Sé que muchos que se dedican a la seguridad informática, no conocen o no manejan bien la programación y ahí existe un grave problema. ¿Por qué?. En los programas, muchas veces piden que también se testeen aplicaciones en Android/iOS o incluso en los aplicativos que deseen testear, proveen el código en GitHub. Teniendo acceso al código, se puede hacer mucho: ver cómo se envían/reciben las entradas de usuario desde el cliente al servidor, revisar la longitud con la que se recibe, comprobar si existe algún acceso en el código comentado y otra cantidad de variables que se consideran importantes cuando se está haciendo una auditoría de código. De hecho, muchas veces lo que se suele hacer es montar la aplicación en local, que a pesar de un poco más de trabajo, es mucho mejor. Se hace esto, con el fin de evitar los firewalls, que a pesar de que tiene solución(hacerles bypass), molesta.

    Metodología

    En primera medida, debes revisar y apuntar los dominios/subdominios que estén en el alcance del programa. Luego, realizar un reconocimiento exhaustivo de estos. Debes usar todo lo que consideres necesario, ya que esto es vital para luego proceder a realizar las pruebas de concepto. Podrás buscar también los subdominios en caso de que ellos lo deseen(*.example.com). Recuerda que para esto, también puedes usar los dorks que son muy útiles. Luego, comienza por cada uno de los objetivos, verificando si tiene un CMS, plugins, servicios que están arriba, entre otros. Haz pruebas de fuzzing, pues son muy útiles para revelar errores y exponer vulnerabilidades. Procede a intentar impactar de una forma más profunda en la vulnerabilidad(¡LEE BIEN LAS POLÍTICAS DEL PROGRAMA!).


    Prueba de concepto

    Si en los pasos anteriores, encontraste una vulnerabilidad, deberás comprobarla con una pequeña prueba de concepto. Este aspecto es uno de los más fundamentales que pueden existir a la hora de realizar reportes, ya que si una PoC no la pueden replicar, no será considerado como bug. Mis recomendaciones son: intenta varios vectores de ataque, luego captura cómo reproduciste tú la vulnerabilidad y enumeralo por pasos en el reporte.
    Deberás adjuntar también capturas de pantalla, para que quede en evidencia de que sí existe tal vulnerabilidad y así evitar un posible cierre de reporte.

    Reporte de vulnerabilidad

    Aparte de la PoC, deberás saber comunicar de una manera apropiada lo que encontraste. Que los que vayan a recibir el reporte sean técnicos, no quiere decir que vayan a entender lo que les estás comunicando. Por ende, debes hacer un reporte claro y contundente que posea: detalles(de qué trata el reporte), severidad(calificación de la brecha), impacto(cuánto riesgo existe al tener esta brecha), explotabilidad(cómo podría afectar a...) y remediación(posibles correciones que podría tomar la empresa).


    Posiblemente, tus primeros reportes sean duplicados, pero no debes desmotivarte, pues eso quiere decir que debes conocer un poco más de la aplicación que estás testeando. Si en algún caso, el reporte es inválido, deberás profundizar más en los conceptos que crees que te hagan falta(sobretodo, técnicos).

    A continuación, les dejaré unos plugins que les podrían servir, tanto para Firefox como para Chrome:
    Addons Chrome.
    Addons Firefox.

    A continuación, un vídeo en el cual también doy otros consejos


    Cualquier sugerencia, duda u opinión, será bien recibida.

    5
    Criptografía / Aumenta tu privacidad con Firefox Browser
    « en: Abril 01, 2018, 07:48:00 pm »
    El objetivo principal de éste post es minimizar cualquier posible fuga si queremos profundizar por darknets o incluso por la clearnet.
    Como había prometido hace unos meses atrás, quería traer tutoriales enseñando lo que he aprendido acerca de Anonimato / Privacidad / Seguridad. Con el motivo anterior, antes de traer más tutoriales propios de los temas mencionados, deberemos configurar bien nuestro navegador.

    Antes de comenzar les mencionaré que el "anonimato" también comienza desde el sistema operativo. En mi caso, uso Arch Linux, sin embargo, uso Windows también, para distintos motivos(grabar, juegos, entre otros) pero no para hacer mis tareas principales. Hago énfasis que ésta guía está enfatizada para sistemas operativos Open Source, como Gnu/Linux. Sistemas operativos como MacOSX y Windows por obligación están atados a manos y cuello ante filtraciones, ya sean efímeras o persistentes en el tiempo.

    Firefox realmente es un proyecto magnífico, por eso esta guía estará relacionada con éste explorador web.
    Firefox, tiene varias opciones para que podamos trabajar con el. Mediante firefox --help listaremos dichas opciones:


    Existe la opción de los perfiles creados para la instancia que Firefox usa actualmente. Si desearamos, Firefox nos permitirá crear/ejecutar paralelamente TODOS los perfiles que nos apatezcan. Entonces ejecutando el comando de firefox --ProfileManager se nos listarán los usuarios que guarda nuestra Firefox.



    El perfil "default" es el predeterminado, con el que nos viene Firefox. Crearemos uno nuevo con sus respectivas configuraciones. Desmarcando la segunda opción, Firefox cada vez que se inicie nos preguntará cuál perfil deseamos usar. De éste modo, es como podremos usar varios perfiles a la vez.

    Una vez dado click en el botón de "crear", aparecerá el asistgente de creacicón de perfiles:


    El siguiente paso será asignar un nombre que deseemos al perfil y también a su respectica carpeta con el fin de:
    -> Guardar el perfil en medios extraíbles(como USB's, HDD's externos, la nube) para usar el perfil en cualquier otro computador.
    -> Destruir rápidamente nuestro perfil de navegación sin problema alguno.



    Una vez creado correctamente nuestro perfil, procederemos a iniciarlo dándole click en "Start Firefox" con nuestro perfil seleccionado.

    Nos vamos a la pestaña de "Preferencias":


    Como muchos sabrán, Firefox se asoció a Google para determinar cuáles son las páginas "peligrosas" y por este motivo, desactivaremos ésta opción:


    También desactivaremos la opción que permite a Firefox enviar información técnica a Mozilla junto con la protección de Tracking.





    Add-ons obligatorios

    A continuación, suministraré una lista de extensiones que serán muy importantes para nuestro objetivo:
    NoSCript-> Link directo.
    Nos permitirá bloquear todo tipo de Scripts que puedan ser usados en nuestra contra. Es muy útil, incluso éste nos avisa y nos bloquea muchos ataques de XSS(porque bloquea scripts).

    HTTPs EveryWhere -> Link directo.
    Con ésta extensión podremos detectar cuáles son páginas fake(falsas) y con ello, obtener un poco más de seguridad al navegar.

    Random Agent Spoofing -> Link directo.
    Nos permite cambiar nuestro user-agent o también cambiar perfiles de navegadores a nuestro gusto. Tiene diversas características, pero la principal es que engañaremos a páginas donde esté implementado el Tracking o con rasteradores.

    Privacy Badger -> Link directo.
    Impedirá que los sitios con de anunciantes y otros rastreadores realicen un seguimiento de dónde vienes, a dónde vas y qué páginas miras en la web. Si Privacy Badger detecta alguna acción "inusual" de éste tipo, automáticamente lo bloqueará.



    Procederé a explicarles cómo configurar el RAS(Random Agent Spoofing):


    Tab Profile:
    Como podrán notar, podremos seleccionar qué tipo de perfil de navegador deseamos al navegar. Desde seleccionar un perfil móvil hasta de escritorio. Incluso, podemos indicarle que sea aleatorio y así configurarle la otra opción que sea cambiar periódicamente.

    Tab Headers:

    Muchas veces, las páginas contienen trackers que recopilan desde qué página venimos, como por ejemplo Facebook. En esta pestaña hay bastante utilidad, teniendo en cuenta que que cambiaremos las cabeceras junto con otros aspectos que no deseamos que la mayoría de páginas tomen.



    Tab Options:

    Es bueno detener cualquier script de inyección, y en la pestaña de opciones nos permite implementar esto. De hecho, pueden cambiar el tamaño de pantalla, el cual también es un factor que muchos desconocen, pero que sirve para identificar y/o hacer footprinting.


    En las opciones estándar, se debería bloquear lo que les podría dar indicios, como el recurso del tiempo del dom, las búsquedas sugeridas, la geolocalización, entre otras.



    Y que no se nos olvide deshabilitar las Cookies, es un punto muy importante.

    Para finalizar, tendremos que desactivar las opciones de reporte.


    Con la configuración anterior y los add-ons que les recomendé, se podría asumir que tendremos un poco más de privacidad, sin embargo, podrás tener muchos problemas en páginas que sí se requiera por ejemplo habilitar Cookies, desactivar scripts para el funcionamiento de la página(por ejemplo, formularios[me refiero a las páginas que validan con JS y no los que lo hacen con los de HTML5]) y entre otras cosas que tú [email protected] te darás cuenta.



    Para comprobar un poco cómo nos ha quedado, la EFF nos ofrece un análisis con su página de Panopticlick:


    Lo que haremos es, con nuestros add-ons activos, seleccionar "Testear con una compañia real" y presionar en "TEST ME".

    Ésto, dará lugar a que realice un test con una empresa real, evaluando los puntos que hemos estado desglosando a lo largo del post.


    Ahora presionamos en ver resultados completos:


    Y como se podrá apreciar, arroja datos que no son los míos, pues por ejemplo, yo tengo Arch.
    Podrían también antes de todo, intentar hacer el test sin los add-ons para comparar.

    Existe también software para que podamos "cambiar" nuestra Mac Address. Para ello, tienen MacAddressChanger, pueden probarlo y descargarlo de su página oficial:
    TechNitium MacAddressChanger

    Quiero plantear una desventaja del add-on de RAS y es que aún no está disponible para nuevas versiones de browsers, como lo es Firefox Quantum, entre otras.
    Espero que de igual forma les sirva, quizá para hacerles caer en cuenta que falta mucho por trabajar en el lado de privacidad, desde conocer cómo "nos reconocen" hasta saber cómo poder intentar evitar todo este tema.

    Les recuerdo, que esto no quiere decir que ya serán invisibles, sino como repito, se reduce drásticamente cualquier intento de usurpación por gobiernos, agencias(NSA) y cualquier otra organización.

    Cualquier duda,opinión y/o sugerencia, es bien recibida.

    Un saludo.

    6
    ¿Qué son las WebShells?

    Con @xyz tuvimos la oportunidad de hablar sobre WebShells.

    Un tema muy amplio, donde sitúa temas importantes como vulnerabilidades junto a su respectiva explotación(y post-explotación).

    Los motivos de subir una WebShell(Backdoor) varían desde:
    • El momento indicado para realizar un ataque
    • Intruir al Sistema Operativo
    • Ejecución arbitraria de comando

    También depende las ideologías, ciberdelitos, análisis de inteligencia, entre [email protected]

    Antes de comenzar el post, debemos brindar conocimientos sobre que es una WebShell.



    WebShell y sus funciones

    Las WebShells, son puertas traseras que son subidas al servidor(de manera reversa/directa) para obtener acceso completo a él.

    Independientemente si se cuenta o no con permisos de escritura, es posible realizar diversas cosas.

    Incluso, es posible hacer Bypass con la Navaja Suiza cuando tenemos un Backdoor en un servidor donde no tenemos los permisos de lectura|escritura|ejecución.

    Hacemos hincapié en que las WebShells podemos subir a servidores Windows, Linux.

    Sin embargo, el hecho no está en subir un backdoor a un servidor que maneja tecnologías que no interprete; no debemos subir a un servidor que use tecnología JSP un backdoor escrito en PHP, simplemente, será inútil.

    Usualmente, las WebShells que existen en línea y están disponibles para su descarga, poseen interfaz web.

    El término Shell, implica el acceso a línea de comandos del estilo de Unix que es entregado a través del servidor web.

    Las funcionalidades que poseen WebShells tradicionales son:
    • Conocer archivos del servidor.
    • Conectarnos a algún motor de base de datos.
    • Herramientas de String para conversiones.
    • Bruteforce.
    • Administrar procesos.


    A pesar que existan más funcionalidades, las anteriores son algunas de ellas. Dependiendo la Webshell, incrementan o disminuyen las características.



    ¿Cómo se sube una WebShell a un servidor?

    Cuando deseamos tener un backdoor en 'un' sitio web, el primer paso es explotar la vulnerabilidad y subir el backdoor creado(o descargado[cuidado con los que descargan]).

    Asumiendo que previamente han realizado los procedimientos inmutables para encontrar el fallo.

    Ahora, las vulnerabilidades web, se han extendido a lo largo del tiempo:

    # Vulnerabilidades > Tipo de Vulnerabilidades.

    Cumpliendo la anterior 'fórmula', nuestra proeza como Pentesters se ha maximizado, por intentar identificar la mayor parte de vulnerabilidades en los servidores extendidos alrededor del mundo.

    Por tanto, mientras se posea una vulnerabilidad que sea explotable donde permita subir archivos, es posible inyectar nuestro backdoor.

    De hecho, existen webs que muestran las vulnerabilidades mundiales, por países y demás segmentación que son muy útiles.

    Les mostraré una. RecordedFuture permite analizar los tipos de vulnerabilidades frecuentes en distintos años, vectores de ataque filtrados por diferentes tópicos como el top de vulnerabilidades, el análisis por países de éstas, incluso por universidades, entre otras.

    Como recuerdo, el caso tan "famoso" de Rasputin, el cual mencionaba que había creado una tool privada, la cual encontraba, explotaba y backdoreaba los servidores que sus matchs fueran TRUE.

    Recuerdo que algunas personas no creían hasta que salió un leak que corroboró lo de Rasputin.

    No me extraña éste tipo de herramientas, ya que poseo una priv8 que desarrollé y presenté en DragonJarCon 2016.

    El tema de Rasputin no tuvo tanta represalia por el motivo de que el/los gobiernos mediante los índices de Vaughn esto no logró ser 'apocalíptico', sobresaltando de manera 'legal' la FOIA(es una ley que otorga a todos los miembros de los Estados Unidos el derecho de conocer la información federal del gobierno).

    A continuación, una imagen de lo que RecorderFuture capturó (y lo que muchos vimos) de un Pastebin (eliminado) que salió precisamente de bases de datos donde estaban los vectores de las SQLi.

    Habían vulnerabilidades de universidades como la de Cambridge, Oxford, Washington, Arizon, Tennessee, entre otras.


    Ilustración 1. Gráfica de resultados válidos de Inyecciones SQL.

    Estos backdoors se vendían y de hecho, algunos aún no han reparado las fallas.

    Ni los mismos sitios grandes se libran de vulnerabilidades, porque somos humanos y pecamos por distracción, pereza o desconocimiento.

    La respuesta es fácil:

    • Analizar
    • Encontrar una vulnerabilidad {en lo posible critica}
    • Explotar
    • Analizar viabilidad de subir archivos por algún medio
    • Congrats!



    ¿Puedo encontrar una WebShell en mi servidor?

    ¡Claro que es posible! siempre y cuando tu sitio web no sea muy grande o no dispongas de muchos servidores que sólo controles tú.

    Explayándome, si tienes pocos servidores y puedes revisarlos a diarios, esa vigilancia es perfecta.

    Sin embargo, esto no pasa en Bancos o Multinacionales, en términos inmensurables, es incontenible, las empresas poseen cientos de servidores web, con distintos sistemas operativos, aplicaciones, usuarios locales agregando/eliminando/editando archivos y entre otras variables, hacen que la deteccion de un backdoor sea extremadamente compleja.

    Como aclaramos en el vídeo, existen herramientas como:
    • NeoPI.
    • Shell Detector.
    • LMD | Maldet + WSS(Web Shell Scanner).

    Aún con estas herramientas no se logra reconocer en un 100% una Webshell sin falsos positivos o, con reconocimiento que es infalible.



    ¿Cómo funciona?

    Hay dos modalidades de cómo funciona una WebShell:

    • Subir del lado del servidor completamente.
    • Subir del lado del servidor un archivo de conexión pero hacer la conexión directa desde el lado del cliente.


    La primera opción, hay desventajas, como los logs, el tipo de requests y entre otras.

    Desde el lado del cliente, es mucho mejor, siempre y cuando se haya codeado de manera idónea.

    En resumen, cuando tengan que escoger entre si subirla del lado del servidor completamente o del lado del cliente, seleccionen la segunda.

    Nosotros en el vídeo mostramos una Webshell del lado del cliente que es sumamente poderosa y útil, es de @WHK.

    El post lo pueden abrir presionando click aquí y conocer más a fondo de cómo funciona esta Webshell(sin backdoors xD).

    A continuación, pueden descargar los archivos de prueba, donde existe una inyección de código SQL para posteriormente subir el backdoor.

    Descargar los archivos del vídeo.



    ¡Hagamos una PoC!

    Una vez descargados los archivos, debe proceder a iniciar nuestro Apache e importar la base de datos.

    En mi caso, uso Arch, pero eso no afecta en nada si posees Ubuntu, Windows, Debian, entre otras.

    Almacenamos los archivos en nuestro gestor de servidor local, Wamp/Xampp/Lampp, entre [email protected]

    Debería quedar:


    Ilustración 2. Archivos subidos al servidor.


    Ilustración 3. Index de la página web.

    Como notaran, solo quedaría importar la base de datos, vía PhpMyAdmin o vía CLI.

    Una vez importada, quedaría de la siguiente manera:


    Ilustración 4. Base de datos cargada correctamente.

    Una vez esté previamente subido, podremos hacer la PoC con el vídeo que dejaremos al final :).



    Otros intereses

    Como mostramos, existen muchas más webshells, unas creativas, otras no, pero queremos hacer énfasis en algo: podemos realizar webshells más avanzadas, dependiendo nuestra creatividad y eso es más que suficiente para hacer Bypass a cualquier sistema de control.


    Streaming

    Sin más, en el Streaming pueden opinar qué tema quieren que mostremos ;).

    Próximamente, tenemos pensado algo que sabemos también gustará.


    Además, queremos agradecer a la comunidad de Underc0de y de VIINVIDEOS HD, nos brindan soporte completamente para crear un espacio agradable donde nos consumen nuestras ganas de aprender.

    Post creado por: @xyz & @Mortal_Poison.

    7
    Seguridad web y en servidores / ¿Empresas grandes invulnerables?
    « en: Enero 29, 2018, 04:47:14 pm »



    La representación actual de la seguridad, ha sido una auténtica problemática para las empresas. Sabemos que si destinan dinero, de último recurso será la seguridad. Aclaro que esto está cambiando. Pero como todo, esto no es de la noche a la mañana.
    Para los usuarios que no son técnicos ni están en nuestra área, son invulnerables las empresas como Facebook, Spotify, Blizzard, Riot Games, Steam, entre otras. Las personas solemos vislumbrar la seguridad, porque como cualquier otro tema, creemos que nunca nos pasará.

    Quizás, esto se deba a la manera en la que nos educan, porque no nos enseñan que somos humanos. A pesar de que el altruismo en nuestra sociedad no es un hecho concebible de manera inconsciente, es irrefutable que somos un defecto hecho personas. Por esa y muchísimas más razones, no es posible confirmar que un sistema es seguro. Ahí lo "razonable" se convierte en irracional, y es cuando debemos aceptar que siempre habrá personas más inteligentes que nosotros y aprender a desaprender.

    Una de las concepciones que tenemos los que buscamos vulnerabilidades en los sistemas, es que nuestra curiosidad nos mueve en conjunto a la perseverancia. Es pensar más allá. Es ver puertas donde la gente ve paredes.

    Underc0de, ha sido un punto de equilibrio entre gente de un nivel técnico muy alto y también en parte del conocimiento centralizado.

    A las empresas(y lo menciono por experiencia) les incomoda cuando les avisan un fallo de seguridad en sus sistemas. Posiblemente porque su mentalidad es un poco cerrada.

    Con esta introducción, quiero mostrarles dos vulnerabilidades en dos empresas pragmáticamente grandes, concernientes a vídeojuegos y aclaro que tengo fallos más graves, pero por el momento, publicaré estas.

    ABORDANDO AL PIRATA


    Hace años, solía jugar un juego llamado Seafight, de la empresa Bigpoint. El juego, a groso modo, es de piratas en barcos, donde el juego te ofrece características como pertenecer a clanes, tomar islas, abordar barcos, entre otras que lo hacen un juego divertido.
    Como es un juego Pay2win(ahora más que antes), solía buscarle fallos y subirlos al canal de Youtube que creé. Lo menciono porque, me movía la curiosidad saber si podía obtener las mismas características de pago, con algún bug. Y así fue como trascendió mi cuenta, entre los bugs que encontraba y subía, y entre los que no. Esto me hizo bastante grande. No en la cuestión del juego, sino en la cuestión de que aprendí bastante. 

    Así que hace unos meses me dispuse a encontrar y reportar vulnerabilidades de este juego, y con esto fue lo que me encontré.

    Entrando a la página oficial, nos podemos registrar o crear una nueva cuenta. En éste caso, vamos a registrarnos.


    Ilustración 1. Login de Seafight.

    Ingresamos nuestros datos para el registro.


    Ilustración 2. Datos de registro para ingresar a Seafight.

    Una vez presionado el botón de "Juega ahora gratis", vemos el primer anuncio(y apenas entrando xD) de una súper promo de perlas, que las adquieres obviamente con dinero.


    ...

    ¡Eh! me equivoqué de imagen.


    Ilustración 3. Registro correcto.

    Ahora nos remitimos a "Camarote" > "Correo":


    Ilustración 4. Pestaña para envíar mensajes entre jugadores.

    Ahora, añadiremos en "Nombre de Usuario", nuestro nombre de Usuario. Posteriormente, en el Asunto, podemos poner cualquier cosa. En el cuerpo del mensaje, está el vector de ataque.


    Ilustración 5. Vector de ataque en el cuerpo de mensaje.

    ¿Por qué? ellos mandan por método POST la información, y eso está bien. El problema radica, en que no validan que no pueda inyectar código malicioso de JavaScript. Cuando ocurre esto, en una sección donde el único enfoque es enviarse información entre jugadores, podemos asumir que es un fallo de seguridad grave.

    He diseñado el siguiente escenario, donde podrán comprender de manera más detallada cómo podría afectar de manera múltiple a los jugadores de la plataforma. Luego de ello, vendrá la PoC.


    Ilustración 6. Diagrama donde se muestra el funcionamiento de los mensajes de Seafight.

    POST DATA en realidad vendría siendo nuestro código malicioso. Teniendo claro esto, vamos a proceder a inyectar nuestro payload.

    Inyectemos un payload en el navegador de Chrome:


    Ilustración 7. Código malicioso en el cuerpo del mensaje.

    Y magia, nos bloquea Chrome >:( :


    Ilustración 8. Bloqueo de Chrome con XSS_AUDITOR.

    Y obviamente, al bloquearlo, no se mostraría nuestra alerta(aunque esté allí pero nuestro cliente«Web Browser» no lo muestre).


    Ilustración 9. Código malicioso estático correctamente.

    Mozilla Firefox

    No estoy patrocinando Mozilla, pero ya notarán las diferencias.
    Me cree una cuenta nueva, denominada: "AquilesClavoElBug2" y ahí notarán que puse el código malicioso.


    Ilustración 10. Incrustando el código malicioso en nueva cuenta.

    Y voilá:


    Ilustración 10. El cliente muestra correctamente la alerta.

    Como podrán notar, esas son las dos diferencias entre Chrome y Firefox.

    Podemos hacer Bypass en éste tipo de casos, pero no me centraré en ello en éste post.

    En el próximo post, demostraré cómo explotaremos esto de una forma más sustancial, claro está, a modo de prevención y sin querer hacerle daño a nadie.

    Por otra parte, quisiera mostrar el correo que ellos me respondieron ante la explicación que les quise dar mencionandoles que poseen un fallo de seguridad:


    Ilustración 11. Respuesta de Bigpoint ante la información de una falla de seguridad.

    Luego de eso, no respondieron.

    Steam

    Ésta página cuenta con varias vulnerabilidades, ahora, les mostraré un Open Redirect.
    Los open redirect generalmente tienen una tabla de severidad media, debido a el impacto que puede afectar a cualquier persona que caiga. Por ejemplo, podríamos redirigir desde un sitio original a un sitio de phishing a las personas y así quedarnos con sus datos. La verdad, son muchas posibilidades que tendríamos con ese vector de ataque.

    Si entramos a algún vídeojuego(yo entré a éste), que quisiéramos comprar, veríamos algo como esto:


    Ilustración 12. For Honor - Juego de Steam.

    Si bajamos, podremos notar que hay un botón que se denomina: "Visitar el Sitio Web" y redirecciona a forhonorgame.com.


    Ilustración 13. Redirección desde Steam a páginas de juegos.


    El problema viene de Steam, debido a que su "linkfilter" hace una redirección absoluta a una URL proporcionada. Por esa misma razón, las URLs de redirección de Steam quedan de la siguiente manera:

    https://steamcommunity.com/linkfilter/?url=URL_DEL_JUEGO

    Esto ocurre únicamente cuando desde la página oficial de Steam presionamos el botón "Visitar el Sitio Web".

    • Si lo hacemos directamente, nos aparece el aviso que nos indica que "no es un sitio oficial de Steam".
    • Si lo hacemos dentro de la página de Steam, como lo he indicado, se redirecciona correctamente.

    Pero podríamos hacer lo siguiente:

    https://steamcommunity.com/linkfilter/?url=https://viinacademy.com

    La excepción ocurre cuando al abrirlo directamente, nos sale lo siguiente:


    Ilustración 14. Filtro de redirección de Steam.

    Entonces viendo que no funcionaba de esa manera, creé este pequeño exploit en php, que lo pueden encontrar en:
    https://viinacademy.com/redirect.php

    Código: (php) [Seleccionar]
    <?php
    $curl_h 
    curl_init('https://steamcommunity.com/linkfilter/?url=hotmail.com');


    # Modify Headers
    curl_setopt($curl_hCURLOPT_HTTPHEADER,
        array(
    'Host: steamcommunity.com',
    'Cookie: steamCountry=CO"%"7C98139622f4f41de49e0ad1ebcb216d70; steamLogin=76561198809901810"%"7C"%"7C639A3671DD789F0A0A852C7E39F271211527EC59; steamLoginSecure=76561198809901810"%"7C"%"7CF8C6CD7AB23B4060D130444791178356E37B7E7F; sessionid=ce46ae916feb5f18a3e8c6f6; _ga=GA1.2.589967724.1517180624; _gid=GA1.2.1251830587.1517180624; timezoneOffset=-18000,0; recentlyVisitedAppHubs=304390',
                  
    'User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0',
                  
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                  
    'Referer: http://store.steampowered.com/app/304390/FOR_HONOR',
                  
    'Connection: keep-alive',
                  
    'Upgrade-Insecure-Requests: 1'
        
    )
        
    );
    # Return Transfer
    curl_setopt($curl_hCURLOPT_RETURNTRANSFERtrue);
    //Follow Redirections
    curl_setopt($curl_hCURLOPT_FOLLOWLOCATIONtrue);

     
    //Execute the request
    $data curl_exec($curl_h);
     
    //Close cURL Handle.
    curl_close($curl_h);
    echo 
    $data;
    echo 
    'This is PoC By: Mortal_Poison #Underc0de #VIINVIDEOSHD';
    ?>


    Como podrán notar, hace una redirección satisfactoria, desde VIINACADEMY > STEAM > HOTMAIL. No es la única manera de explotar esto, pero simplemente es una pequeña prueba de concepto donde demuestro el open redirect(y no menciono de las posibilidades de XSS que posee en ese parámetro[descúbranlo por ustedes mismos]).

    En resumen y comprendiendo el exploit, Steam no verifica si sí es legítimo el Referer y el redireccionamiento, ya que como notaron, es como si le estuviera diciendo: "vengo de Steam y voy para VIINACADEMY" y Steam respondiera:"viene de Steam, es correcto, redireccionando...".

    Acuérdense que hasta se podría poner ese Open Redirect en herramientas como UFONet que aprovechan éste tipo de vulnerabilidades para hacer ataques de DDoS.

    Posdata: Aclaro que reporté las vulnerabilidades, pero es imposible cuando las empresas no se disponen a colaborar para solucionar estas vulnerabilidades donde a la final, los afectados somos nosotros. En otros entornos, será tu [email protected], tus amigos, tu familia, tú. Y dime ¿Estás dispuesto/a a exigir que las empresas fortalezcan su seguridad?.

    Cualquier sugerencia/duda u opinión es bien recibida.

    A continuación, les dejo un vídeo que he preparado para la explicación de éste post :). Un abrazo para todos.


    Próximamente puedo mostrar más fallos a más empresas ;D, dependiendo de cómo les parece éste post.

    8
    Debates / La hipocresía de los "Pentesters"
    « en: Diciembre 26, 2017, 07:27:30 am »

    No es cuestión de ego, es cuestión de realismo. Antes de que se acabe el año, sí que me gustaría dejar mi punto de vista ante lo que es hoy en día la seguridad informática. Denominé el título de esta manera, debido a tantas cosas que se me pasaron por la cabeza, entre ellas, las mentiras. El nuevo año que comenzará, sé que nuevas personas se incorporarán a éste mundo y otras se irán, como el ciclo natural de todo. Aquí en Underc0de sé que hay personas de muchísimo nivel, pero también me he dado cuenta que muchos entran simplemente para "subirse". Como en todas las comunidades, habrán usuarios que llegan a creerse dioses, afortunadamente, aquí eso está controlado.

    Mi país natal es Colombia(para los que no lo sepan), distingo a otras personas de éste país que dicen haber vulnerado tantas cosas y la verdad es que no lo han hecho. No juzgo lo desconocido, por ende, TENGO PRUEBAS y muy contundentes, pero para evitarme problemas, no las publico. Créanme, no traguen entero. Puede que no me conozcas, pero también puede que estés pensando que a mis 19 años apenas estoy comenzando en éste mundo, pero no es así, llevo más tiempo de lo que crees.

    El punto realmente se centra en que la seguridad informática en la actualidad se ha convertido en algo comercial y no de talento; mientras te exhibas en mayor cantidad, tienes más probabilidad de que más empresas grandes te contraten. ¿De qué vale tener ese tipo de "profesionales" en nuestro campo? ¿de qué vale que éste tipo de personas se crean más que otras? vamos, hasta a los postes más grandes se los mean los perros. Aquí nadie es más que nadie, puedes tener más conocimientos que otras personas, sí, pero eso no significa que habrán muchas personas que sabrán más que tú, y eso, eso es algo que debes aceptar. Además de lo que les he compartido, también entiendo que hay muchas personas que les da envidia otras personas que saben más que ellas, así que solo me queda recordarles una frase de aka Arkano: "El éxito ajeno, no implica el fracaso propio".

    Pero aquí el culpable no es quien transmite lo que percibe sino el oyente que no recicla lo que recibe. Al igual que los rumores.

    ¿Saben qué es lo peor de todo esto? el mundo real funciona así. Por esa misma razón, existe el Marketing Visual, por esa misma razón hay muchas personas que están en un puesto que no lo merecen, mientras otras que se esforzaron por conseguir algo, sobreviven día a día como pueden. No se trata de criticar y tampoco de presumir, se trata de hacer caer en cuenta a las personas para un mejor por venir.

    Dejémonos de excusas musas, los pretextos son válidos cuando decides aceptar y no indagar. No me gusta ser pretencioso, he reportado vulnerabilidades a grandes empresas(Google, Facebook, DropBox, Harvard, Freelancer, La NASA, entre otras) pero sé que no soy el único. ¿Eso hace que sea mejor que ustedes? no, pero sí siento que me hace más humano, por ayudar y contribuir con el conocimiento que me retribuyeron los libros y todo lo que leí.

    Muchas personas dicen que en estos espacios no aportarían nada, pues no le ven ganancia alguna. Respeto su posición, pero no la comparto. ¿De qué te sirve saber mucho si te mueres el día de mañana?. Muchos como respuesta pensarán el dinero. Cierto, pero me da lástima las personas que piensan así.

    En algunas conferencias que he tenido oportunidad de ser ponente(Barcamp, Bsides, DragonJar Conference, entre otras), al tratar con varias de las personas/ponentes, realmente se nota mucho el cómo son de subidos los ponentes por ser ponentes. Detesto a ese tipo de personas, porque pienso que aparte de promover un clasismo en ese tipo de eventos eventuales que busca retroalimentar conocimiento, generan segmentación entre las personas que asisten y entre los mismos ponentes.

    Si para triunfar se debe ser prepotente o se debe alardear cosas que no has hecho, entonces prefiero no "triunfar".

    Tú decides si deseas creer o investigar.


    Mis respetos para todo el equipo de Underc0de, que ha logrado mantener una comunidad tan constituida como esta, cada uno de ustedes hace que la piramide sea construida, que cada ladrillo vaya en su lugar. También a los usuarios que están constantemente actualizándose con el conocimiento que todos intentamos aportar. ¡A todos ustedes, les deseo un 2018 lleno de muchos éxitos!.

    Por favor, me gustaría que compartieras tu opinión acerca de la seguridad informática centrándote en los Pentesters, pues para mí, es valioso saber qué piensan ustedes.

    Gracias por leer.

    9
    Criptografía / [Aporte] Anonimato & privacidad
    « en: Diciembre 22, 2017, 05:24:27 am »

    Comentaré sin tapujos la miticidad del anonimato; te ofrecen en vídeos de Youtube el cómo ser anónimo mediante Tor / Whonix o incluso, las mismas VPN's. Considero que muchos queremos y tendemos a construir un perfil anónimo en cualquier lugar, sin embargo, es realmente una labor titánica que va más allá de las herramientas.

    Antes que nada, muchas personas no tienen claro que el Anonimato hace referencia únicamente a la protección de la identidad, mientras que la Privacidad se refiere únicamente a la protección de los datos o de los canales de comunicación. Lo menciono en aras de que se aumente el conocimiento, me he topado con personas que confunden de manera voluntaria o no los conceptos.


    EL MOTIVO

    A lo largo de los años, pasé por situaciones difíciles, que se tornan complejas desde lo legal, hasta lo "ético" y "moralmente" incorrecto. Considero y consideraré siempre la ideología de un lugar donde podamos ser libres, sin represión de los gobiernos, sin represión de un sistema que nos quiere abajo y que mantiene su poder entre familias. ¿No me crees? para nadie es un secreto que las familias que controlan el mundo se relacionan entre sí mismas para que el poder no se extienda a terceros. No soy conspiranoico, simplemente me informo e intento comprobar la información.

    Como nos intentan controlar de manera física, también lo intentan hacer de manera virtual: La CIA, La NSA, entre otras. Ahora, con lo de la Neutralidad de la red, todo se va a volver más difícil. Vamos a ver las cosas que deseo mostrarles en éste post, de lo que he aprendido a lo largo de años y que seguro, harán que cambies de opinión al decir o mencionarle a las personas que conoces:"nadie sabe lo que hago".

    La actitud anónima:

    Llenamos nuestras máquinas de tanta basura, de herramientas que no tienen ningún sentido, de herramientas que realmente no sabemos el por qué, pero nos brindan "anonimato". Ser anónimo no es llenar tu máquina con herramientas, realmente depende de un altísimo grado de tu actitud. Si visitas las mismas webs todos los días; Si accedes al mismo servidor de IRC desde la misma máquina usando uno o dos nicknames distintos; Si usas TOR a diario, pero paralelamente estás conectado a Gmail; Si mantienes tu sesión de Facebook abierta mientras realizas tus asuntos confidenciales... SEGURO NO VALDRÁ LA PENA BUSCAR EL ANONIMATO.

    El anonimato en la actividad ilegal:

    Siempre pongo el ejemplo: Defacers, los que se dedican al Ciberespionaje, Ciberterrorismo, entre otras. Sé que algunos de los que me leen lo hacen, no les critico sus acciones, pero sí les comento, tarde o temprano llegará a su casa la auténtica policia corrupta. Conozco muchos casos, pero no se trata de conocer los casos; se trata de que caen por no conocer muy bien lo que en realidad es el anonimato.

    Estilo de vida:

    Como yo considero que ser un profesional de seguridad informática es un estilo de vida, también considero que el ser anónimo lo es. Si instalas TOR/I2P no te hará automaticamente anónimo. Esto, solo es un pequeñísimo paso en esa dirección para llegar al destino. Para conseguir el anonimato, va más alla, y los pasos que hay que seguir, realmente pueden no gustarte.

    Los expertos en anonimato:

    Te pintan que son profesionales en ello, que conocen profundamente del tema y que puedes asesorarte para éste tipo de temas. Como todo, hay profesionales en todas las ramas de la seguridad, que no saben lo que hablan y esto mismo ocurre en este campo. Es debido, creo yo, mencionar que el tiempo muchas veces te suele enseñar cosas que la teoría no. Mi recomendación es que siempre pienses con tus propios argumentos y análisis lo que estás haciendo, no todo es tan simple como parece.


    A continuación les dejaré algunos pasos del cómo poder ser "anónimos":
    • Instalar Tor + I2P.
    • No navegar por las mismas webs todos los días.
    • Nunca dar datos o información personal para que reconocerte de manera física/virutal.
    • No usar Windows y tampoco Mac OSx.
    • Configurar un navegador donde estén desactivadas extensiones como: Java, Flash, WebRTC, JavaScript, entre otras.
    • Instalar extensiones que te ayuden a proteger tu privacidad(Random Agent Spoofer, Ghostery, Decentraleyes, Privacy Badger, NoScript, entre otras).
    • Crear y/o configurar perfiles de navegacion diferentes para Tor, ClearNET, I2P, Freenet.
    • Eliminar las cuentas de redes sociales como: Twitter, Instagram, Facebook, Gmail y todo lo que es relacionado con Google. Lo mismo con Hotmail, Outlook y demás servicios que consideres pertinentes. Lo mismo con Yahoo.
    • Usar en tus comunicaciones GnuPG, Omemo y OTR.
    • Cubrir todos los dispositivos de audio-video como las webcams o cámaras por USB, asimismo las camaras de tu movil y los microfonos.
    • Usar buscadores como DuckDuckGo, Starpage, entre otras.

    Añado que ahora mismo muchos usuarios que hablan de lo del anonimato mencionan que Tor Project se ha convertido en inseguro, no me consta, pero por las noticias que veo, podría decirse que sí. Lo de Tor lo trataré en un tema aparte, realmente es un tema que es interesante, de conocer a fondo el cómo funciona y demás cosas que podrán interesarle a más de uno.

    Si notan, en ningún momento mencioné el tema de VPN. Como alguna vez publiqué en mi Blog acerca de que con una VPN no serás anónimo, pero sí te genera privacidad y seguridad. Hemos visto muchos casos en los cuales los servicios de VPN que son de paga, te ofrecen "No Logs", pero cuando las autoridades llegan con una orden, estos servicios cooperan. Ponte a pensar: ¿pondrá en riesgo la fuente de ingresos la empresa por un usuario? la respuesta es un lamentable no. Vamos, es un negocio donde prima el capitalismo, no debes ser ingenuo. El caso de EarthVPN o de Hotspot Shield o de PureVPN o incluso, de otras, como lo es AirVPN, que se dice que es un servicio del FBI para ver el tráfico.



    Ilustración 1. Logo de RetroShare.


    Si nos vamos a F2F(Friend2Friend), nos encontramos con una de las herramietas de intercambio de archivos que se ha vuelto popular en los últimos años. Estamos hablando de RetroShare. Ésta herramienta ocasiona que los usuarios necesitan buscar y añadir activamente a otros usuarios, de tal manera que se genere un anillo de confianza.

    Una vez agregado algún contacto al anillo de nuestra confianza, se activarán secciones como: Buscador de Archivos, Foros, Salas de Chats, Email Interno, entre otros. Claro está, habrá que percatarnos de hacer otros pasos, ya que nuestra IP estará expuesta a RetroShare, así que se debería configurar RetroShare + I2P.


    Veamos algunas aplicaciones y/o servicios que nos ayudarán para el anonimato y la privacidad:


    Me tomé el trabajo de ponerles hipervinculo, así que son todas suyas ;).


    Virtual Machine + Virtual Private Network + TOR


    Ilustración 2. Sistema descentralizado para periodistas denominado SecureDrop.

    Considerado por muchas personas la salida de sus actos y la entrada del anonimato; en la actualidad, lastimosamente esto ya no funciona. TOR no cumple con el propósito que fue creado, y bueno, ahora el proyecto de SecureDrop donde es un sistema descentralizado para periodistas, cometieron el grave error de estar en Tor.

    Esperemos que las entidades gubernamentales no comiencen con la persecución a éstos periodistas, que ya mucho hacen con arriesgar sus vidas, incluyendo su propia libertad.


    Por último quiero hacer una reflexión que a posterior, creo que la recordarás frecuentemente.
    No es fácil volverse anónimo como lo he mencionado, pero las cosas que se desean, no se logran sin esfuerzo. Hay cuestiones que realmente hacen desprendernos de nuestra manera de vivir, de nuestros hábitos, de nuestras costumbres. Hay una frase de Francis Picabia, un gran pintor Francés: "Nuestra cabeza es redonda para permitir a los pensamientos cambiar de dirección".

    No podemos quedarnos siempre en la misma situación, de la misma manera en la que comenzamos. El mundo no gira en torno a nosotros, las cosas, son supremamente variables. Así mismo, como un sistema nos quiere controlar físicamente, lo quieren imponer virtualmente. Muchas personas luchan a diario, Activistas y demás, pero no nos damos cuenta. Más vale ver una serie de Netflix, más vale "encerrarnos" en nuestro propio mundo y no saber que solo somos ovejas de un pastor. Las ideologías deben cambiar en pro de un país, de una sociedad. Me da impotencia y una profunda furia, saber que las personas se acostumbran. Se acostumbran a ver que los politicos roban el dinero del pueblo, pero vamos, "es normal". Seré directo y sincero: también se han acostumbrado al pensamiento de "no soy importante, que me espien". Así mismo muchísimos que he visto que están en el rubro de Ciberseguridad.

    Cuando cambia una persona, comienza a cambiar el mundo.

    Próximamente, haré posts donde muestre los aspectos técnicos del cómo configurar correctamente los servicios y demás, para los que realmente quieren ser anónimos.

    Cito una frase de Edward Snowden:

    Citar
    "Aunque usted no esté haciendo nada malo, está siendo observado y grabado, y la capacidad de almacenamiento de estos sistemas se incrementa consistentemente todos los años en órdenes de magnitud que están llegando al punto en que usted no necesita haber hecho algo malo".

    Y tú, ¿tomarás la decisión de ser o no anónimo?. [/font]


    10
    Front-end / Ruleta con HTML5 y JavaScript
    « en: Diciembre 20, 2017, 02:27:50 pm »

    Hace bastante tiempo creé una ruleta, la cual quiero compartir con ustedes, ya que Antrax estaba preguntando por una en éste post.
    De igual manera, en mis tiempos libres creaba juegos en JavaScript, Html5 y CSS3, así que bueno, espero que les sirva, ya que no es muy complicado el funcionamiento.


    Cuando se da click en "Girar", automáticamente gira la ruleta y cae en algún elemento.

    El index, simplemente contiene un botón, el cual nos ayudará a llamar un evento en el JavaScript. También tenemos el Canvas, que lo definimos ahí mismo.



    En el archivo de Index.js, tenemos la lógica, donde están los colores en una función de RGB con retornos, y también, el cómo gira la rueda y la flecha cómo toma sus valores.

    El código está comentado, así que espero que les sea de gran ayuda.

    El código lo pueden descargar desde el siguiente enlace.

    Descargar código

    Cualquier sugerencia, duda u opinión, será bien recibida.



    11
    Python / ¿Hacking con API's o redes sociales?
    « en: Diciembre 19, 2017, 09:48:38 pm »

    Cuando deseamos o queremos trabajar con las API's de Facebook, Twitter e Instagram, algunas veces, estas nos frenan. He tenido la oportunidad de trabajar con Machine Learning por distintos motivos y contratos, pero nada se suma a la preocupación que llegué a tener al saber que el tiempo se acotaba y el trabajo no estaba ni por la mitad. En uno de ellos, debía realizar análisis de sentimiento que era realmente complejo; debía hacer uso de la API de Instagram. Al final, tendrás un glosario donde está definida la terminología usada en éste post. Los que alguna vez han hecho uso de la API de Instagram, sabrán que ésta únicamente te permite hacer uso de sus métodos si la aplicación ya está en producción, y para verificar esto, debes mandarles un formulario donde demuestres de que es verídica tu aplicación en producción. Al encontrarme con esto, no le entendí la lógica del por qué harían eso, sabiendo que muchos desarrolladores necesitan hacer uso de sus métodos para testing y bueno, infinidad de cosas antes de lanzar a producción cualquier cosa. Cuando vi lo que les mencione anteriormente, me quedé sorprendido, con cara de: vaya  :-\.

    Deberíamos remitirnos primero a la siguiente documentación de Instagram del desarrollador:
    Review -> Link directo.

    A continuación, podrán ver el lugar exacto donde ellos mismos ratifican que no aceptan apps en modo de test:



    Ilustración 1. Líneas exactas donde emiten el NO uso de su Api para aplicaciones en modo test.

    A mi criterio propio, es desapropiado decidir que las aplicaciones de prueba no pueden hacer uso de su API mientras que las de producción sí; de igual manera, están haciendo uso de su servicio.

    Determinando que no se podía/puede hacer uso de la API y necesitaba hacer el trabajo, me senté a hacer el código(reinventar la rueda, pero al cliente no le importa si la reinventas o no, él necesita el trabajo).


    EL COMIENZO

    Debía saber cómo funcionaba Instagram, así que me fui al buscador y busqué un HashTag:



    Ilustración 2. HashTag de Obama.

    Más de 3 millones de Posts con el HashTag de #Obama. Ahora, lo que debía recopilar era lo siguiente:



    Ilustración 3. Color Negro: Texto del que publica; Color Azul: Comentarios.

    Además de recopilar los nombres de usuarios, también debía quedar en un archivo de texto plano, que a eso no le veo complejidad alguna. Ahora, vamos con el código.

    Aclaro que ya fue hace algunos años que hice el código, ustedes pueden mejorarlo, pues el código que les voy a mostrar es únicamente un estilo de prototipo, luego lo mejoré y ahora es más robusto. Aunque es privado, espero que éste, les de una idea de lo que se puede llegar a hacer con perseverancia, constancia y lo más importante: pasión.

    Un usuario de Underc0de también deseaba saber cómo hacer ScrollBar en Twitter, pues bueno, aquí lo haré con Instagram. Lo único que faltaría, es cambiar peras por manzanas(espero y te de una idea, ;)).



    Ilustración 4. Botón de cargar más.

    Al presionar en "Cargar más", se cargan las demás publicaciones, valga la redundancia. Ahora, lo que hay que tener en cuenta es que al presionar se hace una petición a /query/ para traer la información de la siguiente página.



    Ilustración 5. Petición a /query/ para obtener la información de la siguiente página.



    Ilustración 6. Segunda petición que realiza Instagram para verificar si se cargó correctamente mediante Ajax.

    Comprendiendo esto, podemos deducir que en las peticiones a /query/ siempre va a variar un valor, que hace referencia al de la página: Página 1, Página dos, Página Tres, Página N.

    Instagram sigue en sus patrones para conocer la siguiente página una variable llamada “end_cursor”, el cual le indica el “max_id”(es decir, cuál es el ID de la página siguiente). Esto, lo podemos encontrar de la siguiente manera:

    https://www.instagram.com/explore/tags/TAG_A_BUSCAR_JSON/?__a=1&max_id=END_CURSOR

    En éste caso, el tag es Plebiscito, que vendría siendo el HashTag #Plebiscito respectivamente. Así, que quedaría de la siguiente forma:

    https://www.instagram.com/explore/tags/plebiscito/?__a=1&max_id=END_CURSOR

    Al cargar esto, se mostrará de manera lineal, por ende, le daremos formato con la siguiente página:

    JsonViewer



    Ilustración 7. Formato al JSON del HashTag de Instagram.



    Ilustración 8. END_CURSOR que indica la siguiente página al presionar en "Cargar más".

    Si observamos detalladamente, podemos ver en el siguiente enlace, un JSON que nos muestra el end_cursor y también un ‘code’ que hace referencia al código de la imagen: https://www.instagram.com/p/CÓDIGO).




    Ilustración 9. "Code" del JSON es el código de la URL en la imagen mostrada.

    Asumiendo que la próxima página con las fotos se mostrará con un código determinado por END_CURSOR, hay que automatizar dicho proceso de tal modo, que extraigamos los códigos de las imágenes en cada END_CURSOR(página) que nos posicionemos.

    Realicé entonces, un script en PHP, el cual cargará todos los end_cursors, es decir, todas las páginas y a la vez, obteniendo la variable 'code'  y almacenándola en un archivo.



    Ilustración 10. Script en PHP encargado de almacenar los códigos de las imágenes.

    ini_set(‘max_execution_time’, 0) es para que no se obtenga un límite de tiempo al intentar obtener todos los ‘code’.
    Luego, se crea un loop infinito mientras se va añadiendo al archivo de texto y además de esto, se va obteniendo cada uno de los códigos de las imágenes(‘code’) hasta la última página del hashtag.
    Ejecutándolo en un servidor local, podemos observar que nos imprime y guarda los respectivos códigos.




    Ilustración 11. Archivo de texto plano con los códigos de las respectivas imágenes



    Luego de obtener los códigos de las imágenes del HashTag que deseamos, se procede a leer el archivo que creo el script de php con python, para ello, tenemos esta función:



    Ilustración 12. Función que se encarga de leer el archivo de texto con los códigos de las imágenes.



    Una vez leídos, se almacena en una lista temporal, la cual será enviada a la función que obtendrá los comentarios y el Caption(la descripción de la imagen/foto de la persona que lo publica).
    Luego de que se almacena la lista y contiene los valores que son los códigos de las imágenes, se envía como parámetro de entrada a la función “get_comments_data”.



    Ilustración 13. Función donde son recibidos los códigos de las imágenes como argumentos de entrada.

    En este punto, es crucial conocer que cada imagen tiene incrustada objetos de Javascript, los cuales se cargan cada vez que se carga una imagen.

    Por ejemplo, veamos la siguiente imagen:

    https://instagram.com/p/JdVMPCGvOw



    Ilustración 14. Objetos de JavaScript incrustados.

    ¿Aún no la ves? démole formato:



    Ilustración 15. Objetos de JavaScript incrustados con formato.

    De esta forma, creé la expresión regular con el objetivo de solo obtener la parte que yo solo deseaba para luego acceder mediante JSON. En la siguiente imagen, lo pueden apreciar con más detalle:



    Ilustración 16. Expresión regular para recopilar lo que se desea.

    Además de eso, el código tiene comentarios, así que pueden apreciar cada línea lo que hace con más detalle fijándose en ellos. Cabe recalcar que también se escribe en un archivo individual cada comentario y username: el comentario como el contenido del archivo y el username como el nombre del archivo.
    La siguiente imagen muestra como va obteniendo todos los comentarios y nombres de usuario de cada una de las url’s ya cargadas.



    Ilustración 17. Script en ejecución.

    Para finalizar, lo que queríamos ;D :



    Ilustración 18. Resultados del script.

    Como les mencione, yo mejoré dicho script haciéndolo mediante Threads, pues a pesar de ser rápido, quería más velocidad. Le añadí otro tipo de cosas de OSINT y bueno, como sabrán, usar API's es muy potente cuando queremos recopilar información en masa. Incluso, también le añadí algo con Selenium. Sin embargo, como en Instagram, si te "frenan" de alguna manera, aprende a realizarlo de otra forma distinta. Como dice un dicho muy famoso: "Si del cielo te caen limones aprende a hacer limonada".

    Espero que les de idea de cómo también funcionan éstas plataformas, sobretodo, a conceptualizar cosas que quizás desconocían. Comentarles que haré un vídeo con algunos otros detalles que quizás no me percate, así que no se preocupen ;D.

    Cualquier duda, sugerencia u opinión será bien recibida.

    El código, lo pueden descargar desde aquí:

    Mega - Download This

    Un vídeo explicando su funcionamiento y su "Rework":



    Nuevo enlace de descarga:



    GLOSARIO

    OSINT: Open Source Intelligence.
    CAPTION: Descripción que realizan las personas al publicar algo.
    SCROLLBAR: Barra de desplazamiento.
    [/font]

    12
    Underc0de / ¡Me lo gané con Underc0de!
    « en: Diciembre 03, 2017, 07:38:15 pm »
    Hola a [email protected],

    Como muchos sabrán, es de mi gusto realizar contenido en el foro de Underc0de. En el concurso mensual del mes, fui el ganador del concurso mensual que se realiza en la comunidad con el post de Reconocer colores de las imágenes con Python . Como les comenté, los otros posts también son excelentes, así que creo que esta es una iniciativa para incentivar a que todos creemos un mejor contenido, retribuyendo conocimiento a latino-américa y por qué no, al mundo.


    Me lo gané con Underc0de ;D

    Fuera de broma xD, ahora sí, siguiendo las reglas, les mostraré que se me consignaron los 15 dólares respectivos a mi cuenta.


    Espero que éste mes participe más gente, ¡muchas gracias a todos!.

    Un saludo.

    13
    Python / [APORTE] Reconozcamos los colores de nuestras imágenes
    « en: Noviembre 05, 2017, 02:42:20 am »
    Hola a [email protected],

    Un día, estaba con unas imágenes que debía identificar para realizar una tool, sin embargo, me era muy complicado contar los colores. Vamos, a veces se cuenta mal, se es daltónico(sin ánimo de discriminar o criticar ni nada por el estilo) o se está con 'pereza'. Así que realicé un script el cual reconocerá los colores de las imágenes que le pasemos.

    El módulo de imagen[Image] proporciona una clase con el mismo nombre que se utiliza para representar una imagen PIL. El módulo también proporciona varias funciones de fábrica, incluidas funciones para cargar imágenes desde archivos y para crear nuevas imágenes.

    Tenemos muchísima información aquí: ENLACE.


    Como pueden ver, el módulo nos provee funciones muy potentes.

    Como me encuentro en Windows, les va a pedir si o si el módulo de Image. Suele ocurrir que si te bajas el paquete, te salga un error de zlib, sin embargo, lo vamos a instalar de la siguiente manera en nuestro cmd.

    Código: (text) [Seleccionar]
    python -m pip install Pillow
    Una vez hecho esto, voy a explicar cada una de las partes del código de una manera concisa y detallada. También he comentado el código, para que lo entiendan de una manera más precisa.



    Ilustración 1. Inicialización.

    Al inicio del script inicializamos las variables que vamos a usar. El módulo de ImageDraw e Image son importados para el reconocimiento y para trabajar con los colores de la imagen que vayamos a 'reconocer'. Además de esto, tenemos el famoso argparse, el cual determinará los argumentos del script que el usuario nos envie.


    Ilustración 2. Uso de argparse y obtención de parámetros dados por el usuario.

    Siempre que se vaya a ejecutar el script, comenzará por el main(porque lo estamos llamando desde __name__ == '__main__). Siguiendo con la guía, tenemos dos argumentos, el de output y el de file.

    En la línea de comandos cuando ejecutemos nuestro script, tendremos que hacerlo de la siguiente forma:

    Código: (text) [Seleccionar]
    python recoignize.py -o "C:/Users/Mortal/Desktop/Name_Directory" -f "C:/Users/Mortal/Desktop/Nombre_De_La_Imagen.png"
    Si el directorio no existe, se creará, no se preocupen.

    Notemos que llamamos a logic_images(args) y le pasamos nuestros argumentos.

    Vamos por pedazos, como Jack el destripador.


    Ilustración 3. Obteniendo información de nuestra imagen.

    Como podemos notar, lo que hacemos es obtener nuestra imagen(args.file) y luego operar con PIL_IMAGE_FILE, ya que es la que abre nuestra imagen. Además de eso, obtenemos el tamaño del alto y ancho y los multiplicamos. En la línea 36 ponemos la condición de que si no llegase a existir el directorio que proporcionamos, que se cree.

    De la línea 40 a la línea 47 lo que hacemos es obtener la información(colores) de nuestra imagen y posteriormente, hacer nuestra condición para ver si restamos pixeles a nuestra imagen o ya trabajamos con ellos.


    Ilustración 4. Asignar a nuestro diccionario los pixeles.

    En nuestro diccionario quedarían los pixeles con el identificador de 'col' para acceder a él.
    Si no me entendieron, sabemos que los diccionarios son de este estilo:
    Código: (python) [Seleccionar]
    capitales = {'Scripting':'Python', 'Programacion':'PHP'}
    Si notan, poseemos clave-valor en un diccionario, para acceder a cada uno de esos datos, accedemos por la clave.

    En el caso de los pixeles con 'col' vendría siendo lo mismo.


    Ilustración 5. Guardar los colores analizados en imagenes separadas.

    En la Ilustración 5. podemos notar que lo que hacemos es hacer unos cálculos con los píxeles(más información en los comentarios) y luego, pasamos a guardar las imágenes de los colores que analizamos de nuestra imagen principal en porcentajes y en formato png. Añado que, luego de eso, también se añade a la lista de sorted_all_colors, el color y el porcentaje, para luego ordenarlo. Esto con el fin de que más adelante, lo usaremos para crear nuestra "torta" de los colores y para ello ocupamos una torta, por ello se crea una imagen de tipo círculo.


    Ilustración 6. Guardamos cada uno de los colores en nuestro círculo.

    En la Ilustración 6. observamos que hacemos varias cosas, entre ellas, crear y modificar nuestro círculo(ángulo de inicio, ángulo de fin, relleno, entre otros) y también creamos un archivo .json que contiene el código RGB del color y el número del mismo. Además de eso, nuestra torta que contiene los colores usados por la imagen se llama torta.png. Como les mencioné, en los comentarios está muchísimo más detallado y bueno, espero que les sea de utilidad.

    A continuación, les dejo el código completo.


    Código: (python) [Seleccionar]
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-

    ### Mortal_Poison ###
    ### [youtube]https://www.youtube.com/VIINVIDEOSHD[/youtube] ###
    ### https://www.viinacademy.com ###
    ### https://underc0de.org/foro/profile/Mortal_Poison ###

    ## Importamos las librerías necesarias.
    import os
    import json
    from PIL import ImageDraw
    from PIL import Image
    import argparse

    # Inicializamos.
    porcentaje_minimo = 0.5 # Porcentaje de color en el archivo que se agregará.
    transparent_pixels = True # Usaremos pixeles transparentes.
    circle_size_create = 500 # Tamaño de archivo circular en pixeles.
    color_files_flag = True # Obtener resultados con archivos de imagen.
       
    file_for_results = True # Obtendremos resultados con JSON.
    format_for_results = 'hex'  # Lo hacemos porque conocemos que el formato es hex - rgb - rgba.
    json_extension = '.json' # Nuestros resultados tendrán la extensión en json.

    ## Diccionario para nuestros pixels.
    dictionary_for_colors = {}
    ## Lista de los colores ordenados.
    sorted_all_colors = []
       

       
    ## Nuestra función.
    def logic_images(args):
        ## Abrimos nuestra imagen ##
        global pixels_per_image
        PIL_IMAGE_FILE = Image.open(args.file)
        ## Obtenemos el tamaño y lo multiplicamos(alto por ancho).
        pixels_per_image = PIL_IMAGE_FILE.size[0] * PIL_IMAGE_FILE.size[1]
        ##Si no llegase a existir el directorio, lo creamos :).
        if not os.path.isdir(args.output):
            os.makedirs(args.output)
        ## Declaramos nuestra variable global, porque la tenemos local.
       
        ## Obtenemos la información de nuestra imagen con un loop.
        for pixels_rgba in PIL_IMAGE_FILE.getdata():
            if pixels_rgba[3] == 0:
                if transparent_pixels == True:
                    pixels_rgba = (0, 0, 0, 0)
                else:
                    pixels_per_image -= 1
                    continue
            try:
                ## Asignamos en nuestro diccionario el pixel rgba junto al identificador col.
                col = dictionary_for_colors[pixels_rgba]['col']
                # Incrementamos nuestro col.
                dictionary_for_colors[pixels_rgba] = {'col': col + 1}
           
            except:
                dictionary_for_colors[pixels_rgba] = {'col':1}
         
        ## Recorremos nuestro diccionario.
        for color in dictionary_for_colors:
             ## De nuestro diccionario de los pixeles que obtuvimos, lo vamos a multiplicar y lo dividimos entre el flotanto de el total de píxeles.
            percentage_of_color = dictionary_for_colors[color]['col'] * 100 / float(pixels_per_image)
            # Ahora condicionamos, si la anterior variable es mayor o igual a nuestro porcentaje mínimo(qu es del 0.5) entonces...
            if percentage_of_color >= porcentaje_minimo:
                # Además, condicionamos si vamos a obtener los resultavos en formato de imagen, entonces...
                if color_files_flag == True:
                    # Creamos una nueva imagen, le asiganmos el modo,tamaño y los colores.
                    img = Image.new('RGBA', (100, 100), (color[0],color[1],color[2],color[3]))
                    # Aqi asignamos el porcentaje de color para posteriormente guardarlas.
                    file_name = 'Per_Color_%03.4f.png' % percentage_of_color
                    # Ahora las guardamos en nuestro directorio de salida en formato PNG.
                    img.save(os.path.join(args.output,file_name),format="png")
                # Para un mayor orden, se me ocurrió ordenar los colores. Abrimos nuestra lista con los datos respectivos.
                sorted_all_colors.append({'color':color,'number':percentage_of_color})
        # Por último, ordenamos con sort.
        sorted_all_colors.sort(key=lambda k: k['number'],reverse=True)
       
        # Creamos un círculo para mostrar los resultados como en una torta de resultados.
        circle = Image.new('RGBA', (circle_size_create,circle_size_create), (0,0,0,0))
        _current_angle = 0
        # Mediante el loop y los colores ordenados, lo recorremos...
        for x in sorted_all_colors:
            # Lo multiplicamos para expandirlo.
            _current_pieslice_angle = x['number'] * 3.6
            # Dibujamos nuestro circulo y además, lo llenamos de los colores que están en nuestra lista de colores ordenados.
            ImageDraw.Draw(circle).pieslice([10, 10, circle_size_create-10, circle_size_create-10], _current_angle, _current_angle + _current_pieslice_angle, fill=(x['color'][0],x['color'][1],x['color'][2],x['color'][3]))
            # Acumulamos.
            _current_angle += _current_pieslice_angle
         
            # Condicionamos, si vamos a obtener los resultados en .json entonces...
            if file_for_results == True:
                # Si el formato del color de resultados además es hex, entonces...
                if format_for_results == 'hex':
                    x['color'] = '#%02x%02x%02x' % (x['color'][0],x['color'][1],x['color'][2])
                elif format_for_results == 'rgb':
                    x['color'] = (x['color'][0],x['color'][1],x['color'][2])
        # Guardamos nuestro círculo, en donde hemos elegido guardar todo y le llamamos torta en formato png.
        circle.save(os.path.join(args.output,"torta.png"),format="png")
       
         # Condicionamos, si vamos a obtener los resultados en .json entonces... RECORDAR QUE SIEMPRE ESTÁ EN TRUE.
        if file_for_results == True:
            # Guardamos nuestro archivo de JSON en un archivo de json llamado colors.json.
            with open(os.path.join(args.output,"colors"+json_extension), 'w') as outfile:
                json.dump(sorted_all_colors, outfile)
       
        # Al finalizar todo el proceso, imprimimos, analizado.
        print("Analizado correctamente. Verificar la ruta de salida.")
    #logic_images()


    def main():
        parser = argparse.ArgumentParser()
        parser.add_argument('-o','--output', help='Output of the colors.')
        parser.add_argument('-f','--file', help='Image to Scan colors.')
        args = parser.parse_args()
        # -f -> La imagen de la cual queremos obtener los colores.
        # -o -> Directorio para obtener los colores(se obtienen separados).
        logic_images(args)

     
     
    if __name__ == '__main__':
        main()


    Añado que reconoce muy bien las imágenes, pero tiene un margen de error, pero bueno, ya podrán modificarlo a sus necesidades.
    Les dejo una imagen de cómo funciona y además, de sus resultados.

    Analizaremos la siguiente imagen de Underc0de:


    Ilustración 7. Imagen de underc0de a analizar.

    Lanzamos nuestro script de la siguiente forma:

    Código: (python) [Seleccionar]
    python recoignize.py -o "C:/Users/Mortal/Desktop/results_for_scan" -f "C:/Users/Mortal/Desktop/logo_underc0de.png"

    Ilustración 8. Imagen analizada de underc0de.

    Como podremos notar, ¡nos saca los colores que usa el logo del foro de underc0de!. Pero no es todo, abramos el archivo de colors.json:


    Ilustración 9. Archivo JSON de la imagen analizada.


    Ilustración 10. Torta con los respectivos colores de la imagen.


    Como vemos, funciona todo perfecto. Se puede calibrar más, de hecho, tengo aún otra versión que la estoy modificando para que sea un poco más potente. Espero que hayan podido observar el potencial de Python y de sus ventajas que nos brinda.

    Cualquier comentario/duda/sugerencia será bien [email protected]

    Un saludo.
    [/font]

    14
    Python / [PARTE 1] ¡Aprende Python Avanzado!
    « en: Noviembre 04, 2017, 09:35:00 pm »

    Hola a [email protected],

    Hoy les traigo un aporte de Python Avanzado,donde asumo que ya conocen y tienen buenas bases de Python. Estos tutoriales también los llevaré a mi canal donde los explicaré con voz, por si a alguien le interesa. Además de eso, también mostraré las vulnerabilidades que se cometen cuando se programan en éstos lenguajes de Scripting, ya sea PHP, Python(con sus frameworks) y entre otros(será en otro hilo).

    Comencemos...


    Ilustración 1. Guido van Rossum

    No sé ustedes, pero yo vi esa imagen y se me vino a la mente Kevin Mitnick(por su parecido físico xd).

    Por la década de los 80's, cuando se creo éste lenguaje de scripting que muchos amamos, comenzó a evolucionar con su misma filosofía: proporcionar un lenguaje de programación que fuera multiparadigma con legibilidad y productividad. La cuestión es, la gente solía ver a Python como un lenguaje de Scripting y no como lo anterior. Sin embargo, las empresas pioneras en ese entonces, notaron que con Python podían construir cualquier tipo de sistema. Y así fue como se convirtió en lo que hoy conocemos: en un lenguaje de Scripting.

    Cabe aclarar que abarcaré todo desde la última versión de Python, la 3.x.x.

    Python 3, a pesar de sus nuevas y emocionantes características, todavía no es adoptado en la comunidad. Notemos en Python 3 WoS(Wall Of SuperPowers), donde observamos la compatibilidad de los paquetes más populares en Python 3, fue llamada Python 3 Wall Of Shame. Es un poco triste, pero esto pasa con cualquier versión de cualquier lenguaje de programación: Java, por qué lo "detestan".

    Esta situación está cambiando poco a poco, de hecho, si notan, en la página los paquetes enumerados se están poniendo de color verde, precisamente porque se está avanzando en este aspecto.

    La gente suele comentar: "los paquetes de Python 2 a la versión de Python 3 no se encuentran". Pues cuando la página esté totalmente verde como un trébol, ésta gente no tendrá excusa para aprovechar el máximo potencial de la versión de Python 3. A pesar de todo, tienen razón. He desarrollado herramientas(que son privadas pero que he presentado en conferencias) que están en Python 2.x por su compatibilidad. El problema radica en que, permutar una aplicación existente en Python 2.x a Python 3.x resulta un completo problema. Pero como existen páginas para convertir migraciones de Oracle a Mysql, también las hay en Python. Claro está, esto no garantiza un 100% de que todo funcionará correctamente(porque lo he comprobado) sino más bien de migrarlo y verificar todo de nuevo. La herramienta para transformar el código de Python 2.x a Python 3.x se llama 2to3.


    Ilustración 2. Mongomering Berns aludiendo a las empresas.

    Ahora imaginen, si a mi me cuesta un poco, a las organizaciones un proceso como esos les va a costar el doble o incluso el triple, y eso ellas no lo pueden permitir.


    Ilustración 3. Arquitecto de Software.

    Sin embargo, realizar un cambio de estos lo podemos hacer mediante metodologías de diseños de arquitectura de software, como por ejemplo la orientada a servicios o microservicios, donde se puede conseguir un objetivo bastante grande y con muy buenos resultados. No me centraré en cuáles diseños de Arquitectura de Software existen, de esto, existen estudios hasta posdoctorados.

    Sin embargo, yo recomendaría a las empresas hacerlo, los beneficios que trae Python 3 es verdaderamente fabuloso. Basémonos en el PEP-404, éste es el que nos indica qué va a ocurrir con Python 2 y por qué migrar a Python 3. Se comenta en el artículo que ya no habrá versión 2.8 en la versión de Python y que además, en un momento determinado a posteriori, proyectos principales como Django, Numpy y Flask eliminarán la compatibilidad con la versión 2.x y solo estarán disponibles en la versión 3. Es un aspecto muy importante que quería tocar, por el hecho que muchos de los desarrolladores se abstienen a migrar a una versión de Python 3.

    Principales diferencias entre Python 2 y Python 3

    Mostraré las principales diferencias que existen con ejemplos, recordando a un amigo que una vez me dijo: "ese código no sirve, da error por todo". Lo que no se dió cuenta, era que estaba en Python 3 y no en Python 2.

    Para los que no estén familiarizados, por favor remitirse al siguiente enlace.

    • Cambios de Sintaxis.
    • Cambios de librerías.
    • Cambios de tipos de datos y también de colecciones.

    Comencemos por los cambios de sintaxis, en Python 2 imprimir un mensaje sería lo siguiente:
    Código: (python) [Seleccionar]
    print "El mundo caerá en caos"
    Mientras que en Python 3:
    Código: (python) [Seleccionar]
    print("El mundo caerá en caos")
    Obviamente, si intentamos ejecutar con Python 2 el código de Python 3, nos generará error y viceversa.


    Ilustración 4. Ejecutando con Python 3 un mensaje con la sintaxis de Python 2.

    Esa es una de las diferencias, además de:
    print ya no es una declaración sino una función, esa es la razón por lo que el paréntesis ahora es obligatorio.
    ➡ Las excepciones cambiaron: from except exc, var a except, exc como var.
    ➡ El operador de comparación <> ha sido removido y cambiado a !=.
    ➡ La función sort() y las listas con método sorted() ya no aceptan el argumento cmp argument.
    ➡ Las expresiones de divisiones entre enteros como por ejemplo 3/2, retornará flotantes. Para ello debemos usar el operador //. Esto es muy bueno, porque podemos hacer una división como: 10//7 y el resultado será 1.

    Compatibilidades entre versiones

    Realmente se torna complicado cuando queremos hacer esto. Sin embargo, vale la pena. La mejor manera hasta ahora para definir cómo puede cambiar la compatibilidad en el futuro es mediante SemVer.

    SemVer describe un estándar que es ampliamente aceptado a nivel mundial para marcar el alcance del cambio en el código mediante el especificador de la versión que consiste en solo tres números. También ofrece algunos consejos de cómo manejar las políticas para desaprobar esto. Podemos obtener más detalles en su página oficial, donde nos indica el formato MAYOR, MENOR o PATCH dependiendo el número de versión.

    La compatibilidad muchas veces la podemos agregar en un fichero llamado compat.py, de hecho, hay mucha información acerca de esto:
    En GitHub un proyecto.
    Información de compatibilidad.

    Si vemos el código de compat.py en el proyecto de GitHub, nos damos cuenta que es de la siguiente forma:

    Código: (python) [Seleccionar]
    # -*- coding: utf-8 -*-
    import sys
    ## Condición para verificar la versión de Python.
    if sys.version_info < (3, 0, 0):
        import urlparse  # Si es menor a la 3.0

        def is_string(s):
            return isinstance(s, basestring)  # noqa
    ## Sino, usamos la librería de Python 3.
    else:
        from urllib import parse as urlparse  # noqa

        def is_string(s):
            return isinstance(s, str)

    Esa es una forma muy conveniente para las dependencias de librerías y asumir la compatiblidad en nuestros proyectos de Python.

    Hablemos de Jython


    Ilustración 5. Logo de Jython.

    Nos permite usar sin problemas las clases de Java dentro de nuestros módulos de Python. Jython,  utilizar sin problemas las clases de Java dentro de sus módulos de Python. Tenemos que Jython es multiplataforma, posee velocidad y memoria y además, también tiene sincronismo multihilo. Pylons, uno de los frameworks también está intentando promover e incentivar para que Jython se encuentre en el mundo de Java.

    Hablemos de IronPython


    Ilustración 6. Logo de IronPython.

    IronPython nos permite integrar Python al Framework de .NET. El proyecto es apoyado por Microsoft, donde trabajan los desarrolladores líderes de IronPython. Es una implementación bastante importante para la promoción de un idioma. Además de Java que posee una de las comunidades desarrolladoras más grandes que existen, .NET no es la excepción. También creo que vale la pena resaltar que Microsoft proporciona un conjunto de herramientas de desarrollo gratuitas que convierten a Visual Studio en un IDE de Python completo. Esto se logra con plugins desarrollados como PVTS(Python Tools for Visual Studio) de Visual Studio y está disponible como código fuente abierto. Lo puedes descargar del siguiente enlace.


    Hablemos de PyPy


    Ilustración 7. Logo de PyPy.

    PyPy es probablemente una de las implementación más emocionantes, ya que su objetivo es volver a escribir código Python en Python. En PyPy, el intérprete de Python está escrito en Python. Tenemos una capa de código C que lleva a cabo el trabajo de nuts and bolts para la implementación CPython de Python. Sin embargo, en la implementación de PyPy, esta capa de código C se reescribe totalmente en Python puro. ¿Qué significa esto? significa que puede cambiar el comportamiento del intérprete durante el tiempo de ejecución e implementar patrones de código que no podrían hacerse fácilmente en CPython. En la actualidad, PyPy apunta a ser totalmente compatible con la versión de Python 2.7, mientras que PyPy3 es compatible con la versión de Python 3.2.5.

    Command Shells para Python

    Existen varios, sabemos que python al instalarlo trae un command line, sin embargo, aquí van otros.

    bpython

    bpython posee una interfaz elegante para el intérprete de Python. Éstos son algunos de las cosas que podemos obtener con bpython:
    • Resaltado de sintaxis en línea
    • Autocompletar similar a Readline con sugerencias que se muestran a medida que escribe
    • Autoindentación(para las personas que dicen que odian python por su indentación  ::) )
    • Soporte de Python 3
    • Listas de parámetros esperados para cualquier función de Python

    Descargar del siguiente enlace bpython.


    iPython

    IPyhton (http://ipython.scipy.org) proporciona un shell de comandos de Python extendido. Entre sus características, enumeraré las que son más interesantes:
    • Introspección dinámica de objetos
    • Acceso al shell del sistema desde el prompt
    • Soporte directo de creación de perfiles
    • Instalaciones de depuración

    Ahora, IPython es una parte del proyecto más grande conocido como Jupyter que proporciona notebooks interactivos con código en vivo que puede ser escrito en muchos idiomas distintos.

    Descargar del siguiente enlace IPyhton.

    ptpython

    ptpython es un proyecto open source, la implementación de las utilidades básicas del núcleo está disponible como un paquete separado llamado prompt_toolkit. Esto permite crear varias interfaces interactivas de línea de comandos que estéticamente son agradables. A menudo se suele comparar con bpython en el aspecto de funcionaldiades, pero la principal diferencia es que habilita un modo de compatibilidad con IPython y su sintaxis habilita características adicionales como %pdb,%cpaste o %perfil.

    Descargar del siguiente enlace ptpython.

    Para finalizar les comentaré de varios debuggers que uso cuando me estoy dando cabezasos contra la pared al no encontrar por qué me sale error :-\.

    Debugging In Python

    La depuración de código es un elemento esencial en el proceso de desarrollo de software. Muchos programadores/desarrolladores pueden pasar la mayor parte de su vida utilizando únicamente registros extensos como sus principales herramientas de depuración, pero la mayoría de los desarrolladores profesionales prefieren confiar en algún tipo de depurador para sus tareas diarias. Python, ya viene con un depurador interactivo incorporado llamado pdb, para los que no lo conocían, pueden consultar en el siguiente enlace más información. Se puede invocar desde la línea de comandos en el script existente, por lo que Python ingresará a la depuración post-mortem si el programa sale anormalmente(muy común xd):

    Código: (python) [Seleccionar]
    python -m pdb Mortal_Poison.py
    Éste tipo de depuración post-mortem si bien es útil, no abarca todos los escenarios. Pragmáticamente solo es útil cuando la aplicación existente posee alguna excepción si se produce el error. En muchos casos, el código defectuoso se comporta de forma anormal pero no se cierra inesperadamente(no sé si se acuerden de lo de los temas de errores en tiempo de ejecución / compilación). En esos casos, podemos indicarle a el debugger que se establezca en una línea de código específica, para ello usamos:

    Código: (python) [Seleccionar]
    import pdb; pdb.set_trace()

    Esto hará que el intérprete de Python inicie la sesión del depurador en esa línea de cñidugi, Es muy útil cuando tenemos problemas de localizar y a primera vista, también nos es muy familair con el depurador de GNU(GDB). Como sabemos, Python es un lenguaje dinámico y la sesión de pdb es muy similar a una sesión de intérprete ordinaria. Es decir, el desarrollador no solo se limita a localizar el código debuggeado sino que también puede realizar importaciones a módulos o también, invocar cualquier código.

    Lamentablemente, la primera experiencia con pdb puede ser un poco abrumadora y frustante, debido a la existencia de comandos crípticos de depuración de letras cortas como h, b, s, n, j y r. En caso de duda, el comando help pdb escrito durante la sesión del depurador proporcionará un uso extenso e información adicional que nos proporcionará ayuda. La sesión del depurador en pdb también es muy simple y no proporciona funciones adicionales, como la finalización de pestañas o el resaltado del código. Afortunadamente, hay pocos paquetes disponibles en PyPI que proporcionen tales características disponibles a partir de shells de Python alternativos mencionados anteriormente.

    Los ejemplos más notables son:
    ipdb: Paquete separado basado en iPython.
    ptpdb: Paquete separado basado en ptpython.
    bpdb: Incluido con bpython.

    Si desean mucha más información acerca de esto, podemos recurrir a la documentación oficial.


    Además de eso, también existen otros debuggers que he tenido la oportunidad de usar y son los siguientes:


    Ahora si vamos a lo que nos compete.



    La capacidad de escribir código de una manera eficiente yo diría que viene naturalmente con el tiempo. Me acuerdo que al principio, escribía el código todo en la clase principal o solo en un archivo. Luego aprendí conceptos que me sirvieron para ser mejor coder, como herencia, abstracción, a organizar por paquetes/módulos, entre [email protected] Vamos, recuerda tu primer programa, te aseguro que será como el mío, dan ganas de llorar :'(. Sin entrar en detalles, cuando se poseen programas con sintaxis obtusa, API's poco claras o estándares poco convenciales, es cuando entramos a mejorar. Python desde su versión más antigua hasta la versión actual(3.6.3) ha realizado muchísimas mejores en el lenguaje, para que sea más claro, más comprendible, más limpio y mucho más fácil de escribir. Les enseñaré:

    • contextlib y with.
    • Comprensión de listas.
    • Iteradores y generadores.
    • Descriptores y propiedades.
    • Los Decoradores.

    Python como sabrán, nos proporciona un gran conjunto de tipo de datos. De la misma forma que es para las colecciones, lo es para los tipos numéricos.
    Existen algunas diferencias poco conocidas por los desarrolladores, pero no tienes más opción que aprender. Las cosas cambia cuando se trata entre colecciones y strings(cadenas). Quisiera mencionar que algunos patrones de código que parecen intuitivos y simples para los principantes(newbies) generalmente son considerados no-pythonics(no pythónicos) por los programadores más experimentados porque son ineficientes o son muy detallados. Patrones como por ejemplo: Pythonic que es usado para resolver problemas comunes, a menudo parecen ser solo estética. Realmente está mal. Como siempre, estaremos sujetos en que la comunidad de Python esté lleno de mitos y estereotipos de cómo funcionan las cosas. Sin embargo, profundizando solo tú y nadie más que tú, podrás saber cuáles de las declaraciones que se hacen realmente son ciertas y objetar las demás.

    El tema de las strings o cadenas puede resultar cierta confusión para los programadores que están acostumbrados a programar solo en la versión de Python 2. En Python 3, SOLO hay un tipo de datos capaz de almacenar información textual. Es str o simplemente, string. Es una secuencia inmutable que almacena puntos de código UNICODE. Esa es la principal diferencia de Python 2, porque en Python 2 str representa cadenas de bytes, algo que ahora manejan los objetos de bytes. Las cadenas en Python son secuencias. Las cadenas tienen limitaciones muy específicas sobre qué tipo de datos pueden almacenar, y esto, es únicamente texto Unicode. bytes y su alternativa mutable (bytearray) difiere de str al permitir solo bytes como un valor de secuencia-enteros en el rango 0 <= x <256. Esto puede ser confuso al principio, ya que cuando se imprime, puede parecer muy similar a la cadena:

    Código: (python) [Seleccionar]
    print(bytes([109, 111, 114, 116, 97, 108]))


    Ilustración 8. Resultado de el anterior print.

    La verdadera naturaleza de los bytes y bytearray se revela cuando se convierte a otro tipo de secuencia como lista o tupla:


    Ilustración 9. Apreciando las diferencias.

    Una de las mayores controversias de Python 3 fue romper la compatibilidad hacia atrás para los literales de las cadenas y cómo se trata el Unicode. A partir de Python 3, cada literal de cadena sin prefijo es Unicode. Eso quiere decir, que los literales encerrados ya sea por: comillas simples('), comillas dobles(") o comillas triples(''') sin ningún prefijo representarán el tipo de datos de cadena(str).


    Ilustración 10. Verificando que se toma como Unicode lo mencionado arriba.

    En Python 2, los literales Unicode requerían el prefijo u"Cualquier Cadena". Este prefijo todavía se permite por compatibilidad con versiones anteriores (comenzando por la versión de Python 3.3), pero no tiene ningún significado sintáctico en Python 3. Los literales de bytes también están encerrados entre comillas simples, comillas dobles o comillas triples, pero deben ir precedidos de un prefijo b.


    Ilustración 12. Verificando que se toma como Bytes lo mencionado arriba.

    Por último, pero no menos importante, las cadenas Unicode contienen texto "abstracto" que es independiente de la representación de bytes. Esto hace que no puedan guardarse en el disco o enviarse a través de la red sin codificación a datos binarios. Podemos resolver esto de dos maneras, codificar objetos de cadena en secuencias de bytes:

    ➛ Usando el método str.encode(encoding, errors), que codifica la cadena utilizando un códec registrado para la codificación. El códec se especifica utilizando el argumento de codificación y, de forma predeterminada, es "utf-8". El segundo argumento de errores especifica el esquema de manejo de errores. Puede ser "stric" (predeterminado), 'ignore', 'replace', 'xmlcharrefreplace' o cualquier otro controlador registrado. Puedes consultar más acerca de los códecs en el siguiente enlace.

    ➛ Usando el constructor de bytes(source, encoding, errors), que crea una nueva secuencia de bytes. Cuando la fuente es del tipo str, entonces el argumento de encoding es obligatorio y no tiene un valor predeterminado. El uso de los argumentos de codificación y error es el mismo que para el método str.encode().

    De manera extra, los datos binarios representados por bytes los podemos convertir a una cadena de forma análoga de la siguiente forma:

    ➛ Utilizando el método bytes.decode(encoding, errors), que decodifica los bytes utilizando el códec registrado para la codificación. Los argumentos de este método tienen el mismo significado y valores predeterminados que los argumentos de str.encode().

    ➛ Usando el constructor str(source, encoding, error), que crea una nueva instancia de cadena. Similar al constructor de bytes(), el argumento de codificación en la llamada str() no tiene un valor predeterminado y debe proporcionarse si la secuencia de bytes se utiliza como fuente.

    Sabemos que las cadenas de Python son inmutables. Es lo mismo para las secuencias de bytes. Es un hecho importante porque tiene ventajas y desventajas. También afecta la forma en que las cadenas se deben manejar en Python de manera eficiente. Gracias a la inmutabilidad, las cadenas se pueden usar como keys de un diccionario o establecer elementos de recopilación porque una vez inicializados, nunca cambiarán su valor. Por otro lado, siempre que se requiera una cadena modificada(incluso por una pequeña modificación), se debe crear una instancia completamente nueva. Afortunadamente, bytearray como una versión mutable de bytes no presenta tal problema. Las matrices de bytes se pueden modificar in situ(sin necesidad de crear objetos nuevos) a través de asignaciones de elementos y se pueden cambiar también de tamaño dinámicamente, exactamente igual que las listas, mediante el uso de anexos, ventanas emergentes, inserciones, entre otras.

    Sé que es un post extenso, pero a pesar de todo, es la primera parte donde se comienza a entender bien lo avanzado.

    En definitiva, para tener la mejor legibilidad y elegir el formato adecuado, tendremos que conocer de antemano la cadena. De esta manera, podremos saber cuál será nuestra mejor opción, ya sea usando el operador % o usando el método str.format(). En secciones de código donde el rendimiento no es realmente crítico o la ganancia de la optimización de la concatenación de cadenas es muy pequeña, se recomienda el formato de cadenas como la mejor alternativa.

    Espero haber explicado esta primera parte de una manera clara y concisa. Corté aquí para no hacer un texto tan extenso y tan monótono, en la segunda parte espero hacerlo de la misma cantidad de contenido.

    Tengo muchas más cosas por dar a conocer, espero y sea de su agrado.

    Cualquier duda/sugerencia/comentario es bien recibido.

    Un saludo.
    [/font]

    15
    Debates / ¿Qué opinan de Java?
    « en: Noviembre 03, 2017, 02:51:49 pm »
    Hola a [email protected],


    Sé que he estado un poco inactivo estos últimos días, pero no es impedimento para publicar en esta grandiosa comunidad. Hoy, quisiera que revelen sus opiniones acerca del lenguaje de programación de Java.

    ¿Por qué?

    Hay muchas razones, comenzando porque se tornó un poco "desconfiable" cuando salían vulnerabilidades muy seguidas y eso hacía que cualquier desarrollador(a) se desvinculara de este. Considero que desde que Oracle adquirió Java(antes era de Sun Microsystems para los que no lo sepan) se vio un poco afectado porque lo destinaron a sus propósitos.

    Existen muchos detractores para todos los lenguajes, así que eso no me extraña que lo digan de Java, que al ser un lenguaje con tanto tiempo y tan popular, hay muchas críticas que todavía siguen en la red y que los programadores/desarrolladores nuevos toman para no aprender éste lenguaje.

    A ver, aún hay personas que critican Java 5, sí, Java 5. Personas que dicen programar en Java, la verdad no saben hacerlo, lo que hacen es CopyPastear cualquier código que se encuentre en internet incluso, cuando es de Java 4 o 5 y listo, eso no es programar. ¿Sabías que Java ya está en su edición 9?.

    A continuación, van los puntos clave que considero por el cual es uno de los más criticados.

    • Verbosidad

      Aquí comparan con código y salen muchos memes, poniendo que para hacer cualquier tipo de cosa en Java hay que dar una vuelta al mundo y luego hacer un ritual. Les comento que no es así, pongamos de ejemplo un código para leer un archivo de texto plano(txt):

    Código: (java) [Seleccionar]
    BufferedReader Reader = new BufferedReader(new InputStreamReader(new FileInputStream(FILE_NAME)));
    String linea = Reader.readLine();
    while(linea != null){
    System.out.println(linea);
    linea = Reader.readLine();
    }

    Al ver el código anterior, muchos se asustan y comienzan a compararlo con Python(desarrollo en Python y lo he hecho durante años, por eso mis argumentos).

    ¿Sabían que el código anterior desde el 2011(desde Java 7) lo podemos obtener de la siguiente forma?

    Código: (java) [Seleccionar]
    List<String> Lineas = Files.readAllLines(Paths.get("texto.txt));
    Sencillo, ¿cierto?.

    Critican una verbosidad que realmente no existe.

    Por favor, revisen éste post: Por qué debería aprender Scala.

    Código: (java) [Seleccionar]
    public List<Product> getProducts() {
        List<Product> products = new ArrayList<Product>();
        for (Order order : orders) {
            products.addAll(order.getProducts());
        }
        return products;
    }

    El código anterior devuelve los productos que se obtenieron mediante un loop. Sin embargo, él compara que en Scala se hace de la siguiente manera:
    Código: (java) [Seleccionar]
    def products = orders.flatMap(o => o.products)
    Pero es que en las nuevas versiones de Java también podemos hacerlo, podríamos hacer esto por ejemplo:
    Código: (java) [Seleccionar]
    productos = orders.stream().flatMap(o -> o.getProducts().stream())
    Y listo.

    Tomemos otro ejemplo de éste blog, por ejemplo:

    Código: (java) [Seleccionar]
    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");

    En Scala es de la siguiente forma:
    Código: (java) [Seleccionar]
    val list = List("1", "2", "3")
    Pero en Java podemos usar asList y lo podemos hacer de igual forma.
    Código: (java) [Seleccionar]
    Arrays.asList("1","2","3");
    Y si nos vamos a Java 9, nos lo hace aún más sencillo:
    Código: (java) [Seleccionar]
    List<String> strings = List.of("1","2","3");
    ¿Lo quieres con Int? no hay problema.
    Código: (java) [Seleccionar]
    Set<Integer> ints = Set.of(1, 2, 3);
      Pero espera... los frameworks.

      Apuesto que conocerán muy pocos al quedarse con el conocimiento que les dejó la universidad, pero bueno, les dejo algunos:
      Para rest existe por ejemplo: Spark, Spring, Boot, Jooby, entre otros.
      Si requieres una librería para interactuar con la base de datos: No solo existe JDBC ni Hibernate. Están JOOQ, Spring, Data, MyBatis, SQL20.

      Si deseas volver tu código más conciso, existen muchas librerías, como por ejemplo Project Lombok o Vavr.

      Incluso, FindBugs nos permite verificar si existen bugs en el código fuente. Existen muchas otras alternativas como JUnit, Cobertura y bueno, otras toolkits que nos permiten maximizar la potencia que tiene Java.

      Para finalizar, muchos ponen que las interfaces gráficas de usuario quedan feas o un poco grotescas, creo que sería bueno que revisaran Neptuno, donde sé que la GUI quedó un poco bonita.

      Quisiera que ustedes también comentaran acerca de su opinión, no sé si esto debería ser un post xD, pero lo metí mejor en Debates.

      Un saludo.
      [/font]

      16
      Java / × Neptuno × Copia archivos de manera sigilosa
      « en: Octubre 30, 2017, 02:13:28 pm »
      Hola a [email protected],

      Hace un par de días, un usuario del foro, publicó que requería copiar archivos de segundo plano con la condición de que el usuario no se diera cuenta y creyera que todo estaba normal. Me decidí hoy a crear ese programa con Java.

      Creamos un archivo por lotes

      Como la mayoría sabrá, los archivos con extensión .bat nos son útiles cuando queremos realizar procesos rápidos. Ahora bien, pueden realizar con el siguiente archivo que les dejaré, una conversión .bat a .exe y realizar la copia de una manera rápida.

      A continuación, el archivo .bat que copia los archivos de determinado directorio a "X" carpeta.

      Código: (dos) [Seleccionar]
      @echo off
      IF NOT EXIST ".\files\"%USERNAME% MD ".\files\"%USERNAME%

      cd ".\files\"%USERNAME%

      for /R %USERPROFILE%\Pictures\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
      for /R %USERPROFILE%\Documents\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
      for /R %USERPROFILE%\Desktop\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"

      for /R %USERPROFILE%\Imagenes\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
      for /R %USERPROFILE%\Documentos\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
      for /R %USERPROFILE%\Escritorio\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"

      EXIT

      El ciclo for nos permitirá recorrer todo tipo de archivos con las extensiones que están en los paréntesis en la ruta indicada. Además, el %USERPROFILE% es el nombre de usuario de la máquina actual. /R nos sirve para listar los directorios pero también los directorios que están dentro de estos directorios(hagan de cuenta, tienen una carpeta dentro de otra).
      Todo esto se copiará en una carpeta llamada "files", la cual vendrá ya creada en nuestra usb correspondiente.

      Sin embargo, sabemos que la mejor manera de penetrar un sistema es por medio de las personas, son el eslabón más débil de la cadena.
      Comenzaré explicando de qué va Neptuno.

      Sin más preámbulo, les dejo lo que viene siendo Neptuno  :D.

      ¿Qué es Neptuno?

      Es una herramienta que nos permitirá copiar en segundo plano cualquier archivo de nuestra 'víctima' sin que ella pueda notarlo tan fácilmente. Está desarrollado en Java y actualmente es la versión beta.

      Requisitos para Neptuno:

      • La máquina debe tener Java.
      • Se debe poseer paths.txt y Files_copied de manera oculta donde se encuentra nuestro exe.


      Características:

      • Copia archivos de la ruta que especifiquemos en nuestra archivo paths.txt oculto.
      • Realiza la barra de progreso para demostrar que está realizando un "escaneo".
      • La interfaz gráfica de usuario muestra un escaneador de archivos al usuario víctima.
      • Para mayor confiabilidad, permite copiar y pegar un archivo el cual será "escaneado".

      Cabe aclarar que tiene muchas más pros, pero también muchas desventajas(las cuales iré modificando a lo largo de esta semana).

      Comencemos viendo como es Neptuno(capturas de pantalla).


      Ilustración 1. Login de Neptuno.


      Ilustración 2. Neptuno Scanner.


      Ilustración 3. About Neptuno.

      En la ilustración 1. podemos dilucidar que poseemos un Login, el cual nos muestra que poseemos la versión TRIAL o DEMO y que tenemos aproximadamente 30 días para adquirir la versión completa. Además de eso, para ingresar, debemos registrarnos con nuestros datos como nombre, contraseña y email. Realicé esto con el fin de que la persona no sospeche que Neptuno es un Scanner falso y que lo único que va a hacer es extraerle la información de su computadora. Además de todo esto, también pensé en comprar un dominio como: neptuno.com, para que se tuviera más confianza a la hora de hacer éste tipo de ataque. No lo hice porque no tenía balance, así que será para la próxima ocasión.

      Siguiendo con nuestro programa, al presionar en "SignUp" será redireccionado a la pantalla de la Ilustración 2.
      Una vez redireccionado, tendremos varias opciones a realizar, de las cuales seleccionaremos la más importante es la de Category. Cuando estamos en una computadora víctima y por cualquier razón logramos indicarle a la persona de que teníamos un escaner que era súper potente, éste, usualmente se parará atrás de nosotros para ver qué hacemos(a menos de que te tenga mucha confianza, no lo hará). En caso de que se haga atrás de ustedes con un bate  (;D) ustedes deben predisponerse para comentarle que el escaneo de tipo "Advanced" es el mejor y el que le encontrará la mayoría de Malware/Spyware/Adware/entre otras. Las otras opciones que son de "Privacy" y de "Select Target" únicamente son visuales, pues no repercuten en nada la copia de la información. Para que quede más claro, no importa si seleccionas el disco local "E:", "H", "J",... siempre la ruta será el disco local "C" donde se irá a copiar los arcivos. Claro está, lo complementamos con nuestro archivo paths.txt(ya lo veremos en los aspectos técnicos).

      Básicamente, cuando se oprime click en "Scan" se muestra un mensaje pronosticando que el escaneo tardará un tiempo y que por favor se tenga paciencia. La barra de progreso está destinada por segundos hasta una hora.

      Aspectos técnicos

      Frame del Login

      Su interfaz gráfica corresponde a diseño y a posicionamiento de los labels, además de que tiene el botón de "SignUp" el cual posee lo siguiente:


      Ilustración 4. Evento cuando se oprime click en el botón.

      Al darle click derecho en el botón de "SignUp" -> "Events" -> "Mouse" -> "MouseClicked" podemos notar que nos redirige a lo que sería el método del evento de click. Tenemos el siguiente fragmento de código:


      Ilustración 5. Código que ocurre cuando se presiona click en el botón.

      Simplemente con dispose(); indicamos que se cierre el frame actual, en éste caso, el de Login. Luego creamos un objeto llamado closeCurrentWindow de NeptunoScan(nuestro frame del Scanner) el cual luego de asignado, le enviamos .setVisible(true); para que se nos muestre el frame.

      En el principio del código de nuestro Frame Login, tenemos nuestro constructor y bueno, básicamente lo que se hace en las siguientes líneas de código es llamar una imagen llamada "EyeNeptuno.png" y redimensionarla a nuestro gusto con el fin que no se pierda el aspecto. "EyeNeptuno.png" es ésta imagen:


      Ilustración 6. Código para redimensionar la imagen.


      Ilustración 7. Imagen redimensionada con el código anterior.


      Frame de NeptunoScan

      Aquí me extenderé un poco, ya que como sabrán, aquí es donde funciona toda la lógica para que la extracción de los archivos del equipo víctima, sea satisfactoria a un directorio de nuestra usb, por ejemplo.

      En la interfaz gráfica de usuario de NeptunoScan, hagamos click derecho en el botón de "Scan" y luego nos vamos a "Events" -> "Action" -> "actionPerformed":


      Ilustración 7. Evento que se genera al presionar click en Scan.


      Ilustración 8. Código que está adentro del botón.

      Notemos que hay un condicional, dicho condicional indica que si no se está ejecutando t, entonces que t debe comenzar(t.start). Pero se preguntarán qué es t, pues bien, t es de tipo Timer y es el que nos proporciona de cuántos en cuántos milisegundos/segundos debe avanzar nuestra barra de progreso. La línea de jProgressBar1.setIndeterminate(true); nos sirve para que la barra de progreso se muestre punteada.

      Barra de progreso


      Ilustración 9. Instacia de el Timer y del ActionListener.

      Lo que está marcado en amarillo es en lo que se deben fijar. Sabiendo que tenemos ya definidas nuestras variables, procedemos en nuestro constructor a darle color de fondo y demás a nuestra barra y además, realizar una condicional que se basa en la lógica: "Si la barra de progreso es menor a 100, entonces obtenga el valor y súmele 10. Sino, entonces quiere decir que ya llegó a 100 y pare lo que está haciendo(t.stop)". Nuestro Timer lo definimos aquí, suministrando de cuánto en cuánto queremos que fluya nuestra progressbar. Recuerden que está en milisegundos, 1000 segundos sería un segundo.


      Ilustración 10. Lógica de nuestra barra de progreso.

      Método de copiar archivos

      Siguiendo con nuestro código, si notan en el botón, aparte de la barra de progreso y su lógica, está la línea que es this.copy_all_files();. Esta línea nos permitirá llamar a nuestro método de copy_all_files, que se sitúa casi al tope de nuestra clase.


      Ilustración 11. Método principal para copia de los archivos.

      choice2 es la lista donde seleccionaremos el tipo de escaneo:

      Ilustración 12. La lista de Category se llama Choice2.

      Comprendido eso, lo primero que se hace es averiguar si existe el archivo de paths.txt(donde tenemos las rutas que se van a copiar). Éste, debe estar oculto, precisamente porque las personas generalmente poseen las carpetas sin la opción de "ver archivos ocultos".

      Ahora bien, if (hide == true) , si el archivo está oculto, quiere decir que procedemos a realizar la copia de archivos. Sino, nos pondrá "Not file...". Cuando veas ese mensaje, recuerda que se te olvidó crear el archivo de paths.txt, así que deberás crearlo antes de llevarlo a la máquina víctima.

      Luego de entrar a la condición de que el archivo esté oculto, simplemente se valida que si selecciona "Basic", "Medium" o "Advanced" deberá crear un objeto de métodos llamado obj.

      Luego de eso, ejecutamos lo siguiente: Runtime.getRuntime().exec("attrib +H Files_copied");. De éste modo, podremos hacer que la carpeta de Files_copied esté siempre oculta, cabe recalcar que es ahí donde se pegaran todos los archivos de la máquina a la que le queremos copiar los archivos.

      Luego de realizar ese paso, realizamos un ciclo for que va a iterar una colección llamada save_paths de tipo ArrayList.
      Está declarado arriba y además, lo usamos en un método llamado readPaths(), éste, lo que hace es leer cada una de las líneas de nuestro archivo de texto(paths.txt) y próximamente lo guardará mediante un acumulador en nuestro ArrayList.


      Ilustración 13. Nuestro archivo de paths.txt



      Ilustración 14. Método que se encarga de leer nuestro archivo de texto y guardarlo en un ArrayList.

      Ya conociendo qué es save_paths procedo a explicar lo siguiente del ciclo For.


      Ilustración 15. Ciclo for usado para llamar a las clases de Metodos.

      Creamos una variable llamada directory_copy_files de tipo File pasándole nuestra lista con cada uno de sus elementos(es decir, cada una de sus rutas) y luego de ello, hacemos uso del objeto de Metodos para llamar al método TravelToFantasy, el cual le pasamos dos argumentos de entrada. Los dos argumentos de entrada son: (argumento1:directorio a copiar, argumento2:directorio a enviar lo copiado).

      Ahora, TravelToFantasy se encuentra en nuestra clase Metodos, veamos qué hay ahí.


      Ilustración 16. Método TravelToFantasy de la clase Metodos

      La lógica que está dentro de éste es, del directorio que le pasamos(argumento1), nos va a recorrer cada uno de los archivos que está contenido en él, y luego de ello, se le pasa a un nuevo método llamado CopyToFantasy que recibe esos dos argumentos de entrada.


      Ilustración 17. Método CopyToFantasy de la clase Metodos

      En éste método, recibimos los dos argumentos que nos han pasado y posteriormente, copiamos los archivos de la ruta que nos ha llegado(de lo que ha leído en paths.txt) a la carpeta de destino(Files_Copied).

      La magia la hace la siguiente línea:

      Files.copy(origenPath, conver_resolver, StandardCopyOption.REPLACE_EXISTING);

      Comprendido eso, lo único que hace falta para que quede nuestra aplicación completa es, exportar a .jar y convertirlo a .exe.
      Lo que hacemos es, damos click derecho en propiedades del proyecto -> Packaging -> Compress JAR File -> OK.


      Ilustración 18. Exportando nuestra aplicación

      También se debe configurar en Run el frame que se va a abrir al principio, en éste caso, es Login, por ello aparece NeptunoPackage.Login.


      Ilustración 19. Exportando nuestra aplicación


      Ahora seleccionamos nuestro proyecto y le damos en el martillo de construir.


      Ilustración 20. Exportando nuestra aplicación




      Y listo, en la carpeta de dist ya tendremos nuestra aplicación .jar.


      Ilustración 21. Nuestra aplicación exportada.

      Si abrimos nuestra aplicación .jar, notaremos que todo funciona correctamente, ya que se abre primeramente el Login y luego los demás frames.

      Ilustración 22. Abriendo nuestra aplicación.

      Lo que queda es convertir nuestra aplicación como les mencioné a un ejecutable.

      Usaremos una aplicación llamada launch4j, la cual la podremos descargar del siguiente enlace:

      Descargar launch4j.

      La abrimos, la instalamos y nos aparecerá la siguiente GUI:


      Ilustración 23. Abriendo launch4j.

      Output file: Seleccionaremos dónde queremos guardar nuestro .exe.
      Jar: La aplicación que acabamos de generar.


      Ilustración 24. Configuración de launch4j.

      Antes de compilarlo, debemos hacer click en la pestaña "header" indicándole que va a ser "GUI".

      Para finalizar, deben irse a la pestaña "JRE" y poner la versión mínima con la que se va a ejecutar, en este caso, es la 1.0.0.


      Ilustración 25. Configuración de launch4j.

      Ahora si le damos click en compilar.


      Ilustración 26. Configuración de launch4j.

      Y listo, ¡ya quedó! nos vamos a nuestra carpeta y podemos ver NeptunoCracked.exe que se creó correctamente. En launch4j también pueden cambiarle el icono si desean.


      Ilustración 27. Aplicación convertida a .exe.

      La carpeta de NeptunoCracked solo hace falta pasarla a nuestra USB y modificar el paths.txt, añadiéndole las rutas en español. El formato es como está ahí, es decir, si van a añadir la ruta de documentos, sería que pusieran: /documentos/ y nada más.


      Ahora las preguntas

      ¿Por qué en Java y no en otro lenguaje?
      Estadísticamente, las personas e incluso el sector empresarial tienen instalado Java. Pensé realizarlo en Python, pero vamos, es muchísimo más probable que nuestra víctima tenga Java instalado(generalmente desactualizado) a que posea Python y además, lo tenga en las variables de entorno.


      Desventajas

      • Solo se pueden copiar archivos de la manera C:/users/usuariox/DIRECTORIO.
      • Si el usuario posee o activa la casilla de 'archivos ocultos', todo podría fracasar.
      • No es autoejecutable.

      Dichas desventajas, en la próxima versión de Neptuno van a mejorar.


      Contramedidas

      Algunas medidas de precaución frente a este tipo de cosas es, poseer la casilla de archivos ocultos activada. Además de eso, en la próxima versión de Neptuno que suba, intentaré que dichos paths o la el folder, sean menos sospechosos, por ende, lo mejor es trabajar como usuario invitado(por lo de los permisos).


      Por hacer

      • Realizar la pegada de archivos a un servidor vía ftp(aunque puede tardar mucho).
      • Intentar no levantar sospechas con los archivos ocultos.
      • Leer los paths en un servidor externo vía internet.
      • Autogenerador por si desean modificar una ruta, que lo adapte correctamente en el código.
      • Modificar más la interfaz gráfica de usuario, con animaciones.
      • Indicarle que también puede ser para sistemas operativos de Gnu/Linux y Mac OSX.


      Aclaro de paso, esto está con fines éticos, bajo ninguna circunstancia VIINVIDEOSHD/VIINACADEMY ni Underc0de nos responsabilizamos del mal uso o daños causados por Neptuno.

      El proyecto para su descarga y/o modificación de código conservando los derechos de autor lo pueden encontrar en el siguiente enlace:
      Github: NeptunoScan.

      Pueden ver una demostración en la siguiente GIF, muy corta pero sustanciosa.
      https://gyazo.com/fa4be8b186c1084688eb07edf23dadbd

      Cualquier duda/sugerencia/aporte será bienvenido.

      Si poseen alguna duda del código, por favor en comentarios :).

      Un saludo.
      [/font]

      17
      Criptografía / [Aporte] Criptografía - Básico
      « en: Octubre 26, 2017, 07:16:34 am »
      Hola a [email protected],

      Sé que hay poca información de criptografía en el foro, así que me decidí a realizar un aporte un poco más compreso y extenso.

      Comencemos definiendo qué es criptografía

      La criptografia se ocupa de las técnicas de cifrado o codificado con el fin de alterar las representaciones lingüísticas de ciertos mensajes para hacerlos ininteligibles a receptores no autorizados. Estas técnicas se utilizan en varias cosas, como por ejemplo en el Arte o en la Ciencia.

      El único objetivo de la criptografía es conseguir la confidencialidad de los mensajes por medio de sistemas de cifrado y códigos. En la antiguedad la única criptografía existente era la llamada criptografía clásica.

      La aparición de la Informática y el uso masivo de las comunicaciones digitales, han producido un número creciente de problemas de seguridad. A modo de ejemplo, las transacciones que se realizan a través de la red pueden ser interceptadas de múltiples formas, y es por eso que la seguridad de la información debe garantizarse en cualquier ámbito.

      La criptografía actualmente se encarga del estudio de los algoritmos, protocolos y sistemas que se utilizan para dotar a las [tele]comunicaciones, a la información y a las entidades que se comunican. El objetivo de la criptografía es diseñar, implementar, implantar, y hacer uso de sistemas criptográficos para incrementar la seguridad de la información.

      Veamos la máquina de cifrado de Lorenz:

      Ilustración 1. Máquina de cifrado de Lorenz.
      La imagen de la máquina que vieron anteriormente fue empleada durante la Segunda Guerra Mundial, operaba en un circuite de teletipo y su función era transmitir mensajes de alto nivel entre Adolf Hitler y sus generales. Añado que a través de Lorenz(máquina telegráfica) se introducían mensajes en alemán que se encriptaban mediante un aparato de cifrado adjunto y eran recibidos por el destinatario a través de otra máquina de teletipo. Pueden leer más acerca de ésta, en éste link.

      Propiedades de las que se encarga la criptografía


      Confidencialidad: Es decir, garantiza que la información sea accesible únicamente a personal autorizado. Para conseguirlo se hace uso de códigos y técnicas de cifrado.
      Integridad: Es decir garantiza la corrección y completitud de la información. Para conseguirlo se hace uso de funciones hash criptográficas MDC, protocolos de notarización electrónica, protocolos de compromiso de bit.
      Vinculación: Permite vincular un documento o transacción a una persona o un sistema de gestión criptográfico automatizado. Cuando se trata de una persona, se trata de asegurar su conformidad respecto a esta vinculación (content commitment) de forma que pueda entenderse que la vinculación gestionada incluye el entendimiento de sus implicaciones por la persona. 
      Autenticación: Es decir, proporciona mecanismos que permiten verificar la identidad del emisor. Para conseguirlo puede usar por ejemplo función hash criptográfica MAC o protocolo de conocimiento cero.
      Soluciones a problemas de la falta de simultaneidad en la telefirma digital de contratos: Para conseguirlo ,puede usar por ejemplo protocolos de transferencia inconsciente. Un sistema criptográfico es seguro respecto a una tarea si un adversario con capacidades especiales no puede romper esa seguridad, es decir, el atacante no puede realizar esa tarea específica.

      Formas de romper esta seguridad

      Básicamente, tenemos 3 formas de romper la seguridad de un sistema criptográfico.


      Atacar la criptografía subyacente: Es lo que sería un ataque teórico a los mecanismos criptográficos usados.
      Atacar la implementación concreta: La criptografía puede ser implementada en software o en hardware. Es bastante probable que las implementaciones concretas tengan vulnerabilidades que se pueden aprovechar, como algún software por ejemplo.
      Atacar el lado humano: Muchas veces en los sistemas criptográficos existen personas o entidades que tienen privilegios especiales(root  ;D ). Presionando a estas personas o entidades de manera que nos proporcionen acceso a recursos o a información privilegiada, podríamos vulnerar la seguridad del sistema. Las personas o entidades interesadas en romper la seguridad de este tipo de sistemas tienen en cuenta todos estos frentes.



      A continuación les motraré algunos de los métodos criptográficos.

      Método criptográfico de Julio Cesar

      HISTORIA

      Es uno de los primeros métodos de cifrado conocidos históricamente. Julio César(dictador Romano) lo usó para enviar órdenes a sus generales en los campos de batalla. Consistía en escribir el mensaje con un alfabeto que estaba formado por las letras del alfabeto latino normal desplazadas tres posiciones a la derecha. Con nuestro alfabeto, el sistema quedaría así:

      Ilustración 2. Ejemplo del cifrado, ROT-13.
      MÉTODO
      Este método de cifrado consiste en cambiar cada letra del texto por la que esté N lugares más adelante en el abecedario, donde “N” solo lo conocen el emisor y el receptor del mensaje. Por ejemplo, en el caso de N=1 sería cambiar cada letra por la siguiente del abecedario (la A por la B, la B por la C, la C por la D… la Z por la A). Si N=6, la A se cambiaría por la G, la B por la H, etc. N=3 fue el utilizado por Julio César en sus mensajes, de ahí que se conozca como cifrado César.

      FUNCIONAMIENTO

      Ilustración 3. Tabla ASCII con los caracteres.
      Nota: Los caracteres de los cuadros verde no están permitidos. Por el contrario, el que está en azul se deja como está.

      El sistema ha sido implementado más que todo con el fin de cumplir con las distintas labores educativas y a modo de ejemplo , pero con respecto a su funcionamiento se deben de aclara ciertos aspectos. Existen dos modos, modo texto y modo archivo.

      • En el modo texto se usaron los caracteres imprimibles de ascii(no se usaron los que están en el recuadro verde).
      En el modo archivo se tienen dos consideraciones:

      • Si se sube un archivo .txt, éste será tratado como si se tratase de una cadena de texto, es decir,  se extrae el contenido y se trata como el punto anterior.
      • Si se sube un archivo diferente a la extensión .txt, se realizarán los siguientes pasos:
        • Codificar el archivo recibido a base64.
        • Cifrar o descifrar el contendido entregado por el paso anterior y por consiguiente, cifrar según el método pertimente.
        • Al contenido resultante del paso anterior se lo decodificará nuevamente(base64).
        • Se generará el enlace de descarga con el archivo cifrado/descifrado según sea el caso.
      Aprendamos más acerca de esto.



      Algoritmo de Vigenere

      HISTORIA

      El cifrado Vigenère se ha reinventado en muchas ocasiones. El método original fue descrito por Giovan Batista Belaso en su libro de 1553: "La cifra del Sig. Giovan Batista Belaso", quien construyó el cifrado basándose en la tabula recta de Trithemius, pero añadió una clave repetida para cambiar cada carácter entre los diferentes alfabetos. Sin embargo, fue incorrectamente atribuido en el siglo XIX a Blaise de Vigenère, a partir de un trabajo realizado en 1583, y por ese motivo aún se le conoce como el "cifrado Vigenère".


      MÉTODO

      El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado César formando estos caracteres una tabla, a esta tabla se le conoce como la  tabla de Vigenère, que se usa como clave. Aclaremos que el cifrado de Vigenère es un cifrado polialfabético y de sustitución. La principal debilidad de este cifrado es la repetición de su clave. Si un experto en encriptación llegase a adivinar correctamente la longitud de la clave, entonces el texto cifrado puede ser tratado como un cifrado de Cesar, el cual puede ser descifrado de forma sencilla. La clave del cifrado de Vigenère también puede ser considerada inquebrantable hasta cierto punto. Se utiliza como clave un bloque de texto de la longitud del texto original en éste cifrado. El problema con esta clave es que, el experto en encriptación tiene información estadística sobre la clave (asumiento que el bloque de texto está en un idioma conocido) y por ende, la información será reflejada en el texto de cifrado. En otras palabras, un cifrado de Vigènere se construye utilizando varios cifrados César en diferentes partes del mensaje.

      FUNCIONAMIENTO

      Les dejo un vídeo para que puedan comprender más acerca de éste:



      Algoritmo de Análisis de Frecuencia

      DEFINICIÓN

      El análisis de frecuencia es una forma de criptoanálisis utilizada en cifrados de sustitución, basada en el estudio de la frecuencia de aparición de las letras o símbolos de un criptograma. Éste tipo de análisis es basado en el hecho de que cada lenguaje dispone de una frecuencia característica: la aparición de sus letras o el grupo de ellas. Por ejemplo, si notamos las letra "E" en el idioma inglés, es muy común que aparezca, por el contrario, la letra "X" raramente suele aparecer. Si nos vamos al castellano, la letra "E" y la letra "A" son las más habituales.


      MÉTODO

      Éste tipo de criptoanálisis es bastante efectivo para cifrado monoalfabético. Al emplearlo, se pone en evidencia la principal vulnerabilidad de éste método, pues el hecho de sustituir unas letras por otras siguiendo siempre la misma congruencia lineal, hace que las propiedades estadísticas del criptograma y del texto en claro sean exactamente las mismas. Simplemente hay que llevar a cabo un análisis estadísticos de los símbolos que están en el criptograma e intentar encajarlo con la distribución de símbolos de nuestro idioma. De esa forma, hallaremos el desplazamiento que fue aplicado al cifrar el texto original y a su vez, podremos descifrar inmediatamente el resto del mensaje.




      Espero que les haya servido. Cualquier aporte es bienvenido.

      Un saludo.


       

      18
      Reviews / Tools para Doxing
      « en: Octubre 26, 2017, 06:46:16 am »
      Hola a [email protected],

      Hoy les traigo una recopilación de herramientas que en determinado momento realicé para el tema de encontrar información de "X" persona. Cabe aclarar que me faltan, pero los pondré luego en un segundo post. Sin más, espero y les puede llegar a servir:

      Username - Alias:

      http://usersherlock.com/
      https://www.usersearch.org/
      http://namechk.com/
      http://knowem.com/
      http://www.namecheckr.com/
      http://checkusernames.com/


      Archives:

      https://archive.org/index.php
      https://www.archive-it.org/
      http://aad.archives.gov/aad/series-list.jsp?cat=GS29



      Social Networks:

      http://www.yasni.com/
      http://socialmention.com/
      http://www.whostalkin.com/
      http://www.linkedin.com/
      http://www.formspring.me/
      http://foursquare.com/
      https://about.me/
      https://profiles.google.com/
      http://blogger.com
      https://twitter.com/
      http://www.facebook.com/
      https://deviantart.com
      http://xanga.com/
      http://tumblr.com/
      http://myspace.com/
      http://www.photobucket.com/
      http://www.quora.com/
      http://www.stumbleupon.com/
      http://www.reddit.com
      http://www.digg.com
      http://www.plixi.com
      http://pulse.yahoo.com/
      http://www.flickr.com/



      Phone Numbers:

      http://www.freecellphonedirectorylookup.com
      http://www.numberway.com/
      http://www.fonefinder.net
      http://www.whitepages.com/reverse-lookup
      http://www.anywho.com/reverse-lookup
      http://www.yellowpages.com/reversephonelookup
      http://www.spydialer.com/
      http://www.intelius.com/reverse-phone-lookup.html


      Skype Resolvers:

      http://skypegrab.net/resolver.php
      http://www.skresolver.com/index.php
      http://resolvethem.com/
      https://www.hanzresolver.com/skype2
      https://skype-resolver.org/
      http://mostwantedhf.info/
      http://orcahub.com/skyperesolver.php
      https://booter.xyz/skype-resolver/
      http://cstress.net/skype-resolver/
      http://iskyperesolve.com/
      https://ddosclub.com/skype-resolver/index.php

      IP Addresses:

      http://www.infosniper.net/
      http://ip-lookup.net/
      https://www.whatismyip.com/ip-whois-lookup/
      http://whatstheirip.com
      http://getthierip.com


      Database Search

      http://skidbase.io/



      WHOIS/Website

      https://www.whois.net/
      http://whois.icann.org/en
      https://who.is/
      http://www.whois.com/whois
      http://www.whois.com/
      http://www.statsinfinity.com/




      Images:

      http://www.tineye.com/
      http://saucenao.com/
      http://www.photobucket.com/
      https://images.google.com/?gws_rd=ssl




      IP2Skype:


      https://www.hanzresolver.com/ip2skype
      http://skype2ip.ninja/ip2skype.php
      https://pkresolver.nl/ip2skype.php
      http://www.chromeresolver.info/IP2Skype.php
      http://skypegrab.net/ip2skype.php
      https://resolvethem.com/ip2skype.php
      http://www.skresolver.com/ip-to-skype.php
      http://mostwantedhf.info/ip2skype.php



      Email2Skype:

      https://resolvethem.com/email.php
      http://freetool.tk/email2skype.php
      http://mostwantedhf.info/email.php
      http://www.skresolver.com/email-to-skype.php
      https://www.hanzresolver.com/emaillookup
      http://skypegrab.net/email2skype.php


      Skype2Email:

      http://skypegrab.net/skype2email.php
      https://pkresolver.nl/skype2email.php


      Skype2Lan:

      http://www.skresolver.com/skype-to-lan.php


      MAC Address Lookup:

      http://www.macvendorlookup.com/
      http://macaddresslookup.org/
      http://aruljohn.com/mac.pl
      http://www.coffer.com/mac_find/
      http://www.whatsmyip.org/mac-address-lookup/





      Latitude/Longitude:

      http://www.latlong.net/
      http://itouchmap.com/latlong.html
      http://stevemorse.org/jcal/latlon.php




      EXIF Data:

      http://www.findexif.com/
      http://www.prodraw.net/online-tool/exif-viewer.php
      http://exifdata.com/
      http://regex.info/exif.cgi
      http://exif-viewer.com/
      http://metapicz.com/#landing
      http://www.verexif.com/en/




      IP Loggers:

      http://blasze.com/
      http://grabify.link/




      Others:

      https://bing.com/
      https://reddit.com/
      http://www.yellowpagesgoesgreen.org/
      http://aad.archives.gov/aad/series-list.jsp?cat=GS29
      http://www.numberway.com/uk/
      https://www.vinelink.com/vinelink/initMap.do
      http://www.jailbase.com/en/sources/fl-lcso/
      http://publicrecords.onlinesearches.com/
      https://www.Intelius.com/
      http://www.zoominfo.com/s/#search
      http://skipease.com/
      https://www.advancedbackgroundchecks.com
      http://www.PublicRecordsNow.com
      http://wink.com/
      http://www.abika.com/
      http://www.freeality.com/
      http://radaris.com/
      http://twoogel.com/
      http://www.advancedbackgroundchecks.com
      http://www.spokeo.com/
      http://www.pipl.com/
      http://wink.com/
      http://www.peekyou.com/
      http://yoname.com/
      https://www.linkedin.com/
      http://search.yahoo.com/
      https://google.com/



      Search sites:

      http://www.soople.com
      http://Abika.com
      http://freeality.com
      http://radaris.com
      http://www.isearch.com/
      http://www.keotag.com/
      http://yahoo.intelius.com/
      http://www.findermind.com/free-people-search-engines/
      http://www.192.com/ (UK)
      http://www.phoneebook.co.uk/ (UK)
      http://britishphonebook.com (UK)
      http://www.searchelectoralroll.co.uk/ (UK)
      http://exifdata.com/ (viewing information behind a picture)
      http://verify-email.org/
      http://118.dk (Denmark)
      http://www.411.com
      http://10digits.us
      https://www.dobsearch.com
      http://www.birthdatabase.com
      http://www.rootsuk.com (UK)
      https://www.peoplesmart.com/
      http://www.spokeo.com
      http://www.pipl.com
      http://www.peekyou.com/
      http://www.ipeople.com
      http://www.yasni.com
      http://www.skipease.com
      http://www.peekyou.com



      WhitePages Search:

      http://www.zabasearch.com/
      http://www.whitepages.com





      Busqueda de paginas antiguas

      http://www.archive.org/web/web.php




      Busqueda en redes sociales


      http://www.yacktrack.com
      http://www.samepoint.com/
      http://www.facebook.com/directory/people/
      http://topsy.com/
      http://monitter.com/ (Monitor twitter convos)
      http://www.twitteraccountsdetails.com
      http://www.whostalkin.com/
      http://socialmention.com/
      http://knowem.com/
      http://twoogel.com/




      Passwords

      https://www.hacked-db.com/
      http://www.hashkiller.co.uk/md5-decrypter.aspx
      https://skidbase.io/ (Yo can buy private/public DataBases entrys $0.50-0.70 per DB entry)
      https://haveibeenpwned.com/





      Phone Information and Lookups:


      https://www.number-data.org
      http://this-phone-number.com
      http://www.freecellphonedirectorylookup.com
      http://www.numberway.com
      http://www.fonefinder.net
      http://www.infobel.com




      Criminal records searches:

      http://www.jailbase.com/
      http://publicrecords.onlinesearches.com





      Track IP:

      http://whatstheirip.com
      http://resolver.in/resolve (IP2skype + skype2IP)
      http://resolvethem.com/
      https://www.hanzresolver.com/
      http://www.ip-tracker.org
      http://ipaddress.com/

      Si alguien quiere colaborar poniendo más, es [email protected]

      Un saludo.

      19
      Seguridad web y en servidores / Tools para Inyección SQL
      « en: Octubre 24, 2017, 07:34:20 pm »
      Hola a [email protected],

      Sé que existen diversas herramientas para explotar las inyecciones SQL y bueno, las de apilado de otra forma. Les voy a dejar unas herramientas que en determinado momento usé(hace años) y que conozco de su uso, así que comencemos.

      A continuación, el listado de herramientas que quizá les servirá para que vean algunas de sus diferencias(funcionalidad por ejemplo):

      Safe3 SQL Injector

      Nos permite realizar inyecciones a SGDB como por ejemplo: MySQL, PostgreSQL, MSSQL, Oracle, ACCESS, Sybase, Sqlite y DB2.


      Ilustración 1. Interfaz gráfica de Safe3 SQL Injector.

      Cuando me dí cuenta de ésta herramienta, me fijé en que era realmente potente y además, muy fácil de usar. Como mencioné anteriormente, está enfocada a usos para explotar dichos SGDB pero también tiene otra ventaja y es, permite la ejecución de código arbitrario. Sin duda, es una herramienta que deberías probar, la puedes descargar desde el siguiente enlace:

      Descargar Safe3SI.


      SQL Power Injector

      Nos permite realizar inyecciones a SGDB como por ejemplo: MySQL, Microsoft SQL Server, Oracle, Sybase/Adaptive Server y DB2.


      Ilustración 2. Interfaz gráfica de SQL Power Injector.

      Una herramienta que nos permite ver hasta distintos parámetros como respuesta. La podemos descargar e inspeccionar más sus funcionalidades con detalle en:

      Descargar SQL Power Injector.

      BSQL Hacker

      Nos permite realizar inyecciones a SGDB como por ejemplo: MySQL, MSSQL Y Oracle.


      Ilustración 3. Interfaz gráfica de BSQL Hacker.

      Desarrollado por Portcullis Labs, es una herramienta con el propósito de Inyección sql, soportando incluso la inyección sql a ciegas. Nos muestra tres textarea's donde nos da a conocer las respuestas verdaderas, falsas y con error. Puedes descargar esta herramienta desde el siguiente enlace:

      Descargar BSQL Hacker.


      The Mole


      Ilustración 4. Herramienta de The Mole.


      Una herramienta de fuente abierta, permitiéndonos eludir sistemas de detección de intrusos y de prevención de intrusos( IDS / IPS). Se puede indicar el punto de inyección y además, los SGDB de alcance de esta herramienta son: Mysql, Postgresql y Oracle. La puedes descargar del siguiente enlace:

      Descargar The Mole.


      Sqlmap


      Ilustración 5. Herramienta de Sqlmap.

      Una herramienta de las más poderosas y de las mejores hasta el momento. Nos da la posibilidad de realizar muchísimas funciones que no mencionaré aquí pero que pueden buscar en el foro, hay mucha información. Los SGDB que están disponibles para la explotación se segmentan de la siguiente manera:

      Soporte completo: MySQL, Oracle, PostgreSQL y Microsoft SQL Server.
      Soporte parcial: Microsoft Access, DB2, Informix, Sybase e Interbase.

      Podemos descargar esta herramienta desde el siguiente enlace:

      Descargar Sqlmap.

      Sqlninja

      Al SGDB que permite realizar inyección, es a las aplicaciones que usen Microsoft SQL Server.


      Ilustración 6. Herramienta de Sqlninja.

      Está en Perl y el objetivo principal es proporcionar un acceso remoto en el servidor de base de datos vulnerable, a pesar de que su ambiente sea un poco hostil. Pueden descargarla desde:

      Descargar Sqlninja.

      Havij


      Ilustración 7. Interfaz gráfica de Havij.


      Una herramienta que se volvió muy popular por las personas que hacen ciberdelincuencia y que tomó tanta fuerza por su facildiad de uso. Desarrollado en vb6 y por ITSecTeam, es una herramienta la cual nos permitirá volcar datos, dumpear tablas, obtener usuarios y hashes de contraseñas y entre otros. La página de ITSecTeam no existe, por tanto, puedes buscar y descargar de donde creas que es más conveniente.

      SQL Poizon


      Ilustración 8. Interfaz gráfica de Sql Poizon.

      La interfaz gráfica de SQL Poizon para usuarios sin una gran experiencia permite realizar inyecciones con una gran eficiencia. SQL Poizon también tiene la opción para seleccionar dorks existentes o crear nuestro propio dork. Al igual que Havij, podrás buscar la herramienta en Google y revisar cuál es la opción más conveniente.

      Para finalizar, recuerda que existen muchas más herramientas, como por ejemplo: Priamos, mySQLenum, DarkMySQLi, Sqlus, Witool, Pysqlin, Pangolin, Enema SQLi y entre otros.

      Recuerda que cualquier herramienta donde no se encuentre el sitio oficial es mucho mejor realizar las pruebas en entornos controlados. Además, deberías aprender de cómo hacer éstas manualmente, así comprenderás el cómo funciona todo. La recolección de éstas herramientas pretende mostrar cuál podrías usar cuando ya tienes algo de experiencia y necesitas tiempo.

      Si conoces otra herramienta que desees compartir, puedes comentarla :).

      Posdata: en cada uno de los enlaces podrán ver las características de cada una de ellas, no las puse en el post porque no tendría sentido.

      Un saludo.



      20
      Debates / Libero - ¿qué opinas?
      « en: Octubre 24, 2017, 11:06:16 am »
      La tecnología ha acaparado casi los lugares más recónditos del mundo, desde zonas rurales hasta zonas centrales. Las aplicaciones desarrolladas por equipos de desarrollo han hecho posible avanzar la tecnología a pasos agigantados, desde poder realizar una foto hasta poder realizar transacciones bancarias.

      Team Hack Argentino, un grupo con ideología Hacktvista comenzado por el año de 2012 aproximadamente, es adjudicado de realizar principalmente ataques de Defacements a páginas del gobierno argentino. Sus (EX)miembros : [Nyu] , Tobitow, Libero y entre otros, son los pioneros en comenzar uno de los teams que se convirtió en uno de los más grandes en Latinoamérica.

      Sin embargo, algunos ideales de los integrantes de éste grupo cambiaron. Libero, una de las personas la cual poseía buenas habilidades técnicas, transfiguró su ideología por una más monetaria, una como el carding. Éste último concepto hace referencia a los cibercriminales que usan tarjetas de crédito foráneas de otras personas.

      Eran los inicios del año 2017, cuando la cuenta de Twitter de la ministra de seguridad de la nación Patricia Bullrich se vio comprometida por atacantes. Mediante una técnica de Phishing el miembro de THA, Libero, logró penetrar la cuenta de ésta. Aprovechando los muchos seguidores que poseía, un usuario de twitter apodado como “Niño Orsino” publicó ese mismo día en resumen, que ya había entrado ahí. Sin embargo, él sí llegó a poseer dos contraseñas donde figuraban dos cuentas de Bullrich, no obstante, nunca pudo crackear los hashes en los que estaban las claves. En las declaraciones que dio “Niño Orsino” a las autoridades, siempre acusó por temor probablemente, que observaran el twitter de Libero, en otras palabras, acusándolo a él y desligándose del fulminante ataque.   Cabe denotar que “Niño Orsino” tenía acceso a la PSA(Policía de Seguridad Aeroportuaria) y por entrar ahí, lo descubrieron por localización de IP.
      Cuando detuvieron a Libero por sus actos que infringen la ley en Argentina, la ministra Bullrich comentó lo siguiente:
      Citar
      Quienes infringen la ley deben responder ante la justicia por sus actos; no hay delitos sin sanción.
      Agregando a su vez lo siguiente:
      Citar
      Lo importante es que los hechos han quedado esclarecidos y los responsables fueron todos identificados.


      Por otra parte, desaría agregar que en un tiempo atrás, también se rumoreaba que Libero estaba realizando Carding con un integrante de MexicanHackers llamado Ahmad. A los dos les enviaron orden judicial, sin embargo se desconoce los detalles.

      Para finalizar, no se sabe cuántos años se le han dado a Libero y añado que THA está inactivo por estos momentos.

      De algo si estoy completamente seguro y es que, cuando se es Hacktivista la gente no aprecia lo que haces por ella. Desde las mismas empresas que te intentan intimidar con la policía, hasta las mismas personas, que te dicen: “Lucha, ataca a los políticos, filtra los datos” pero cuando te atrapan, esa misma gente se olvida de ti y no hace nada. Sé perfectamente de lo que hablo, y si no me llegasen a creer, creo que no hay ejemplo más práctico que el de Edward Snowden.

      Muchos le tenían repulsión a Libero porque decían que él defaceaba sitios que compraba. De igual manera, también se hizo muy popular por lo de las Islas Malvinas.

      Cualquier duda/sugerencia y/o aporte será bienvenido.

      ¿Y tú qué opinas?.

      Saludos.

      Enlaces de interés:
      https://goo.gl/FByD5i
      https://goo.gl/FqBPuR
      https://goo.gl/ruqP3q
      https://goo.gl/vhmPrD


      Páginas: [1] 2