miércoles, 10 de febrero de 2016

Una nueva entrada para mi comando preferido de linux o la navaja suiza DD! (Dataset Definition)

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
El comando dd (Dataset Definition), es una herramienta sencilla, útil, y sorprendente, a la vez que desconocida por muchos. Esta aplicación fue creada a mediados de los 70, en principio para Unix, simplemente porque no existía. Pero al contrario que otras herramientas que desde su creación se han ido sofisticando, ésta se ha ido simplificando, hasta el punto de poder hacer lo mismo que buenos programas comerciales como Norton Ghost o libres como CloneZilla, con sólo una pequeña orden en la línea de comandos.
Ni que decir tiene que toda la información de dd la podéis consultar con el comando man dd e info dd, también dos grandes olvidados…
Al lío…
Lo primero siempre es tener claro el disco duro de origen y el de destino, algo que averiguamos fácilmente con el comando (como root)fdisk -l.
La sintaxis más básica, sería ésta [como root]:
dd if=[origen] of=[destino]
Por lo que si quisiéramos clonar un disco duro:
dd if=/dev/hda of=/dev/hdb bs=1M con esto clonaríamos el disco hda en hdb. (discos IDE)
O:
dd if=/dev/sda of=/dev/sdb bs=1M para discos SATA
Con bs=1M, estamos diciendo que tanto la lectura como la escritura se haga en bloques de 1 megabyte (menos, sería más lento pero más seguro, y con más nos arriesgamos a perder datos por el camino).
Hay que tener en cuenta que de esta forma grabarás el disco “tal cual”, MBR, tabla de particiones, espacio vacío, etc., por lo que sólo podrás grabar en un disco del mismo o mayor tamaño.
Vamos a ver algunos ejemplos prácticos y opciones de este comando:
dd if=/dev/hda1 of=/dev/hdb bs=1M
Grabaríamos sólo la primera partición del disco de origen en el de destino.
dd if=/dev/hda of=/dev/hdb1 bs=1M
Grabaríamos el disco completo en la primera partición del disco de destino.
dd if=/dev/hda of=/home/hda.bin
Crear una imagen del disco duro, puede ser bin o iso (a partir de ahora utilizaré nuestro home como ejemplo). Como root:
dd if=/dev/hda | gzip > /home/hda.bin.gz
Crearíamos con el anterior comando una imagen del disco comprimida, (podemos utilizar gzip, bzip o bzip2.)
Crea una imagen de un CD:
dd if=/dev/cdrom of=/home/imagendeCD.iso
Para montar la imagen del CD:
mount -o loop imagedeCD.iso /mnt/home
Copiar el Master Boot Record:
dd if=/dev/hda of=mbr count=1 bs=512
Para restaurar el MBR:
dd if=mbr of=/dev/hda
Copiar el Volume Boot Sector (VBS):
dd if=/dev/hda of=/home/sector_arranque_hda count=1 bs=512
Para restaurar el VBS:
dd if=/home/sector_arranque_hda of=/dev/hda
Algunas curiosidades:
Recuperar un DVD rayado:
dd if=/dev/cdrom of=/home/dvd_recuperado.iso conv=noerror,sync
Esto no recupera todo el DVD, en este caso, sólo los sectores legibles. Sirve también para discos duros defectuosos.
La opción noerror sirve para obviar los errores de lectura en cualquier situación. Otro ejemplo sería:
dd conv=noerror if=/dev/hda of=~/home/imagen_disco_con_errores.iso
Grabaríamos con ello una imagen del disco duro en nuestro home saltándonos los errores del disco (muy útil para discos que se están muriendo).
Limpia nuestro MBR y la tabla de particiones:
dd if=/dev/zero of=/dev/hda bs=512 count=1
Limpia el MBR pero no toca la tabla de particiones (muy útil para borrar el GRUB sin perder datos en las particiones):
dd if=/dev/zero of=/dev/hda bs=446 count=1
Crea un archivo vacío de 1 Mb, una opción muy interesante como ahora veremos:
dd if=/dev/zero of=archivo_nuevo_vacio bs=1024 count=1024
Crear un archivo swap de 2Gb así de fácil:
sudo dd if=/dev/zero of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace
Al borde de la paranoia… Convierte todas las letras en mayúsculas:
dd if=miarchivo of=miarchivo conv=ucase
Cambia en todo el disco, la palabra Puigcorbe por Slqh, ( puedes cambiar rápidamente tu nombre a todos los archivos del disco):
dd if=/dev/sda | sed s/Puigcorbe/Slqh/g | dd of=/dev/sda
Llena el disco con caracteres aleatorios cinco veces. No va a quedar ni rastro de información en el disco icon_razz.gif :
for n in {1..5}; do dd if=/dev/urandom of=/dev/hda bs=8b conv=notrunc; done
(*) Nota final: utiliza este comando con precaución, y asegúrate siempre del orden y nombre de tus discos duros, porque lo mismo que te clona un disco te lo borra ‘en un plis’.

lunes, 22 de junio de 2015

Cambiando la combinación de colores (fondo oscuro) en Geany

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
Soy de los que le gusta un fondo oscuro para programar en lugar de un fondo blanco, quizás se deba un poco a la influencia que uno tiene en el fondo de Vi, emacs, nano, etc. Si eres como yo, y adicionalmente utilizas el editor de texto Geany para programar (mi favorito) esta es la forma de cambiar la combinación de colores a algo más dark:

La ruta en español es:

Editar > Preferencias > Editor > Tildar: "Invertir los colores de resaltado de sintaxis" > Aplicar y listo!

Pasaremos de esto:


A esto:


viernes, 5 de septiembre de 2014

Compendio de usos utiles del comando UNIX dd

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
dd (Unix)
De Wikipedia, la enciclopedia libre
dd es un común Unix programa cuyo objetivo principal es el bajo nivel de la copia y conversión de crudos de datos . dd es una aplicación que va a "convertir y copiar un archivo" [ 1 ] de acuerdo con la página del manual de referencia para la versión 7 de Unix, y es más probablemente inspirado en DD en IBM JCL , y la sintaxis del comando es la intención de ser una reminiscencia de este; [ 2 ] en JCL, "DD" es sinónimo de descripción de datos. [ 3 ] dd se utiliza para copiar un número especificado de bytes o bloques , la realización de la marcha de bytes para las conversiones, así como más esotérico EBCDIC a ASCII conversiones. [ 4 ] dd también se puede usar para copiar regiones de los archivos de dispositivo sin procesar, por ejemplo, copia de seguridad del sector de arranque de un disco duro , o para leer cantidades fijas de datos de archivos especiales como / dev / zero o / dev / random . [ 5 ]
Se dijo en broma que significan "destructor del disco", "destructor de datos", "muerte y destrucción", o "borrar datos", ya que se utiliza para operaciones de bajo nivel en discos duros, un pequeño error, como la inversión de la si y de los parámetros, tal vez puede resultar en la pérdida de los datos de algunas o todas en un disco. [ 4 ]
Contenido [ ocultar ]
Un uso
2 mensajes de salida
3 discos ATA más de 128 MiB
4 orientado a la recuperación de variantes dd
5 Véase también
6 Referencias
7 Enlaces externos
[ editar ] Uso

La línea de comandos de sintaxis de dd es significativamente diferente de la mayoría de los programas de Unix, y debido a su ubicuidad, es resistente a los recientes intentos de imponer una sintaxis común para todas las herramientas de línea de comandos. Por lo general, dd utiliza una opción = valor de formato, mientras que la mayoría de los programas de Unix utilizar la opción-valor o - opción = valor de formato. Además, dd de entrada "s se define con el" si "( i nput f ile) opción, mientras que la mayoría de los programas simplemente toman el nombre por sí mismo. Se rumorea que se han basado en IBM, JCL , y aunque la sintaxis puede haber sido una broma, [ 2 ] , parece que nunca ha habido ningún esfuerzo para escribir una más Unix, como el reemplazo.
Ejemplo del uso de dd comando para crear una imagen de disco ISO de un CD-ROM:
dd if = / dev / cdrom of = / home / sam / mycd.iso bs = 2048 conv = sync
Tenga en cuenta que un intento de copiar la imagen del disco entero usando cp puede omitir el bloque final, si se trata de una longitud inesperada [ cita requerida ] ; dd siempre completa la copia si es posible.
Usando dd para borrar todo un disco con datos aleatorios:
dd if = / dev / urandom of = / dev / hda
Usando dd para duplicar una partición del disco duro a otro disco duro:
dd if = / dev/sda2 of = / dev/sdb2 bs = 4096 conv = noerror
Usando dd para clonar un disco duro a otro disco duro:
dd if = / dev/ad0 of = / dev/ad1 bs = 1M conv = noerror
donde ad0 es el disco duro de origen y ad1 es el disco duro de destino en FreeBSD, donde los dispositivos de disco duro son nombrados ad
El noerror opción de conversión de medios para seguir adelante si hay un error (aunque una mejor herramienta para esto sería ddrescue ).
Duplicar una partición de disco como una imagen de disco de archivos en un ordenador remoto a través de una conexión segura ssh:
 dd if = / dev/sdb2 | ssh user @ host "dd / = / home del usuario / partition.image"
Sobrescribir los primeros 512 bytes de un archivo con bytes nulos:
 dd if = / dev / zero of = ruta / al / archivo bs = 512 count = 1 conv = notrunc
El notrunc significa conversión opción de no truncar el archivo de salida - es decir, si el archivo de salida ya existe, cambiando los bytes especificados y dejar el resto del archivo de salida solo. Sin esta opción, dd crearía un archivo de salida de 512 bytes.
Para duplicar una partición de disco como una imagen de disco de archivos en una partición diferente:
 dd if = / dev/sdb2 of = / home / sam / bs partition.image = 4096 conv = noerror
Crear un 1 GiB archivo que contiene sólo ceros (bs = tamaño de bloque, el recuento = número de bloques):
 dd if = / dev / zero of = file1G.tmp bs = 1M count = 1024 
A cero fuera de una unidad:
 dd if = / dev / zero of = / dev / sda
Para asegurarse de que la unidad es en realidad llevado a cero:
 dd if = / dev / sda | hexdump-C | cabeza
La salida de este comando será similar al siguiente si la unidad está en blanco:
 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * |................| 201f78000 16841664 0 16841664 0 registros en los registros de 8,622,931,968 bytes ( 8,6 GB) copiados, 1247,05 s, 6,9 MB / s
Si la unidad está en blanco, una línea de bytes en blanco será impreso, seguido por un '*' significa repetir las líneas en blanco, seguido por una línea que indica la dirección de la línea que pone fin a la repetición, seguido por las estadísticas que se imprimen después de la de salida. Los números en las estadísticas anteriores son ilustrativos. Si la unidad no está completamente en blanco, habrá más de una línea de salida de datos.

Para duplicar los primeros dos sectores del disco:
 dd if = / dev/fd0 of = / home / sam / MBRboot.image bs = 512 count = 2
Para crear una imagen de todo el registro de inicio maestro (incluyendo la tabla de particiones ):
 dd if = / dev / sda of = / home / sam / MBR.image bs = 512 count = 1
Para crear una imagen de sólo el código de arranque del registro de inicio maestro (sin la tabla de particiones):
 dd if = / dev / sda of = / home / sam / MBR_boot.image bs = 446 count = 1
Para hacer una prueba de manejo de referencia y analizar la secuencia de lectura y escritura de bloques de 1024 bytes:
 dd if = / dev / zero bs = 1024 count = 1000000 of = / home/sam/1Gb.file dd if = / bs = 64k home/sam/1Gb.file | dd of = / dev / null
Para crear un archivo de 100 bytes al azar:
 dd if = / dev / urandom of = / home / sam / myrandom bs = 100 count = 1
Para convertir un archivo en mayúsculas:
 dd if = nombre de archivo de nombre de archivo = conv = ucase
Para buscar en la memoria del sistema:
 dd if = / dev / mem | grep 'un trozo de cuerda-de-palabras-en-el-archivo-que-olvidado-a-guardar-antes-de-hit-la-cerca de un botón'
La imagen de una partición a otra máquina:
 El equipo de origen: dd if = / dev / hda bs = 16065b | netcat 1234 El equipo de destino: netcat-l-p 1234 | dd of = / dev / hdc bs = 16065b
Enviando una señal SIGINFO (o una señal USR1 en Linux) a un proceso en marcha `dd 'hace de impresión de E / S a las estadísticas de error estándar y luego reanudar la copia:
$ Dd if = / dev / zero of = / dev / null & pid = $! $ Kill-USR1 pid $ 18.335.302 0 0 18.335.302 registros en los registros de 9387674624 bytes (9,4 GB) copiados, 34,6279 segundos, 271 MB / s 
Crear un 1 GiB archivo disperso o cambiar el tamaño de un archivo existente a 1 GiB sin sobrescribir:
 dd if = / dev / zero of = mytestfile.out bs = 1 count = 0 buscar = 1G
Algunas implementaciones de entender x como un operador de multiplicación en el tamaño del bloque y los parámetros de conteo:
dd bs = 2x80x18b if = / dev/fd0 of = / tmp / floppy.image
donde la "b" sufijo indica que las unidades son bloques de 512 bytes. Unix los dispositivos de bloque lo utilizan como su unidad de asignación por defecto.
Por el valor del campo bs, el siguiente número decimal puede ser el sufijo:
 w significa 2 b significa 512 k significa 1.024 M especifica la multiplicación por 1024 * 1024 G especifica la multiplicación por 1024 * 1024 * 1024
Por lo tanto bs = 2 * 80 * 18 ter medios, 2 * 80 * 18 * 512 = 1.474.560, que es el tamaño exacto de 1440 KiB disquete
Para montar la imagen: mount-o loop floppy.image / mntpoint
[ editar ] mensajes de salida

La variante de GNU dd que se suministra con Linux no describe el formato de los mensajes que aparecen en la salida estándar de terminación, sin embargo estos se describen por otras aplicaciones, por ejemplo que con BSD.
"Los registros de" cada uno de los "Registros en" líneas y muestra el número de bloques completos transferidos + el número de bloques parciales, por ejemplo, porque el medio físico, terminaron antes de un bloqueo completo fue leído.
[ editar ] Los discos ATA más de 128 MiB

Seagate documentación advierte: "Algunas utilidades de disco, como DD, que dependen del acceso de disco de bajo nivel no sea compatible con 48 bits LBA hasta que se actualicen. " [ 6 ] LBA de 48 bits se requiere para discos duros ATA más de 128 GiB en tamaño. Sin embargo, en Linux , dd utiliza el kernel para leer o escribir en primas ficheros de dispositivo . [ 7 ] Soporte para LBA de 48 bits ha estado presente desde la versión 2.4.23 del kernel. [ 8 ] [ 9 ]
[ editar ] orientadas a la recuperación de variantes dd

De código abierto basado en UNIX de los programas de rescate incluyen dd_rescue y dd_rhelp , que trabajan juntos, savehd7 , o GNU ddrescue .
Antonio Díaz Díaz (el creador de GNU ddrescue) Compara [ 10 ] variantes de la tarea de rescatar el dd para:
La utilidad estándar dd hace una lectura lineal de la unidad, por lo que puede tomar mucho tiempo o incluso freír el disco sin rescatar nada si los errores son al principio de la unidad. Kurt Garloff de dd_rescue hace básicamente lo mismo que dd, sólo de manera más eficiente. LAB Valentín dd_rhelp es un shell script que se ejecuta complejos veces dd_rescue muchos Garloff, tratando de ser estratégico sobre la copia de la unidad, pero es muy ineficiente.
dd_rhelp primero extrae todos los datos legibles, y lo guarda en un archivo, insertando ceros en bytes no se puede leer. Entonces se trata de volver a leer los datos no válidos y actualizar este archivo.
GNU ddrescue se puede utilizar para copiar los datos directamente en un disco nuevo si es necesario, al igual que Linux dd.
dd_rhelp o GNU ddrescue dará lugar a una imagen completa del disco, más rápido, pero posiblemente con algunos errores. GNU ddrescue es generalmente mucho más rápido, como está escrito enteramente en C + + , mientras que dd_rhelp es un script de shell actúa como un frontend para dd_rescue. Ambos dd_rhelp y objetivo GNU ddrescue para copiar datos rápidamente, donde no hay errores, y luego copiar en bloques más pequeños y con reintentos donde hay errores. GNU ddrescue es fácil de usar con las opciones predeterminadas, y puede ser descargado y compilado en Linux basado en Live CD como Knoppix , y puede ser utilizado con SystemRescueCD .
GNU ddrescue ejemplo [ 11 ]
# En primer lugar, tomar la mayoría de las áreas libres de errores en un apuro: 
ddrescue -n  / dev / old_disk / dev / new_disk rescued.log
 # luego tratar de recuperar la mayor cantidad de áreas arriesgada posible: 
ddrescue -r  1  / dev / old_disk / dev / new_disk rescued.log
Savehd7 guarda la partición de disco duro en varias fases [ 12 ] . Por lo tanto, no es necesario llamar a savehd7 con diferentes parámetros. Savehd7 trabaja de forma interactiva en modo texto y muestra el progreso mientras se trabaja. Por ejemplo:
  Procesamiento - Pulse cualquier tecla para hacer una pausa (puede tardar algún tiempo para reaccionar) el progreso: okay: bloqueos mal: bytes mal:: fixed copia 2.6568% 2.6568% 0.0000% 0.0000% 0     
Hay grandes diferencias en la forma de errores en el disco son procesados ??por varios núcleos. Los sistemas operativos como FreeBSD, NetBSD, OpenBSD, Solaris, así como diferentes núcleos de Linux (es decir, hda vs sda (<2 .6.20="" adem="" bajo="" bloques="" bsd="" como="" comportan="" consola.="" crudo="" datos.="" de="" deseable="" desee="" diferente.="" disco="" dispositivos="" dmesg="" donde="" el="" en="" error.="" error="" es="" grandes="" hace="" la="" lectura="" linux="" lo="" los="" m="" manera="" menos="" mensajes="" n="" nivel="" no="" ocultar="" ocurri="" para="" posible="" prima="" que="" real="" recuperaci="" s="" se="" solicitado="" span="" tail-n8="" tiene="" ubicaci="" utilizar="" ver="">

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: