lunes, 29 de julio de 2013

SQL Inyection puerta abierta a servidores y aplicaciones

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks

Lo siguiente es un extracto literal (copy/paste) de una de las entradas del manual de PHP (Capítulo 27. Seguridad de Bases de Datos) extraída del manual chm (HTML help de windows), la cual me parece muy completa y es todo un honor compartirla por esta vía, es información vital para todo desarrollador de aplicaciones web-based, que básicamente son casi todas las de hoy en día. En el terreno de la inyección SQL no hay SSL ni encriptado que valga, y hoy en día con tanto uso y abuso de AJAX, json, etc. para interactuar con el server trae muchos vacíos de seguridad, como siempre, es mejor prevenir que lamentar...

Inyección de SQL

Muchos desarrolladores web no son conscientes de cómo pueden manipularse las consultas SQL, y asumen que una consulta SQL es un comando confiable. Esto representa que las consultas SQL pueden burlar los controles de acceso, y de este modo evitar los chequeos estándares de autenticación y autorización, y a veces las consultas SQL pueden incluso permitir acceso a comandos al nivel del sistema operativo de la máquina huésped.
La Inyección Directa de Comandos SQL es una técnica en la cual un atacante crea o altera comandos SQL existentes para exponer datos escondidos, o sobrescribir datos críticos, o incluso ejecutar comandos del sistema peligrosos en la máquina en donde se encuentra la base de datos. Esto se consigue cuando la aplicación toma información de entrada del usuario y la combina con parámetros estáticos para construir una consulta SQL. Los siguientes ejemplos, desafortunadamente, están basados en historias reales.
Debido a la falta de validación de la información de entrada y el establecimiento de conexiones con la base de datos desde un super-usuario o aquel que puede crear usuarios, el atacante podría crear un super-usuario en su base de datos.
Ejemplo 27-2. Paginación del conjunto de resultados ... y creación de super-usuarios (PostgreSQL)

$offset   
$argv[0]; // atención, ¡no se valida la entrada!$consulta "SELECT id, nombre FROM productos ORDER BY nombre LIMIT 20 " .
            
"OFFSET $offset;";$resultado pg_query($conexion$consulta);?>
Los usuarios normales pulsan sobre los enlaces 'siguiente' y 'anterior', en donde el desplazamiento ($offset) se encuentra codificado en la URL. El script espera que el valor entrante $offset sea un número decimal. Sin embargo, qué sucede si alguien intenta un ataque añadiendo una forma codificada (urlencode()) de lo siguiente en la URL

0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--
Si esto ocurriera, entonces el script le presentaría un acceso de superusuario al atacante. Note que 0; es usado para ofrecer un desplazamiento válido a la consulta original y finalizarla.
Nota: Es una técnica común obligar al analizador sintáctico de SQL a que ignore el resto de la consulta escrita por el desarrollador mediante --, el cual es el signo de comentarios en SQL.
Una forma viable de adquirir contraseñas es jugar con las páginas de resultados de búsquedas. Lo único que necesita el atacante es ver si existen variables enviadas por el usuario que sean usadas en sentencias SQL, y que no sean tratadas apropiadamente. Estos filtros pueden ubicarse por lo general previos a cláusulas WHERE, ORDER BY, LIMIT y OFFSET en sentencias SELECT para personalizar la instrucción. Si su base de datos soporta la construcción UNION, el atacante puede intentar añadir una consulta completa a la consulta original para generar una lista de contraseñas desde una tabla cualquiera. El uso de campos encriptados de contraseñas es altamente recomendable.
Ejemplo 27-3. Listado de artículos ... y algunas contraseñas (en cualquier base de datos)

$consulta  
"SELECT id, nombre, insertado, tam FROM productos
                  WHERE tam = '$tam'
                  ORDER BY $orden LIMIT $limite, $offset;"
;$resultado odbc_exec($conexion$consulta);?>
La parte estática de la consulta puede combinarse con otra sentencia SELECT la cual revela todas las contraseñas:

'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--
Si esta consulta (la cual juega con ' y --) fuera asignada a una de las variables usadas en $consulta, la bestia de la consulta habrá despertado.
Las sentencias UPDATE de SQL son también susceptibles a ataque. Estas consultas también se encuentran amenazadas por un posible acotamiento y adición de una consulta completamente nueva. Pero en este caso el atacante puede amañar la información de una cláusula SET. En este caso se requiere contar con cierta información sobre el esquema de la base de datos para poder manipular la consulta satisfactoriamente. Esta información puede ser adquirida mediante el estudio de los nombres de variables de los formularios, o simplemente por fuerza bruta. No existen demasiadas convenciones para nombrar campos de contraseñas o nombres de usuario.
Ejemplo 27-4. De restablecer una contraseña ... a adquirir más privilegios (con cualquier servidor de base de datos)
$consulta "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";?>
Pero un usuario malicioso envía el valor ' or uid like'%admin%'; -- como $uid para cambiar la contraseña del administrador, o simplemente establece $pwd a "hehehe', admin='yes', trusted=100 " (con un espacio al inicio) para adquirir más privilegios. En tal caso, la consulta sería manipulada:


// $uid == ' or uid like'%admin%'; --$consulta "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%'; --";// $pwd == "hehehe', admin='yes', trusted=100 "$consulta "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100 WHERE ...;"?>

Un horrible ejemplo de cómo puede accederse a comandos del nivel del sistema operativo en algunas máquinas anfitrionas de bases de datos.
Ejemplo 27-5. Ataque al sistema operativo de la máquina anfitriona de la base de datos (MSSQL Server)

$consulta  
"SELECT * FROM productos WHERE id LIKE '%$prod%'";$resultado mssql_query($consulta);?>
Si el atacante envía el valor a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- a $prod, entones la $consulta será:


$consulta  
"SELECT * FROM productos
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--"
;$resultado mssql_query($consulta);?>
MSSQL Server ejecuta sentencias SQL en el lote, incluyendo un comando para agregar un nuevo usuario a la base de datos de cuentas locales. Si esta aplicación estuviera corriendo como sa y el servicio MSSQLSERVER está corriendo con los privilegios suficientes, el atacante tendría ahora una cuenta con la que puede acceder a esta máquina.
Nota: Algunos de los ejemplos anteriores están atados a un servidor de base de datos específico. Esto no quiere decir que un ataque similar sea imposible con otros productos. Su base de datos puede ser vulnerable de forma semejante, en alguna otra manera.

Técnicas de protección

Usted puede argumentar con justa razón que el atacante debe poseer cierta cantidad de información sobre el esquema de la base de datos en la mayoría de ejemplos que hemos visto. Tiene razón, pero usted nunca sabe cuándo y cómo puede filtrarse esta información, y si ocurre, su base de datos estará expuesta. Si está usando un paquete de gestión de bases de datos de código abierto, o cuyo código fuente está disponible públicamente, el cual puede pertenecer a algún sistema de administración de contenido o foro, los intrusos pueden producir fácilmente una copia de un trozo de su código. También puede ser un riesgo de seguridad si es un segmento de código pobremente diseñado.
Estos ataques se basan principalmente en la explotación del código que no ha sido escrito pensando en la seguridad. Nunca confíe en ningún tipo de información de entrada, especialmente aquella que proviene del lado del cliente, aun si lo hace desde una caja de selección, un campo de entrada hidden o una cookie. El primer ejemplo le muestra que una consulta así de descuidada puede causar desastres.

  • Nunca se conecte a la base de datos como un super-usuario o como el dueño de la base de datos. Use siempre usuarios personalizados con privilegios muy limitados.
  • Revise si la entrada recibida es del tipo apropiado. PHP posee un amplio rango de funciones de validación de datos, desde los más simples encontrados en Funciones sobre variables y en Funciones de tipo de caracter (p. ej. is_numeric(), ctype_digit() respectivamente) hasta el soporte para Expresiones Regulares compatibles con Perl.
  • Si la aplicación espera alguna entrada numérica, considere la verificación de información con is_numeric(), o modifique silenciosamente su tipo usando settype(), o utilice su representación numérica, dada por sprintf().
    Ejemplo 27-6. Una forma más segura de generar una consulta para paginado

    settype
    ($offset'integer');$consulta "SELECT id, nombre FROM productos ORDER BY nombre " .
                
    "LIMIT 20 OFFSET $offset;";// note el simbolo %d en la cadena de formato, usar %s no tendría sentido$consulta sprintf("SELECT id, nombre FROM productos ORDER BY nombre" .
                        
    "LIMIT 20 OFFSET %d;"$offset);?>
  • Ubique cada valor no-numérico que entrega el usuario y que sea pasado a la base de datos entre comillas con la función de escape de cadenas específica a su base de datos (p.ej. mysql_escape_string(), sql_escape_string(), etc.). Si no hay disponible un mecanismo de escape de cadenas específico a la BD, las funciones addslashes() y str_replace() pueden ser útiles (dependiendo del tipo de base de datos). Vea el primer ejemplo. Como se ve allí, agregar comillas a la parte estática de la consulta no es suficiente, haciéndola fácilmente manipulable.
  • No imprima ninguna información específica sobre la base de datos, especialmente sobre su esquema, ya sea por razones justas o por equivocaciones. Vea también Reporte de Errores y Gestión de Errores y Funciones de Registro.
  • Puede usar procedimientos almacenados y cursores previamente definidos para abstraer el acceso a las bases de datos, de modo que los usuarios no tengan acceso directo a las tablas o vistas, aunque esta solución tiene otros impactos.
Además de estas acciones, usted puede beneficiarse del registro explícito de las consultas realizadas, ya sea desde su script o por la base de datos misma, si ésta soporta la gestión de registros. Por supuesto, el registro de acciones no puede prevenir cualquier intento peligroso, pero puede ser útil para rastrear cuáles aplicaciones han sido usadas para violar la seguridad. El registro en sí no es útil; lo es la información que contiene. Por lo general, es mejor contar con más detalles que con menos.


jueves, 9 de junio de 2011

Convertir PDF de imagenes a texto con OCRAD

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks
Requisitos: tener el programa ghostscript y ocrad
sudo aptitude install gs ocrad

Aqui tenemos un ejemplo de como se realiza la conversión de un documento PDF a un archivo de texto, en este caso el PDF era de imágenes por lo cual se filtró a través de un OCR como lo es OCRAD:
gs -sPAPERSIZE=a4 -sDEVICE=pnmraw -r300 -dNOPAUSE -dBATCH -sOutputFile=- -q Dropbox/UAH/may-ago-2011/Analisis-Sistemas/Ingenieria.de.Software.-.Ian.Sommerville.7ma.Edicion.PRENTICE-HALL.pdf | ocrad > ian.somerville.txt

El resultado es que ya tengo en modo texto un librillo de ingeniería de software que estaba en imágenes listo para "copiar y pegar" parte de su contenido, sin utilizar herramientas privativas, y solo con un par de lineas en la terminal...

Fuentes:
GNU/OCRAD manual

lunes, 31 de enero de 2011

Recuperar icono de volumen y otros Ubuntu 10

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks
Me encontré que luego de manipular un poco mi escritorio, habían desaparecido los controles de volumen y de cierre de sesión/apagado...

Para restaurarlos solo basta hacer click derecho sobre una barra de herramientas como, por ejemplo la principal (casi siempre arriba, donde estan los menús Aplicaciones, lugares, sistema). Allí seleccionar la opción: Añadir al panel... Una vez allí sólo se necesita ubicar las entradas denominadas: "Mini aplicación de indicadores" y "Mini aplicación de indicadores de sesión" una vez seleccionadas añadir y Listo!

Ubuntu en sus últimas versiones ha fusionado los applets de ciertas cosas "comunes" y no tiene estos accesorios por separado...

Y si lo tuyo es tan grave que hay que restaurar todo, aqui hay una guia de como hacerlo:

Restaurar Paneles de GNOME en ubuntu "de fabrica"

viernes, 14 de enero de 2011

Tutorial para comprar Gift-cards en amazon

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks

Las gift cards (tarjetas de regalo) de amazon son una forma de pago muy interesante, que te permiten comprar a través de este portal o sus tiendas asociadas que vendan allí.

Puede uno preguntarse: ¿Por qué comprar una gift card para pagar, por qué no hacerlo directamente? Tengo tres argumentos muy válidos a la hora de hacer esto.
El primero: tienes la posibilidad de regalar una giftcard como un presente para que tu ser querido compre lo que quiera.

Segundo: y no menos importante, si estas en Venezuela y eres uno de los tantos venezolanos oprimidos por nuestra restricción cambiaria, y por mala suerte realizas una compra que no se puede concretar, amazon te hara un reembolso, y seguro pensaran: bueno que importa que la compra no se de, total me reintegraran mi dinero, pero, el problema es que tu reintegro será en nuestra devaluada y cada vez más vólatil moneda: el Bolívar Fuerte. Una buena práctica en general es, antes de comprar nada, primero comprar una gift card y auto-regalarsela, para luego realizar los consumos, de esta forma, si algo va mal el reintegro será en gift cards manteniendo los dolares disponibles para cualquier momento.

Tercero: Para terminar, si no gastas (inviertes) tus $400 en un año en Venezuela, pierdes este dinero, es decir para el año que entra solamente tienes opción a solicitar $4oo y nada más, por lo cual una forma de "acumular saldo" o no dejar perder ese dinero, es comprar una GC, ya que estas no tienen fecha de expiración...

En esta entrega traigo este tutorial/manual sobre como realizar la compra de una gift card en amazon, está en PDF y en PowerPoint para su descarga, puedes bajarla de megaupload o rapidshare:

Links de Megaupload:

Links de Rapidshare:

jueves, 29 de abril de 2010

Clonacion de entornos multi boot linux-windows

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks

Como muchos saben existe una herramienta muy famosa llamada norton ghost, la cual permite entre otras cosas hacer clonaciones de equipos, si bien es bastante bueno para equipos winbug no da resultados tan aceptables para equipos con doble booteo. Este método o tecnica es aplicable para aquellos que poseen o administran varios equipos con características iguales de hardware (misma marca, discos duros del mismo tamaño, equipos ensamblados en lote, etc.) que deseen clonar su sala de máquinas con la posibilidad de elegir 2 o más sistemas operativos.



El proceso consiste en crear un equipo modelo con todo el software y configuraciones comunes, en resumén sin entrar en detalles ya que el proceso de instalación dual sera tratado en otro artículo, se realiza lo siguiente:

1. Instalar y configurar window$:

  • Programas de ofimática (office, open office)

  • Actualizaciones comunes: (sp2, sp3, windos media, iexplorer, y todos sus parchos e inventos inútiles)

  • Programas de internet (msn, firefox)

  • Antivirus y software de mantenimiento (con sus correspondientes actualizaciones)

  • Otras aplicaciones y configuraciones según tu caso (impresoras, direcciones ip, wallpapers, cuentas, etc)


2. Instalar y configurar GNU/linux (en mi caso instalé debian etch)

  • Insertar cd/dvd/extraible de instalación de la distribución y bootear a través del mismo

  • Realizar el particionado del disco utilizando el asistente de instalación, siguiendo cualquier esquema de particionado recomendado dependiendo del uso de las estaciones, teniendo en cuenta que el espacio ocupado por window$ no debe ser formateado. IMPORTANTE: recuerda poner la marca de arranque en tu particion boot si la definiste o en su defecto en /

  • Continua con el proceso de instalación configura el gestor de arranque (GRUB o LiLo), idioma, paquetes, red y todo lo que corresponda.

  • Al terminar puedes ingresar a tu sistema GNU/Linux actualizar el #vi/etc/apt/sources.list con tus repositorios favoritos, hacer un #aptitude update, luego un #aptitude upgrade, para luego comenzar a instalar lo que te plazca.


3. El proceso de clonación de equipos:

Teniendo nuestro equipo modelo como nos da la gana podemos proceder al proceso de clonación, en este caso explicare 2 formas una desde linux y otra desde window$ las cuales funcionaron perfectamente en 25 computadoras IBM ThinkCentre:

  • Desde linux: desde linux existe un comando muy poderoso llamado dd, el cual permite copiar bit a bit los datos de un dispositivo a otro lugar. Abre una terminal y haz lo siguiente:



    • Determina el nombre de tu unidad origen y tu unidad destino para ello revisa en /dev:



    • ls /dev/sd* /dev/hd*


    • Segun tu tipo de hardware disco ide, sata o scsi te saldra una lista de las unidades
      que comiencen con sd (sata, scsi) o hd (ide) seguidas de un número o letra.
      En mi caso los discos a clonar eran sata
      por lo cual mi dispositivo origen era sda y mi dispositivo destino sdb. Con esta información procedemos a realizar la clonación con el comando:


    • nice --15 dd if=/dev/sda of=/dev/sdb bs=4096&


    • Donde


    • nice -- 15



    • dd



    • if=/dev/sda



    • of=/dev/sdb



    • bs=4096&






  • Desde Windows: existen multidud de opciones en el mercado para hacer clonaciones pero la que me funcionó y fue la más aceptable se basa en una sencilla aplicación freeware llamada SelfImage la cual pueden descargar aquí



  • Alternativa adicional (no probada pero promete): consiste en utilizar un liveCD con un programa llamado CloneZilla que puedes descargar en http://clonezilla.org/ el cual ofrece ser una opción rápida y "sin dolor" para lo relacionado con clonación de entornos duales, la cual soporta: NTFS, Fat, ext3, LVM y un viaje de sistemas de archivos hasta de Mac OS X.


Adicional:

Al arrancar los equipos clonados en la parte de linux se desconfiguran las interfaces de red (por ejemplo ahora se llama eth4 o ethx pero no 0)

jueves, 15 de abril de 2010

Instalar acetoneISO para gestion de imágenes de disco al estilo DaemonTools

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks

Me tope con la necesidad de tener un equivalente a daemon-tools en mi Ubuntu 9.10 y buscando por alli di con este programa que parece ser una buena alternativa muy completa y lista para usar



Para efectos de lo que queria inicialmente se puede resolver, (si es tu caso) muy facilmente sin instalar nada adicional en tu sistema. En mi caso queria montar para poder reproducir el iso de un DVD si utilizas el montaje integrado en GNOME no te va a dar resultado el querer abrirlo con VLC o Totem o cualquier reproductor, el truco esta en usar la termina y montar el iso del dvd en /media/cdrom/ para posteriormente con VLC por ejemplo decirle reproducir disco y seleccionarlo como si se tratase de un cd/dvd fisico, hecho esto te funcionaran perfectamente los menus y elementos interactivos del dvd. El comando a utilizar en mi caso fue:



sudo mount -t iso9660 -o loop /RUTA/ALOQUEQUIERAS/MONTAR.iso /media/cdrom0/


Abre el VLC y busca el cd que montaste y ahi tienes la pelicula con todos sus menus!



Ahora si quieres algo más versátil y con una GUI intuitiva prueba acetonelISO
Para instalarlo en Ubuntu 9.10 la forma más sencilla es utilizar el gestor de paquetes synaptic, en el añadimos el repositorio de la gente de getdeb (sitio muy completo con enorme variedad de programas .deb) de esta forma:


En Sistema -> Administracion -> Gestor_de_paquetes_synaptic -> Configuracion -> Repositorios
Vamos a la pestaña -> Otro Software -> Añadir ...



Y escribimos esto en el input que aparece, aceptamos y listo por acá ...
deb http://ubuntu.org.ua/ getdeb/



Ahora en una terminal podemos hacer un sudo aptitude install acetoneiso y eso es toddy!! encuentralo en el menu Aplicaciones -> Sonido y Video o mediante gnome do + y tipea ace y ahi está!!

miércoles, 14 de abril de 2010

Instalar MySQL workbench en ubuntu 9.10 editor visual para mysql

Bookmark:
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks


Para abrir los archivos con extensión mwb que ubuntu trata como archivadores (como si fuese un .zip, o tar.gz), necesitas bajarte el MySQL Workbench En el caso de Linux te bajas la ultima version (beta) Selecciona tu arquitectura x64 o i386, te la descargas y haces: sudo dpkg -i --Nombre paquete que te descargaste.deb --



te va a soltar errores de dependencias, los cuales se resuelven facilmente con un aptitude install --nombre del paquete que te falta--



Son cuatro paquetes/librerias necesarias copias y pegas si quieres todos en

la misma linea del sudo aptitude install paquete1 paquete2 etc...

y al terminar esto procedes al

sudo dpkg -i pauqtedelmysqlworkbench.deb



Captura de pantalla del WB:

Captura Mysql workbench

Espero que disfruten esta excelente GUI para el diseño de modelos ER y modelado general de base de datos que hasta soporta ingenieria inversa ...




Para windows no pide mas nada que un siguiente siguiente en el wizard...