lunes, 30 de mayo de 2011

Recuperación de password del Usuario Root de MySQL en Windows

Hace ya algún tiempo publique una forma de recuperar los datos de MySql de cuando una Base de datos no responde peor ahora se me presento que realizando pruebas entre distintos proyectos confundi la clave que al root de la Base de Datos y pues tuve que buscar la forma de accesar, encontre muchas paginas de como hacer esto en Linux pero en Windows tuve algunos problemas aqui les muestro los pasos para realizar el cambio de clave al usuario root en Windows...


  1. Iniciar una consola de comandos, en modo administrador, si no lo ejecutas como administrador no podrás realizar los cambios.
  2. Paramos el servicio :  C:\> net stop mysql
  3. Ejecutamos desde el directorio bin (es decir donde lo tengamos instalado + \ bin\):
    • C:\MySQL\bin> mysqld --skip-grant-tables --user=root
  4. Desde otro teminal (también como administrador), también desde el diretorio bin: 
    • C:\MySQL\bin> mysql -u root
  5. Accedemos automáticamente y sin necesidad de contraseña a mysql
  6. Ejecutamos:
    •  mysql> UPDATE mysql.user SET Password=PASSWORD('contraseña') WHERE User='root';
  7. y después
    •  mysql> FLUSH PRIVILEGES;
  8. Salimos del editor mysql: 
    • mysql> exit;
  9. Desde el administrador de tareal paramos mysql, el proceso se llama mysqld.exe o ejecutamos de nuevo 
    • C:\> net stop mysql
  10. Y Volvemos a arrancar el servicio desde un terminal:
    • C:\>net start mysql
Luego volemos a intentar entrar con la calve: contraseña y ya podremos accesar claro que podemos cambiar Contraseña en el Query por la clave que deseemos usar... y eso sera suficiente.

viernes, 18 de marzo de 2011

Vulnerabilidad en la seguridad de las aplicaciones ASP.NET

Hoy en día el tópico de la seguridad es muy discutido, es importare el saber que al desarrollar una aplicación y sobre todo una web las aplicaciones pueden ser un punto importare de entrada para aquellas personas que de forma mail intencionada o "ética" intentan vulnerar los sistemas.Y como siempre descuidos del hombre son los mas fáciles de encontrar. Pues bien navegando en la red buscando las funciones de unas clases me tope con la advertencia de esta vulnerabilidad la cual es fácil de resarcir y no presenta mucha dificultad. y de alguna forma es responsabilidad de nosotros como programadores el tomarla en cuenta.

¿De qué forma impacta es ta vulnerabilidad?

ASP .NET utiliza el cifrado para ocultar datos confidenciales y proteger a los mismos de manipulación por parte del cliente. Solo existe un problema en la implementacion del cifrado permite al atacante descifrar y manipular los datos.

Pero, ¿qué puede hacer el atacante con esta capacidad? Parte de la respuesta depende de la aplicación ASP.Net ala cual se va atacadar. Por ejemplo, si la aplicación ASP.Net almacena información confidencial, como contraseñas o cadenas de conexión de base de datos, en el objeto ViewState estos datos podrían verse comprometidos. El objeto ViewState se cifra y se envía al cliente en una variable de formulario oculto, por lo que es un posible objetivo de este ataque.


       Si la aplicación ASP.Net utiliza ASP.Net 3.5 SP1 o posterior, el atacante podría utilizar esta vulnerabilidad de cifrado para solicitar el contenido de un archivo arbitrario dentro de la aplicación ASP.Net. La revelación pública demostrado mediante esta técnica para recuperar el contenido de web.config. Cualquier archivo en la aplicación ASP.Net que este ejecutando el proceso de trabajo si se tiene acceso se devolverán al atacante.

Como funciona esta Vulnerabilidad

` Para entender cómo funciona esta vulnerabilidad, necesita saber acerca de los oráculos criptográficos. Un oráculo en el contexto de la criptografía es un sistema que proporciona sugerencias a medida que se le hacen preguntas. En este caso, existe una vulnerabilidad en ASP.Net que actúa como un oráculo de relleno. Esto permite a un atacante enviar el texto cifrado elegido al servidor y aprender si se descifra correctamente examinando qué código de error fue devuelta por el servidor. Haciendo muchas peticiones, el atacante puede aprender lo suficiente como para correctamente descifrar el resto del texto cifrado. El atacante puede alterar el texto sin formato y cifrarlo.

Como solucionar esta Vulnerabilidad

Una solución que puede utilizar para evitar esta vulnerabilidad es para activar la función CustomErrors de ASP.NET, y explícitamente configurar sus aplicaciones para volver siempre la misma página de error - sin importar el error encontrado en el servidor. Mediante el mapeo de todas las páginas de error a una sola página de error , esto impide que un hacker pueda distinguir entre los diferentes tipos de errores que se producen en el servidor.
El ejemplo que se describe a continuacion pretende como solucionar la vulnerabilidad existente en las Aplicaciones ASP.NET o para tener mas informacion acerca de como funciona esta vulnerablidad.
Si está utilizando ASP.NET 3.5 o ASP.NET 4.0, entonces debería seguir los siguientes pasos para habilitar CustomErrors y mapear todos los errores a una sola página de error.
  1. Editar el archivo de su aplicación ASP.NET raíz Web.config. Si el archivo no existe, crear uno en el directorio raíz de la aplicación.
  2. Creación o modificación de la sección de CustomErrors del archivo web.config para tener la siguiente configuración Observe el uso de redirectMode = "ResponseRewrite" con NET 3.5 SP1 y NET 4.0.               
  < customErrors mode ="On" redirectMode ="ResponseRewrite" defaultRedirect ="~/error.aspx" />
 

miércoles, 2 de febrero de 2011

Cortar Imágenes con un rectángulo

Hoy necesitaba cortar una imagen de una fotografía para dejar únicamente la cara de la persona, así que me di a la tare de buscar como cortar la imagen usando un rectangulo dobre un picturebox y recortando pegarlo en otro:


Para Cortar la Imagen se utiliza un rectángulo y en realidad es bastante sencillo de realizar.
Simplemente se utiliza el siguiente código


private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                CordenadaX.Text = e.X.ToString();
                CordenadaY.Text = e.Y.ToString();


                pictureBoxOrigen.Refresh();
                
                int A = 250;
                int B = 50;
                int C = 150;
                int D = 200;
                try
                {
                    A = Convert.ToInt32(CordenadaX.Text);
                    B = Convert.ToInt32(CordenadaY.Text);
                    C = Convert.ToInt32(Largo.Text);
                    D = Convert.ToInt32(Ancho.Text);


                    Bitmap imagen2 = new Bitmap(C, D);
                    Graphics lienzo = Graphics.FromImage(imagen2);


                    Pen cropPen = new Pen(Color.Red, 3);
                    cropPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
                   
                    Rectangle recorte = new Rectangle(A, B, C, D);
                    pictureBox1.CreateGraphics().DrawRectangle(cropPen, recorte);
                    lienzo.DrawImage(pictureBoxOrigen.Image, 0, 0, recorte, GraphicsUnit.Pixel);
                    this.pictureBoxDestino.Image = imagen2;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Surgio un Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

Código Completo : Codigo Completo

martes, 11 de enero de 2011

Cargar imágenes en WPF de forma dinamica.

Ya tenia tiempo sin poner nada por falta de tiempo...

Como dice me enfrente a un pequeño problema al intentar cargar un stream directamente sobre un componente System.Windows.Controls.Image al invocar al propiedad Source se requiere un objeto ImageSource, investigando y haciendo pruebas descubri que igual puede usarse un elemento System.Windows.Media.Imaging.BitmapImage, el problema y radicaba en como crear el BitmapImage desde WPF.

Generalmente para trabajar con imágenes windows forms se utiliza un picturebox para el cual   se utiliza System.Windows.Forms.PictureBox.Image el cual es un objeto: System.Drawing.Image para cargar este existen miles de ejemplos en Internet y funciones nativas como System.Drawing.Image.FromFile()System.Drawing.Image.FromStream() los cuales nos facilitan la vida; pues bien me di a la tarea de buscar una solución.

La solución que deduje  en base a códigos y referencias que vi es la siguiente diseñe una función que recibe un objeto de tipo System.Drawing.Imag y devuelve el requerido System.Windows.Media.Imaging.BitmapImage el cual se puede cargar de forma dinámica en el objeto System.Windows.Controls.Imag de WPF.

EJEMPLO:
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            image1.Source = FromStream(System.Drawing.Image.FromFile(@"C:\....\Pictures\666666.jpg"));
            
        }

Lo cual invoca mi solución a groso modo:
        public BitmapImage FromStream(System.Drawing.Image Imagen)
        {
            BitmapImage bmp = new BitmapImage();
            var image = Imagen;
            bmp.BeginInit();
            MemoryStream memoryStream = new MemoryStream();
            image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            bmp.StreamSource = memoryStream;
            bmp.EndInit();
            return bmp;
        }
Por cierto es necesario agregar las librerias :

using System.Windows.Forms;
using System.IO;
using System.Drawing;
Agregalas tanto en referencia como en el .CS de tu ventana WPF.

Tambien puede usuarse:

image.Source = new BitmapImage(
          new Uri(@"pack://application:,,,/MyReferencedAssembly/images/Globe.png",
                  UriKind.RelativeOrAbsolute));