Provided by: sing_1.1-17_i386 bug

NOMBRE

       - Send ICMP Nasty Garbage packets to network hosts

SINOPSIS

       sing  [-hVRnvqGQOBU]  [-c  count]  [-T wait] [-p patron] [-s datos] [-F
       bytes] [-i interfaz] [-S spoof] [-t ttl] [-TOS tos]  [-l  preload]  [-M
       os] [-L logfile] [-x codigo] [tipo]  host

DESCRIPCIÓN

       sing  es  una  aplicación  para generar diversos tipos de paquetes ICMP
       desde linea de comandos. Su principal motivo es  sustituir  al  comando
       ping   pero  añadiéndole  ciertas  extensiones  como  la  capacidad  de
       enviar/leer paquetes ’spoofeados’, poder enviar Actualmente soporta los
       tipos ICMP de error siguientes: Redirect, Source Quench, Time Exceeded,
       Destination Unreach, Parameter Problem y los tipos ICMP de  información
       siguientes:  Address Mask Request, Timestamp, Information Request, Echo
       Request, Router Solicitation y Router Advertisement.

       El host destino puede especificarse también como una lista de  gateways
       (incluyendo host destino) separados por el símbolo ’%’ indicando el uso
       de la pción IP Strict Source Routing o separados  por  el  símbolo  ’@’
       para indicar el uso de la Opcin IP Loose Source Routing.

       En  la  sección  EJEMPLOS se incluyen una gran cantidad de ejemplos que
       ilustran algunas de las posibilidades reales de uso de este programa.

OPCIONES

       -h, --help
              Ayuda.

       -V, --Version
              Versión del programa.

       -v, --verbose
              Modo informativo. Más informativo si se usa dos veces.

       El tipo de ICMP, siguiendo un orden por código de menor a mayor,  puede
       ser cualquiera de los siguientes:

       -du, --dest_unreach
              Destination  Unreach.  El paquete IP no pudo ser entregado. Este
              tipo ICMP es de error.

       -sq, --src_quench
              Source Quench. El paquete IP  no  se  entrega  a  causa  de  una
              congestión en la red. Este es tipo ICMP es de error.

       -red, --redirect
              Redirect.  Requerimiento  para  desviar  paquetes IP a través de
              otro router. Este tipo ICMP es de error.

       -echo, --echo_request
              Echo Request. Petición a un host para que devuelva una respuesta
              de  eco.  Este  tipo  es el que se envía por defecto. Es un tipo
              ICMP de informacin.

       -rta, --router_advert direccin[/preferencia]
              Router Advertisement. El router comunica  la  disponibilidad  de
              uno  o  varios  routers  con  dirección  direccin y preferencia
              preferencia.  Si se omite esta última se toma la preferencia por
              defecto que es 0. Este tipo ICMP es de informacin.

       -rts, --router_solicit
              Router Solicitation. Requerimiento por parte de un host para que
              se envíe un anuncio de uno o varios routers. Como  el  anterior,
              forma parte del intercambio de mensajes Router Discovery y es un
              tipo ICMP de informacin.

       -tx, --time_exc
              Time Exceeded. Se ha acabado el tiempo de un  paquete  IP.  Este
              tipo ICMP es de error.

       -param, --param_problem
              Parameter  Problem. Valor erróneo en una variable de la cabecera
              IP. Este tipo ICMP es de error.

       -tstamp, --timestamp
              Timestamp. Solicitud de la hora de un host. Este tipo ICMP es de
              informacin.

       -info, --info_req
              Information  Request. El host solicita una respuesta Info Reply.
              Este tipo ICMP es de informacin.

       -mask, --mask_req
              Address Mask Request. Averiguar la mascara de red  para  la  red
              local actual. Este tipo ICMP es de informacin.

       Las opciones pueden ser cualquiera de las siguientes:

       -n     No usar resolución DNS de nombre de host.

       -i interfaz
              Nombre  o  dirección IP del interfaz en el que escuchar paquetes
              respuesta.

       -S direccin
              Dirección IP a usar como origen del paquete ICMP.

       -T segundos
              Tiempo de espera en segundos para leer  la  respuesta.  Solo  es
              válido   para   ICMPs   de  informacin  salvo  el  tipo  Router
              Advertisement (-rta).  Por defecto es  de  10  segundos.  Si  se
              indica 0 no se lee la respuesta. Mirar la opción -m.

       -lt, --lifetime segundos
              Tiempo  de vida en segundos de un anuncio de router. Válido solo
              para Router Advertisement (-rta). Por defecto son 1800  segundos
              (30’).

       -gw, --gateway direccin
              Host  que  actuará  como  pasarela  de  ruta en un ICMP Redirect
              (-red). Por defecto será la dirección de spoof (-S),  si  se  ha
              especificado,  o la dirección IP del interfaz de salida si no se
              ha especificado.

       -dest, --route_dest direccin
              Host o red destino de ruta en  un  ICMP  Redirect  (-red).  Esta
              opción es obligatoria si se envía un ICMP Redirect.

       -orig, --orig_host direccin
              Host  origen en la cabecera IP que se envía en la parte de datos
              de un ICMP de error. Por defecto será igual a la IP del host  al
              que se manda el paquete ICMP.

       -psrc, --port_src puerto
              Puerto  (tcp o udp) origen a usar en la cabecera IP que se envía
              en la parte de datos de un ICMP de error. Por defecto es 0.

       -pdst, --port_dst puerto
              Puerto (tcp o udp) destino a usar en la cabecera IP que se envía
              en la parte de datos de un ICMP de error. Por defecto es 0.

       -prot, --protocol nombre|nmero
              Protocolo  a  usar en la cabecera IP que se envía en la parte de
              datos de un ICMP de error.  Debe  ser  un  nombre  de  protocolo
              listado  en  el fichero /etc/protocols o un número de protocolo.
              Sólo están implementados tcp, udp e icmp, con  otros  protocolos
              el  resto  del campo de 64 bits se rellena con valores 0xFF. Por
              defecto es tcp.

       -id, --echo_id identificador
              Identificador de Echo usado en  la  cabecera  IP  que  se  envía
              cuando  es  un  ICMP  de  error y el protocolo de la cabecera IP
              (-prot) de los datos de error es icmp. Por defecto es 0.

       -seq, --echo_seq secuencia
              Número de secuencia de Echo usado en la cabecera IP que se envía
              cuando  es  un  ICMP  de  error y el protocolo de la cabecera IP
              (-prot) de los datos de error es icmp. Por defecto es 0.

       -p patrn
              Patrón de datos a enviar en un Echo Request (-echo).

       -s bytes|max
              Cantidad de bytes basura que se enviarán  en  cualquier  paquete
              ICMP. Con max se envía el máximo posible.

       -ptr, --pointer byte
              Puntero  a byte erróneo en un paquete ICMP indicando un problema
              en un parámetro. Válido sólo  para  el  tipo  Parameter  Problem
              (-param).

       -R     Usar la opción IP Record Route en el paquete ICMP.

       -F bytes
              Fragmentar el paquete ICMP en fragmentos de bytes bytes.

       -x, --xcode cdigo|num|max
              Código  de  ICMP  enviado.  Código  cdigo válido para los tipos
              Destination Unreach  (-du),  Redirect  (-red)  y  Time  Exceeded
              (-tx).

              Se  puede especificar un código numérico num para los tipos ICMP
              que no tienen (Echo Request, Information Request,  Address  Mask
              Request,   Router  Solicitation,  Router  Advertisement,  Source
              Quench, Parameter Problem y Timestamp).

              Si se  usa  max  se  enviará  un  código  ICMP  superior  a  los
              admitidos.

              La  siguiente  sección  CDIGOS ICMP enumera los tipos de código
              cdigo válidos.

CÓDIGOS ICMP

       Los cdigos válidos  para  usar  con  los  tipos  Destination  Unreach,
       Redirect y Time Exceeded son,

       - Para usar con el tipo Destination Unreach (-du):

       net-unreach (Net Unreachable) indica red de destino no accesible.

       host-unreach (Host Unreachable) indica host de destino no accesible.

       prot-unreach  (Protocol Unreachable) indica que el protocolo deseado no
       está a disposición en el host destino.

       port-unreach (Port Unreachable) indica que el puerto deseado en el host
       destino no está disponible.

       frag-needed  (Fragmentation  Needed  and Don’t Fragment was Set) indica
       que el paquete IP tuvo que ser  fragmentado  por  su  tamaño,  pero  el
       emisor  no  lo  permitió  por  medio  del  flag DF (DON’T FRAGMENT o NO
       FRAGMENTAR).

       sroute-fail (Source Route Failed) indica que no se pudo seguir la  ruta
       deseada que se indicaba en el paquete IP.

       net-unknown  (Destination  Network  Unknown) indica que no se conoce la
       red de destino.

       host-unknown (Destination Host Unknown) indica que no se conoce el host
       de destino, pero sí la red.

       host-isolated  (Source Host Isolated) indica que no se puede acceder al
       host de destino.

       net-ano (Communication with  Destination  Network  is  Administratively
       Prohibited)  indica  que  el acceso a la red de destino se deniega, vía
       cortafuegos o similar, por parte del receptor.

       host-ano  (Communication  with  Destination  Host  is  Administratively
       Prohibited)  indica  que  el  acceso al host de destino se deniega, vía
       cortafuegos o procedimiento análogo, por parte del receptor.

       net-unr-tos (Destination  Network  Unreachable  for  Type  of  Service)
       indica  que  no  se  puede  acceder  a la red de destino con el tipo de
       servicio (TOS, type of service) solicitado.

       host-unr-tos (Destination Host Unreachable for Type of Service)  indica
       que no se puede acceder al host destino con el TOS solicitado.

       com-admin-prohib (Communication Administratively Prohibited) indica que
       un router no puede encaminar un paquete por filtrado administrativo.

       host-precedence-viol  (Host  Precedence  Violation)   indica   que   la
       precedencia IP del paquete original no está permitida.

       precedence-cutoff  (Precedence  cutoff  in  effect)  indica  que  se ha
       intentado enviar un paquete con un nivel de precedencia IP menor que el
       mínimo impuesto por los administradores.

       - Para usar con el tipo Redirect (-red):

       net  (Redirect  Datagram  for the Network) indica que el destino es una
       red.

       host (Redirect Datagram for the Host) indica que el destino es un host.

       serv-net (Redirect Datagram for the Type Of Service and Network) indica
       que el destino es tipo de servicio y red.

       serv-host (Redirect Datagram for the Type Of Service and  Host)  indica
       que el destino es tipo de servicio y host.

       y

       - Para usar con el tipo Time Exceeded (-tx):

       ttl  (Time to Live exceeded in Transit) indica que el tiempo de vida en
       la cabecera de un paquete IP se ha agotado.

       frag (Fragment Reassembly Time Exceeded) indica que los  fragmentos  de
       un paquete IP no han podido ser reensamblados.

TÉCNICAS DE FINGERPRINTING

       Con  la  opción  -O  SING  usa pequeñas técnicas de ’fingerprinting’ de
       Window$ y Solaris. Para distinguir entre hosts Window$ y  el  resto  de
       SSOO  Ofir Arkin ha descubierto un sencillo método: En viando un código
       ICMP distinto de 0 en un Echo Request un SO Window$ box responde con un
       código  de  0  mientras  que  los otros SSOO no cambian el código ICMP.
       Mirar la sección VER TAMBIÉN.

       Con sistemas Solaris SING utiliza un método descubierto por mi:  Si  se
       envía  un  paquete fragmentado de Addres Mask Request cualquier sistema
       Solaris (testeado desde 2.5.1 a Solaris8 Intel &  SPARC)  responde  con
       una máscara de red de 0.

       Mirar la sección EJEMPLOS para ver ejemplos.

TÉCNICAS DE EMULACIÓN

       Con  la  opción  -M  SING  intenta emular cierto SO. Por el momento los
       únicos valores admitidos son para  emular  Window$98/Window$NT4  (valor
       win),  UNIX  (valor  unix),  Linux  (valor linux), Cisco (valor cisco),
       Solaris (valor solaris) o Shiva  (valor  shiva).  Para  emularlos  SING
       cambia  su  modo  normal  de  operación  respecto  al TTL, al número de
       secuencia inicial ICMP, al identificador ICMP y a los datos que cada SO
       envía.  Estas técnicas se aplican sólo al usar los tipos Echo Request o
       Echo Reply.

CÓDIGOS DE RETORNO

       sing puede  ser  usado  de  una  forma  muy  sencilla  en  guiones  del
       intérprete  de  comandos  que  estemos usando. El programa devuelve los
       siguientes códigos al shell que le invocó:

       Valor  Significado
       -----  -----------
       0      Se ha recibido al menos 1 respuesta del host destino.
       1      Error general.
       2      Se ha enviado el paquete OK pero no se ha recibido respuesta.
       3      Sin memoria.

EJEMPLOS

       - Queremos saber si www.solarisbox.xx usa el SO  Solaris.  Si  lo  hace
       entonces se debería imprimir SOL! en cada una de sus respuestas:

       sing -mask -O  www.solarisbox.xx

       -  Saber  si  www.winbox.xx  usa  el  SO Window$. Si lo hace se debaría
       imprimir WIN! en cada una de sus repsuestas:

       sing -O  www.winbox.xx

       - En repuesta a un paquete enviado con origen en el puerto  TCP  100  y
       con  destino  en  el  puerto  90,  queremos  enviar  un ICMP Redirect a
       tontoligo.es para modificar su tabla de rutas con los siguientes datos:
       10.12.12.12  como gateway hacia el host death.es enmascarando el origen
       del paquete como originado desde el host infect.comx:

       sing -red -S infect.comx -gw 10.12.12.12 -dest death.es -x  host  -prot
       tcp -psrc 100 -pdst 90 tontoligo.es

       -  En  respuesta  a  un  paquete  ICMP Echo Request enviado con un ECHO
       REQUEST id 100 y un numero  de  secuencia  ECHO  REQUEST  90,  queremos
       enviar  un  ICMP Redirect al host almorranas.es para modificar su tabla
       de rutas con los siguientes datos: el host  pizza.death  como  pasarela
       hacia  el  host  death.es  enmascarando  el  origen  del  paquete  como
       originado desde el host infect.comx:

       sing -red -S infect.comx -gw pizza.death -dest death.es -x  host  -prot
       icmp -id 100 -seq 90 almorranas.es

       -  Queremos enviar un paquete ICMP Destination Unreach al host 10.2.3.4
       diciéndole que nuestro puerto TCP numero 20, conectado  con  su  puerto
       TCP 2100, es inalcanzable. Nos enmascaramos como el host 10.1.1.1:

       sing  -du  -S  10.1.1.1  -x  port-unreach -prot tcp -psrc 2100 -pdst 20
       10.2.3.4

       - Queremos enviar un paquete ICMP Destination Unreach al host  10.2.3.4
       diciéndole que el host inferno.hell y su puerto TCP 69, relacionado con
       su puerto TCP 666  es  inalcanzable.  Nos  enmascaramos  como  como  el
       gateway router.comx:

       sing  -du  -S  router.comx -x host-unreach -prot tcp -psrc 666 -pdst 69
       -orig inferno.hell 10.2.3.4

       - Queremos enviar un paquete ICMP Source Quench al host  ldg02.hell  en
       respuesta  a  un  paquete  destinado  al  host ldg00 con protocolo UDP,
       puerto origen 100 y destino  200.  Nos  enmascaramos  como  el  gateway
       10.10.10.1:

       sing  -sq  -S  10.10.10.1  -prot  udp  -psrc  100 -pdst 200 -orig ldg00
       ldg02.hell

       - Queremos enviar un paquete ICMP Time Exceeded al host  ldg02.hell  en
       respuesta  a  un  paquete  destinado  al  host ldg00 con protocolo UDP,
       puerto origen 100 y  puerto  destino  200.  Nos  enmascaramos  como  el
       gateway ldg04.hell:

       sing  -tx  -S  ldg04.hell  -x  frag -prot udp -psrc 100 -pdst 200 -orig
       ldg00 ldg02.hell

       - Queremos enviar un paquete ICMP Address Mask  Request  y  esperar  10
       segundos  para ver las respuestas. Enmascararemos el paquete con origen
       en 10.2.3.4 y lo mandaremos a la dirección 10.0.1.255:

       sing -mask -S 10.2.3.4 -to 10 10.0.1.255

       - Queremos enviar un paquete ICMP  Timestamp  al  host  sepultura.hell.
       Enmascaramos  el  paquete  como enviado por el host 10.2.3.1. Usamos el
       tiempo de espera por defecto, 5 segundos:

       sing -tstamp -S 10.2.3.1 sepultura.hell

       -  Queremos  enviar  un  paquete  ICMP  Information  Request  al   host
       nominas.hell.   La dirección origen sera nuestra propia dirección IP, y
       el tiempo de espera sera de 20 segundos:

       sing -info -to 20 nominas.hell

       -  Queremos  enviar  un  paquete  ICMP  Router  Solicitation  al   host
       vagos.hell.  La dirección de origen sera nuestra propia dirección IP, y
       el tiempo de espera sera de 20 segundos:

       sing -rts --timeout 20 vagos.hell

       - Queremos enviar un paquete ICMP Echo Request al host  vagos.hell  con
       un  el  patrón  de  datos  ’MiNombreEsGump’.  La  dirección origen sera
       nuestra propia dirección IP. El tiempo de espera para  leer  los  datos
       será de 2 segundos:

       sing  -data MiNombreEsGump -to 2 vagos.hell

       -  Queremos  enviar  un  paquete ICMP Echo Request a 10.12.0.255 con el
       siguiente patrón de datos:  ’D  E  A  T  H’  (espacios  inclusive).  La
       dirección  origen  la  enmascararemos como 192.168.0.255, y no queremos
       leer las respuestas:

       sing  -S 192.168.0.255 -data D E A T H -to 0 192.168.0.255

       - Queremos enviar un ICMP Destination  Unreach  al  host  destino.death
       pero  enviándolo  con  un  código ICMP superior a los legales añadiendo
       además 60K de datos basura:

       sing -du -x max -gbg 60000 destino.death

       - Queremos enviar  un  ICMP  Router  Advertisement  al  host  death.es,
       diciéndole  que los routers a usar son: router1.xtc con preferencia 20,
       router2.xtc con  preferencia  50  y  router3.xtc  con  preferencia  por
       defecto (0). Nos enmascararemos como el router routerpadre.xtc

       sing  -rta  router1.xtc/20  -rta  router2.xtc/50  -rta  router3.xtc  -S
       routerpadre.xtc death.es

       - Queremos enviar un  ICMP  Parameter  Problem  al  host  desgracias.es
       diciéndole  que  el  paquete  que  ha  enviado  al  host paleto.org con
       protocolo udp, puerto origen 13 y puerto destino 53, tiene un error  en
       el  byte  13  de la cabecera IP.  Además, le añadiremos todos los bytes
       basura posibles:

       sing -S paleto.org -param -ptr 13 -prot udp -psrc 13 -pdest 53 -gbg max
       desgracias.es

       - Queremos enviar un paquete ICMP Timestamp al host www.paletos.org con
       el código 38 en lugar del código (0) que llevaría normalmente:

       sing -tstamp -x 38 www.paletos.org

       - Lo mismo de antes sin el  código  38  y  usando  using  Loose  Source
       Routing entre los routers cisco, 10.13.1.1 y wakeup.man:

       sing -tstamp cisco@10.13.1.1@wakeup.man@www.hicks.org

       - Y ahora lo mismo pero con Strict Source Routing:

       sing -tstamp cisco!10.13.1.1!wakeup.man!www.hicks.org

       - Usar Record Route IP Option par aver la ruta hacia ftp.target.xx:

       sing -R p.target.xx

VER TAMBIÉN

       Postel,  John,  "Internet  Control  Message  Protocol  - DARPA Internet
       Program Protocol  Specification",  RFC  792,  USC/Information  Sciences
       Institute, September 1981.

       Mogul,   Jeffrey   and   John  Postel,  "Internet  Standard  Subnetting
       Procedure", RFC  950,  Stanford,  USC/Information  Sciences  Institute,
       August 1985.

       Braden,  Robert,  "Requeriments  for  Internet  Hosts  -  Communication
       Layers", RFC 1122, USC/Information Sciences Institute, October 1989.

       Deering, Stephen, "ICMP Router Discovery  Messages",  RFC  1256,  Xerox
       PARC, September 1991.

       Baker,  Fred,  "Requeriments for IP Version 4 Routers", RFC 1812, Cisco
       Systems, June 1995.

       Arkin,   Ofir,    "ICMP    usage    in    scanning",    http://www.sys-
       security.com/archive/papers/ICMP_Scanning.pdf, Sys-Security Group, July
       2000.

       El cdigo fuente de Linux, en especial todo lo referente al  código  de
       red, y principalmente lo referido al protocolo ICMP.

AUTOR

       El autor del programa ping fue Mike Muuss (¡buen trabajo!).

       sing    ha    sido    escrito   por   Alfredo   Andres   Omella,   Slay
       <aandres@s21sec.com>