sábado, 19 de septiembre de 2015

Práctica de Procesadores del Lenguaje II 2k15



Sin duda alguna es una asignatura tremendamente compleja pero a su vez apasionante.

En este caso, el alumno deberá comprender el análisis semántico, así como el proceso final de traducción de un lenguaje formal a las serie de instrucciones manejables por un microprocesador.

Los objetivos que se persiguen son:


  • Aprender a valorar la semántica subyacente a las construcciones sintácticas.
  • Aprender a integrar el sistema de tipos dentro de un compilador.
  • Estudiar la traducción de cada una de las construcciones de un lenguaje imperativo.
  • Aprender a dar soporte a la ejecución de invocaciones recursivas de subprogramas.
  • Aprender a dar soporte a la declaración anidada de subprogramas.
  • Conocer los procesos de generación de código ejecutable.
Y cuyo contenido es:
  • Análisis semántico
    • Gramáticas con atributos
    • Tabla de símbolos
    • Tipos de datos y verificación de tipos
  • Ambientes de ejecución
    • Organización de la memoria
    • Ambientes de ejecución estáticos
    • Ambientes de ejecución basados en pila
    • Paso de parámetros
  • Generación de código
    • Código intermedio
    • Generación de estructuras de datos
    • Generación de código para expresiones
    • Generación de código para sentencias de control
    • Generación de código para invocación de subrutinas
    • Optimización de código

El objetivo de la práctica es realizar un compilador del lenguaje PascUned, variación del lenguaje de programación Pascal, en sus fases de análisis semántico, generación de código intermedio y generación de código final.

En cuanto a la resolución de la práctica, los siguientes enlaces contienen el enunciado de la práctica, el proyecto completo para Eclipse y la memoria práctica:
See you soon!

Práctica de la asignatura de Sistemas Distibuidos 2k15


Presentación de la asignatura dada por el E.D.: 
El objetivo de esta asignatura es aprender los principios básicos sobre sistemas distribuidos, así como caracterizarlos y clasificarlos en función de una serie de parámetros básicos y distinguir entre los distintos tipos de modelos utilizados en sistemas distribuidos. Además, se pondrán de manifiesto la heterogeneidad, tanto de los medios de transmisión (cable coaxial, fibra óptica, canales inalámbricos,...) como de los dispositivos hardware y componentes software que los integran.
Esto hace necesario la aparición de una capa de abstracción software, comúnmente denominada Middleware (capa intermedia), la cual proporciona servicios a las aplicaciones distribuidas tales como la comunicación entre procesos (mediante RPC y Sockets) o invocación de objetos distribuidos (mediante RMI y CORBA).

También se estudian dos de los servicios más habituales ofrecidos por cualquier sistema distribuido, el servicio de archivos distribuidos y el servicio de nombres distribuidos.

Desde mi punto de vista es una asignatura complicada de estudiar, por lo extenso del temario. Sin embargo, la práctica compensa. Es de las más gratificante que he hecho a lo largo de estos años. Eso sí, como casi todas las prácticas en la UNED, se lleva mucho tiempo dejarla medianamente completa.

Si más preámbulos subo la práctica de este año, la cual trata de construir un "Sistema básico de microblogging tipo Twitter® usando Java RMI". 

Los ficheros para su descarga son:

domingo, 13 de septiembre de 2015

Ejecutar ELF 32 bits en arquitectura de 64 bits


Me ocurre a menudo que tengo que realizar alguna acción que alguna vez hice y que al tiempo debo repetir y claro, como generalmente no las anoto, pues me toca volver a bucear por la web hasta que encuentro lo que necesito.

Especialmente esto me ocurre cada vez que participo en algún CTF y sinceramente, me da bastante coraje tener que volver a dedicar tiempo a algo que en su día ya se lo dediqué.

Es por esto, por lo que comenzaré a escribir entradas con pequeñas 'recetas' de aquello que no quiero volver a buscar cada vez que lo necesite hacer.

Por tanto, abro esta nueva categoría con una receta que me permite ejecutar ELF de 32 bits en arquitecturas de 64 bits, como es el caso de la distribución Kali Linux 2.

  1. Compruebo que arquitecturas tengo habilitadas:
    dpkg --print-foreign-architectures
  1. Si en la lista aparece i386, voy al paso 5. En caso contrario, la añado:
    dpkg --add-architecture i386
  1. Actualizo:
    apt-get update
  1. Por último la instalo:
    apt-get install sl-modem-daemon:i386
  1. Fin del proceso.

sábado, 20 de junio de 2015

Bandit Level 17 → Level 18



Los datos de conexión para este nivel son:

- Host: bandit.labs.overthewire.org
- User: bandit17
- Pass: xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn



Los objetivos son claros:


La resolución de este reto es sencilla. Basta con hacer uso del comando grep:



Esto es todo por ahora. ¡Hasta el próximo reto!

jueves, 12 de febrero de 2015

CVE-2011-4862: Buffer overflow in libtelnet/encrypt.c


Un miembro de la lista de CrackSLatinoS a.k.a Boken (@Boken_), ha planteado una manera diferente de colaborar, motivar, aprender y practicar temas relacionados con la ingeniería inversa.

Para ello, propone la resolución de una serie de exploits de diferentes niveles de dificultad, del cual éste writeUp se encarga de documentar el primero de ellos de nivel medio.

El post original publicado en la lista el 11/12/2014 fue:


http://www.cvedetails.com/cve/2011-4862
La idea principal es que todo el que quiera hacer su versión de este exploit y comprender en profundidad el fallo, vaya comentando aquí sus avances, dudas, problemas y demás. Hay tanto exploits como detalles del mismo, pero la cuestión es que cada uno que lo intente y se atasque venga aquí a explicar sus problemas y pueda continuar.
Ni es un concurso, ni hay fecha de entrega. El único objetivo es que todo el que crea que no sabría hacerlo, pero quiera, utilice este post para conseguirlo. A ver si al final de este hilo entre todo lo comentado se pueden montar uno o varios tutes conjuntos.
Boken


Los detalles de esta vulnerabilidad son:
Buffer overflow in libtelnet/encrypt.c in telnetd in FreeBSD 7.3 through 9.0, MIT Kerberos Version 5 Applications (aka krb5-appl) 1.0.2 and earlier, Heimdal 1.5.1 and earlier, GNU inetutils, and possibly other products allows remote attackers to execute arbitrary code via a long encryption key, as exploited in the wild in December 2011.
Como no podía ser de otra manera, soez y yo nos pusimos a resolverlo con un resultado altamente satisfactorio para nosotros. Este tipo de retos siempre nos dejan muy buen sabor de boca. 

Ni que decir tiene que tan solo mostramos una pequeña prueba de concepto y que dista mucho de la POC original que en su día hicieron NighterMan y BatchDrake. Sin duda la de ellos es infinitamente más elaborada.

Espero que disfrutéis de esta lectura, tanto como nosotros redactándola. Aquí os dejamos todo lo necesario:
¡Hasta el próximo exploit!