-[ 0x05 ]-------------------------------------------------------------------- -[ ASALTO AL WEB DEL DINERO ]------------------------------------------------ -[ by FCA00000]-------------------------------------------------------SET-20- Esta historia es real. Podria agregar que como la vida misma, pero la vida no siempre es real. Su argumento: el robo a un banco. Los protagonistas: una persona (que llamaremos YO para mantener la tension), una entidad bancaria (denominado BANCO JONES para darle un toque gracioso), un poco de tiempo por perder, una aficion apasionante, una razon podero$a, y un mucho de tecnologia. La historia se cuenta en primera persona para que cualquier pardillo (en ingles, lamer) se crea capaz de hacerlo. Escenario: un cuarto de una persona juvenil. Atrezzo: ordenador DX2-66, Modem 14.4, Sistema operatorio Win98 (porque no?), Navegador IE4.0 (la version gratuita), compilador TurboC 2.0 , grep.exe , impresora matricial (y papel reciclado), Ambientacion musical: Sisters Of Mercy, The Cure, Wedding Present, Cramps, Decima Victima, Nikis, Aviador Dro, Paralisis Permanente, La Dama se Esconde Schubert, Brahms, Haendel, Bach, Prokofiev, Pachebel. Total 15 horas. Ambientacion luminosa: la que salga del monitor de 14'. Bombilla de 60W. Ambientacion alimenticia: Croissants, Nocilla y Te con limon Ambientacion olfativa: Ambi-pur de rosas. Es importante, aunque no lo creais. Calor: 25º (me gusta trabajar asi). Ambiente seco. Todas estas cosas influyen. Para hacer algo, lo mejor es hacerlo en condiciones idoneas. Por supuesto, tiene moraleja. Verano del 97. Recibo una carta del Banco JONES (en el cual tengo ahorros) en la que, entre otras informaciones inutiles, se me informa que por el hecho de tener una tarjeta de credito, tengo derecho a una cuenta de correo Internet. Llamo al numero de telefono (gratix) y, tras pedirme el numero de tarjeta, me dan una clave de acceso a Internet y una direccion de correo. Lamentablemente, no dan espacio para paginas Web. La pruebo, funciona bien, y la adopto como direccion de correo habitual. Diciembre del 97. Una nueva informacion. Ahora puedo realizar mis operaciones bancarias con un producto de tipo Home-Banking, o banco en casa. Lo visito, me doy de alta, y espero confirmacion. Como no llega, la reclamo, y me dicen que solo faltaba activarla. Por cierto, para verificar que de verdad quien llama por telefono soy yo, me preguntan cantidad de datos personales (para contrastarlos con los que ya tienen): Cuantos fondos tengo, fechas de contratacion, Numero de tarjeta, domicilio, ... En ese mismo instante, y gracias a que tengo 2 lineas, compruebo que funciona. Guais. Ahora puedo consultar el dinerito que tengo. Es facil de manejar, y parece ser seguro. Paso mucho tiempo sin usar el servicio. Julio del 98. Harto de tener que esperar a fin de mes para ver mis extractos, me conecto de nuevo al HB y como mi clave sigue funcionando, pues consulto mis datos. Bonito, facil y no demasiado lento. Agosto del 98. Escribo mi primer articulo en SET. Me gusta como ha quedado, asi que empiezo a pensar en otros temas interesantes para la audiencia. De paso intentare sacar provecho, ya sea aprendiendo mucho (este es el concepto idealista de un hacker), bien fastidiando a alguien (concepto que tiene la gente de un hacker), o bien ganando dinero y/o poder (concepto practico y materialista. A mi siempre me gusto practicar el materialismo) Noviembre del 98. Ya tengo la idea perfecta. Intentare ver cuanto de seguro es el banco JONES. Parece un proyecto sencillo, del que se puede sacar provecho. Primera sesion. Vispera de difuntos: Una conexion simple, navego por sus paginas, pierdo 10 minutos. Miro el cache de paginas visitadas, y me hago una idea. Entre las cosas destacables: -Los saltos de linea con CHR$(10), y no CHR$(13)+CHR$(10), asi que hay un UNIX de por medio -Algunos documentos tienen lo que indica que hay un Netscape Gold o similar. -Algunos no lo tienen, lo cual indica que hay varias herramientas de trabajo -Las validaciones de fechas, numero de cuentas corrientes, campos obligatorios y similares estan en JavaScript. Se tienen en cuenta los casos mas comunes, con tecnicas de programacion bastante simples, de alguien que trabaja con bases de datos. La gente de VisualBasic mete muchos mas controles, y los de C meten controles mas complejos de entender -Todas las imagenes se guardan en un mismo directorio -Hay varios programas que responden a las peticiones, todos en /cgi-bin -La comunicacion se hace a traves de una conexion segura, usando SSL.2 y superior, a traves del puerto (estandar) 443 -Todos los CGIs se hacen por el metodo POST -Los CGIs generan muchas de las paginas. Quiero decir que las paginas se generan en marcha. Esto implica un servidor potente, pensado en multiproceso para multiples peticiones -Las solicitudes que mando (peticion de extractos, fundamentalmente) incluyen varios campos ocultos, llama mucho la atencion uno que se llama SessionID. -Se me solicita nombre y password para acceder al servicio, otra vez para hacer transferencias, pero no para hacer consultas (una vez que estoy dentro) Segunda sesion. 7 de Noviembre: Ya se unos cuantos directorios, asi que me centro en ellos para sacar todo lo que pueda. Ademas, practico el tema de las transferencias, que es un sitio con muchas posibilidades. A continuacion detallo solicitudes (GET) y sus respuestas. Por si alguien no lo sabe, el protocolo HTTP consiste en una peticion de cliente (el navegador) de unos datos a traves del puerto seleccionado, normalemente el 80. El servidor escucha las peticiones, manda una solicitud de envio de respuesta, abre un nuevo puerto con el cliente (normalmente aleatorio, y >=6000 ) y le manda los datos. Si hay un proxy de por medio, los datos pueden resultar filtrados y/o almacenados. Asi que simplemente arranco la conexion, abro una ventana de MS-DOS, y escribo telnet www.bancojones.com 80 GET / Invalid request Vaya, mala suerte. Las cosas hay que pedirlas bien GET / HTTP 1.0 Netscape-Enterprise 3.0K Invalid request Bueno, algo es algo. La maquina usa un servidor de Netscape. GET /index.html HTTP 1.0 Bienvenido al Banco Jones y un monton de rollo mas. esto es lo mismo que se ve desde la ventana del navegador, con la opcion View Source. (por supuesto, lo que no se ve es que el servidor es de Netscape). Ya hay una ense~anza: un navegador intenta coger la pagina denominada / y luego intenta coger /index.html si la anterior respuesta es negativa. La pagina que se presenta no contiene mas que unos linkados a otras paginas; la que nos interesa se llama "Banca Electronica" Pongo el navegador para que me informe de cualquier cosa relacionada con la seguridad (modo paranoico), y salto a la pagina. El InternetExplorer me avisa de que voy a conectar con una pagina segura. Perfecto. Le pido ver el certificado, y este es: Numero de serie = xx:yy:zz: ..... (numeros ocultos por respeto al Banco Jones) Algoritmo hash = RSA/MD5 Fecha de inicio = Jueves, Abril 12, 1998 (datos cambiados) Fecha de finalizacion = Lunes, Agosto 16, 1999 (datos cambiados) Informacion del emisor O=VeriSign Trust Network (estos son autenticos) OU=VeriSign Inc. OU=VeriSign International Server CA - Class 3 OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)98 VeriSign Informacion del asunto (me encantan estas traducciones) C=es S=Madrid L=Madrid OU=DTS CN=www.bancojones.es Bueno, unas cuantas cosas para aprender: Caduca dentro de un a~o. A ver si entonces van a anular el servicio! El Centro Autentificador es Verisign. Alguien de renombre. Es un certificado de clase 3. O sea, de tipo medio. Por lo demas, parace que los datos son los estandar. Esto quiere decir que no han querido complicarse la vida. Bien, permito que el navegador acceda a la pagina. Veo que estan usando cifrado SSL.3 (es la mas alta que permite mi navegador) a traves del puerto 443. Nada fuera de lo normal. En pruebas posteriores compruebo que tambien puede usar SSL.2, pero no permite trabajar sin cifrado (en espa~ol, "encriptar" significa meter en una cripta). Entonces se me presenta la pagina de peticion de clave. Lo primero que se ve: la genera /cgi-bin/index.cgi se compone de 2 frames: /BJ/hostlogin.html y /BJ/security.html (por supuesto que BJ son las iniciales de BancoJones) /BJ/security.html contiene unas cuantas validaciones de fechas, algunas rutinas de proposito general, variables globales, y un par de linkados sosos. El lenguaje es JavaScript. El estilo de programacion es sencillo y directo. Se pueden evitar muchos pasos. Las variables tienen nombres muy representativos. Esta bien organizado, hecho primero el esquema sobre papel. las notas con *** son mias. El resto es el original
Banca Personalizada [Security] *** y aqui se acaba /BJ/hostlogin.html contiene tambien codigo JavaScript, un generador de paginas, llamadas a CGIs y, areas de click, comprobaciones, la peticion de usuario y password, y accesos a otras paginas. Aqui esta: Bienvenida a Banco Jones
  logotipo

bienvenida

*** no lo dije? un hermoso CGI *** interesante. hay un directorio /templates/Jonesnet1to1/ *** o sea, multitud de variables ocultas. El CGI debe ser bastante potente *** ah, aqui va el nombre. *** claro, y aqui la clave
   Usuario
   Clave

conecta
*** Demasiados hidden. Esto demuestra que el servidor no guarda muchos datos *** del cliente, sino que se transmiten en cada comunicacion. alta
demostracion

calidad

consultas técnicas

buzon joneslinea

pagina principal

ayuda *** o sea, que hay un directorio /BJ/ayuda


aenor *** no lo he dicho antes, pero el Banco Jones se precia de tener el *** certificado AENOR de calidad. Espero que para obtener este certificado *** la seguridad informatica no cuente mucho, porque pienso romperla. BANCO JONES es el primer banco en el mundo en obtener el Certificado de Calidad UNE-EN ISO 9002 para sus actividades de Banca por Internet *** si, y yo voy a arruinarselo iqnet

 
 

- Su oficina bancaria en Internet -

  • Posición Integral.

  • Cuentas:

    • Saldos y movimientos de los últimos 18 meses.
    • Solicitud de apertura de Cuenta.
    • Transferencias y Traspasos.
    • Domiciliación de Recibos.
    • Solicitud de Talonario.

  • Fondos de Inversión:

    • Saldos y movimientos.
    • Contratación.
    • Aportaciones, Reembolsos, Traspasos.

  • Tarjetas de Crédito:

    • Movimientos de los últimos 12 meses.
    • Solicitud de Tarjeta/Tarjeta adicional.
    • Cambio Modalidad de Pago.
    • Petición Número Secreto.

  • Tarjetas de Débito:

    • Movimientos de los últimos 12 meses.
    • Petición Número Secreto.
    • Solicitud Tarjeta/Tarjeta alternativa.

  • Planes de Pensiones:

    • Saldos y Movimientos.
    • Contratación.
    • Modificación de cuota.
    • Aportaciones extraordinarias.

  • Bolsa de Valores:

    • Saldos de las Custodias de Valores.
    • Cotizaciones.
    • Compra-Venta.
    • Consulta Situación Órdenes.
    • Información del Boletín Financiero.
    *** vaya, vaya, se pueden hacer cantidad de cosas.

  • Divisas:

    • Solicitud de moneda extranjera.

  • Informes de Mercados Financieros.


    Ademas, Banca Jones le permite PERSONALIZAR el estilo de sus páginas y la información bancaria de acuerdo a sus necesidades y preferencias.

    Introduzca su clave de acceso para entrar en Banca Jones y disfrutar de su nueva oficina en Internet. Si aún no es cliente, pulse ALTA para registrarse en Banca Jones. *** si, voy a disfruta bastante


    Si usted no está en su propio ordenador personal, para garantizar la confidencialidad de la información, le recomendamos borre la caché del navegador al finalizar la sesión.
    *** ;-}
  • una de las cosas que mas llama la atencion es Bienvenida a Banco Jones Observar esto --^-- . O sea, el codigo lo ha escrito una chica. Es importante. Mas cosas:
    Ya tenemos un bonito CGI que hace cositas. Como no puedo resistirme, y sigo conectado (telefonica ganando dinero) desde el navegador selecciono /cgi-bin/BJ/BJ.cgi a lo cual me responde presentandome de nuevo la misma ventana con la solicitud de usuario y password. Ya es hora de hacer cosas de verdad. Meto un nombre inventado, sin clave. Me responde que el usuario es incorrecto, o no esta dado de alta. Llamo a esto respuesta-3 Meto un nombre inventado, con clave inventada. Me responde que usuario no autorizado. Llamo a esto respuesta-2 Meto mi nombre de usuario, con clave incorrecta. Responde que la clave de acceso es incorrecta. Llamo a esto respuesta-1 Meto mi nombre de usuario, con clave correcta. Me presenta una nueva ventana. Dejo que se carge completamente. Esto lo llamo respuesta-0 Tras algunas pruebas, deduzco que el nombre del usuario y la clave son sensibles a las mayusculas, que los usuarios comunes (root, guest, ...) no estan en el sistema, y que el servidor tarda bastante en validarme. Con esto se aprenden varias cosas: Un metodo escrupuloso y concienzudo permite distinguir casos. El sistema es bastante rigido (al menos en este aspecto de la validacion) La clave mide entre 4 y 8 caracteres. Se establece un SessionID en cuanto conectas, aunque la clave sea incorrecta. El CGI es de proposito bastante general. Pues una vez que uso mi usuario, me dedico a hacer unas cuantas cosas. Lo primero es consultar mis cuentas, y acaba apareciendo esta pagina: Banca Jonesnet. Movimientos de Fondos de inversión
      Fondos de inversión    Saldo 
    FONDOS BUENOS FIM  ccccccc 197,00 PESETA ESPAÑOLA
    FONDOS MALOS FIM  ccccccc 9.341,00 PESETA ESPAÑOLA
    BOLSA   ccccccc 4.312,00 PESETA ESPAÑOLA
    SFOND  ccccccc 433,00 PESETA ESPAÑOLA
    ACCIONES  ccccccc 36.423,00 PESETA ESPAÑOLA
    DINERILLO  ccccccc 110,00 PESETA ESPAÑOLA


     Fondo de inversión DINERILLO
      Nº de oficina    Nº de operación 
    980 20387
      Revalorización    Rentabilidad año en curso 
     6440 0.64%
     Rentabilidad últimos 12 meses   Fecha último valor 
    0.64% 13-11-1998
      Nº unidades    Nª unidades retenidas 
    9  0
      Saldo final 
      6.440


    *** vaya, otro comentario. se agradece
     Avance de movimientos al 04/12/98 Fondo de inversión   ccccccc
     Concepto   Importe   Fecha de operación   Fecha valor   Nº unidades 
     /acciones 
    SUSCRIPCION 2,00 11-08-1988 11-08-1988 10
    REVALORIZ. 42,00 19-01-1998 19-01-1998 0
    SALDO FINAL 12,00 04-12-1998 04-12-1998 0


    *** vaya, texto en ingles. Seguramente de copiar & pegar. *** a ver si encuentro algun server que use esta nomenclatura. *** ya, los datos esperados Fondos Mixtos


    *** pues si que hace cosas la funcion GenLink !
    *** fin de la consulta Y ahora, una solicitud de transferencia. No la voy a incluir, porque es un poco larga, pero los datos que se mandan al servidor son: -cuenta origen (una de las mias), mediante el numero unico ccccccc -cuenta de destino, bien con el CCC (20 digitos) si es del Banco Jones, o bien con el CCC y el nombre del titular si es de otro banco. -se solicita de nuevo la clave. Supongo que para verificar otra vez. -el SessionID -el bj_EngineID Pero me dice que el servicio no esta disponible. Otro dia lo intentare. Aprovecho y me conecto con www.netscape.com, saco los manuales del Netscape Server, y aprendo basicamente como funciona. Por cierto, el 3.0K indica que es la version para NT y SUN, con el parche K-esimo (el mas reciente) Esto interesa: el administrador/a esta a la ultima. bueno. corto la conexion y estudio las trazas, logs y cache. Tercera sesion. 12 de Noviembre: El estudio del manual revela cosas interesantes: donde se guardan los certificados, y como se administra. Por supuesto no dice como crackearlo. Voy dispuesto a sacar todos los datos que pueda. Hasta ahora he hecho cosas de usuario, pero ya es hora de actuar 'a lo hacker': con cuidado. Ya tengo una idea del arbol de directorios del site: /BJ/templates/Jonesnet1to1/ /images/ /ayuda/ /images/ /ayuda/ /cgi-bin/BJ/bj.cgi /boletin.cgi /formularios.cgi /financiero.cgi /jonesnet/lineajones.pl /control-servicio.cgi /accionistas/cotizacion.cgi /index.cgi /fondos2.pl /enviacom.cgi /belec/cliente.cgi /democliente.cgi /director_cli.cgi /incidencias_cli.cgi /fon2/estef2.html /images/ /mc-icons/ Asi que, por ejemplo, engancho el navegador a www.bancojones.es/templates/Jonesnet1to1/ Y para gran sorpresa, ­me saca el directorio completo! pruebo con www.bancojones.es/mc-icons/ y tambien me saca el directorio mas osado, conecto con www.bancojones.es/cgi-bin/ pero me dice que no lo encuentra, es normal. O sea, cuando no hay un index.html saca el directorio. Esto esta perfectamente explicado en el manual del Netscape Server. Aviso para todos los administradores. Haced el favor de configurar bien las cosas, que la gente se pasa. En NetscapeServer, se usa "AutoDirectory=False", en NCSA-httpd, usar un .htaccess con deny=all para el directorio / y para CERN-httpd, usar Directory Listing 0 con Internet Information Server, por defecto esta a OFF en Notes Domino Server, no se puede activar. y en cada uno de los directorios, me llevo todos los archivos que puedo. Asi tengo todo lo que puedo: nunca se tiene suficiente informacion. Y por eso descubro /belec/seg.htm.tar Son 140 Kb que rapidamente cojo (aunque tardan en bajarse. recordar que tengo un modem de 14.4 ) Y corto la conexion. Me he bajado casi 1 Mg de ficheros, y todavia me queda. una vez bajado y des-tareado el seg.htm.tar , contiene Tar: blocksize = 32 drwxr-xr-x 1002/601 0 _correo/ rw-r--r-- 1002/601 2274 _correo/correo.html rw-r--r-- 1002/601 405 _correo/correo_fr.html rw-r--r-- 1002/601 2672 _correo/director.html rw-r--r-- 1002/601 3141 _correo/incidencias.html rw-r--r-- 1002/601 2786 _correo/infocom.html rw-r--r-- 1002/601 2700 _correo/sugecom.html lrwxrwxrwx 1002/601 0 _correo/.Config symlink to ../.Config rw-r--r-- 1002/601 2041 _correo/menu_excli.html drwxr-xr-x 1002/601 0 _correo_nocli/ rw-r--r-- 1002/601 1885 _correo_nocli/comentari.html rw-r--r-- 1002/601 412 _correo_nocli/correo_fr.html rw-r--r-- 1002/601 644 _correo_nocli/correo_inf.html rw-r--r-- 1002/601 1855 _correo_nocli/infocom.html rw-r--r-- 1002/601 903 _correo_nocli/nocli.html lrwxrwxrwx 1002/601 0 _correo_nocli/.Config symlink to ../.Config drwxr-xr-x 1002/601 0 images/ rw-r--r-- 1002/601 10528 images/bclientes.gif rw-r--r-- 1002/601 838 images/borrar.gif y algunos otros *.gif por supuesto que existen los directorios _correo y _correo_nocli, asi que esta claro que esto es una copia de seguridad. Lo que se aprende de esto es: -es un .tar, asi que el sistema es UNIX. casi seguro, SUN (S.O. Solaris) -hay un grupo con numero 1002 , y un usuario con numero 601 -tambien hay un grupo con numero 1010 , y un usuario con numero 10 -los permisos de los archivos son de lectura para todos, escritura solo para el propietario. Lo tipico. -hay un linkado a .Config, que se refiere a ../.Config Investigando este dato www.bancojones.es:443/.Config (equivale a https:www.bancojones.es/.Config) se tiene Index of /.Config/

    Index of /.Config/

           Name                   Last modified     Size  Description
    
    [DIR] Parent Directory [   ] 000000000.cnf 11-Jun-97 09:21 1K [   ] 000000000.err 20-Nov-98 18:41 99K [   ] 000000000.nop 22-Nov-98 06:29 1K [   ] 000000000.rep 22-Nov-98 06:29 142K [   ] 000000000.req 22-Nov-98 06:29 134K [   ] 043656461.cert 03-Oct-97 13:09 1K [   ] 043656461.cnf 03-Oct-97 13:09 1K [   ] 043656461.err 03-Oct-97 13:09 0K [   ] 043656461.key 03-Oct-97 13:09 1K [   ] 043656461.nop 03-Oct-97 13:09 1K [   ] 043656461.rep 03-Oct-97 13:09 0K [   ] 043656461.req 03-Oct-97 13:09 0K [   ] 043667674.cert 22-Aug-97 11:59 1K [   ] 043667674.cnf 18-Sep-97 13:05 1K [   ] 043667674.err 25-Nov-97 02:25 20K [   ] 043667674.key 22-Aug-97 11:59 1K [   ] 043667674.nop 25-Nov-97 02:21 1K [   ] 043667674.rep 25-Nov-97 02:22 46K [   ] 043667674.req 25-Nov-97 02:21 43K [   ] GetVariableEntorno 10-Feb-98 15:14 1K [   ] cacert.pem 03-Oct-97 13:09 1K [   ] cliente.err 03-Oct-97 13:09 0K [   ] entorno.plb 23-Sep-97 11:40 1K [   ] entorno_infovia.conf 22-Jun-98 09:39 1K [   ] entorno_internet.conf 22-Jun-98 09:40 1K [   ] pago.err 29-Oct-98 11:45 9K O sea, que dejan que cualquiera acceda a este directorio, y ademas hay varios nombres base: 000000000 , 043656461 , y 043667674 cada uno tiene un .cert, un .cnf, un .err, un .key, .nop, .req y .rep pues nada, me los llevo todos el .cert (del 043667674) tiene -----BEGIN CERTIFICATE----- MIICXTCCAcagAwIBAgIBAzANBgkqhkiG9w0BAQQFADA5MQswCQYDVQQGEwJFUzEY (lineas borradas para favorecer el anonimato) EOJPP/uvoLWoOnF+bnkVlV6YPQJD+B6Aaw53Ak0I9fPz -----END CERTIFICATE----- Mira que bien, esto es el certificado. No hay problema en que sea publico, pero no es muy adecuado. en fin, asi es la vida. Mal para unos, bien para mi. Por cierto, mide 825 bytes. Un numero raro. El .cnf contiene sserver=/C=ES/O=Banco Jones/OU=DTS_TPV/CN=tpvserv.bancojones.es/Email=tpvadmin@jones.com host=tpvserv.bancojones.es port=9997 nombcom=RECOLETOS CIA EDITORIAL S.A. cert=.Config/043667674.cert key=.Config/043667674.key CAcert=.Config/cacert.pem imglogo=/tpv/images/logobs.gif imgcom=/tpv/images/recoletos.gif email=graficos@recoletos.es nextcgi=/cgi-bin/tpv/cliente.cgi Vaya, esto es una configuracion de certificado. No parece ser el verdadero, sino una prueba, poque el nextcgi=/cgi-bin/tpv/cliente.cgi no lo he visto. en fin, es algo a tener en cuenta. Los otros .cnf tampoco parecen ser buenos; quizas sirvan para otros servicios. Veamos ahora el .key -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,3CA3A98CF9D9ECBC jZLLncDyfNt+kioDMemxaXbFndpCPR+IHdRqu8WfZEfaGHit38Bco701PALZ20G8 (lineas borradas para favorecer el anonimato) BPLOQcRLaG5g/8BtOoH0myOYOvJjnNCskcu75Y+f8UO4W/d0HSiAqQ== -----END RSA PRIVATE KEY----- Vaya vaya, que es lo que tenemos aqui! la clave privada! Pero root, como puedes dejar estas cosas asi. Cualquiera puede hacerse pasar por ti. O sea, que al final si que usa RSA (con MD5). El .nop contiene 4 numeros. parece un contador. El .err contiene lineas del tipo 971125:022533:11614:Operacion:Direccion email incorrecta. 970922:163245:15223:Operacion:Error al intentar conectar con el servidor de licencias en el puerto 9998. 971003:134604:13710:Operacion:Error al intentar conectar con el servidor tpvserv.bancojones.es. 970929:212912: 196:Operacion:Intento de doble operacion idcom=043667674 ref=Servicio de Graficos EXPANSION. 971118:173629: 3840:Operacion:No se pudieron abrir certificado .Config/043667674.cert o clave .Config/043667674.key. 970923:140616:22172:Operacion:Numero de tarjeta de credito no introducido. 970918:115806:19749:Operacion:Numero de tarjeta incorrecto. 971124:101746:17185:Operacion:Titular no introducido. He borrado las que decian lo mismo, pero a distintas horas. Al parecer, son los distintos errores que se pueden generar. Pero mas bien me parecen que son del dia de puesta en marcha del sistema, porque no creo que el "Error al intentar conectar con el servidor tpvserv.bancojones.es" lo tengan todavia sin solucionar. El .req y el .rep son bastante parecidos, y contienen entradas asi: 970917:195505:16513:043667674 :VENTA:000001:Lobo:lobo@kk.es:000000000005:Pruebas piloto TPV: :180 970918:094944: 6995:043667674 :VENTA:000002:Yo:g@pp.es:000000000005:Pruebas piloto TPV: :180 970918:121351:21454:043667674 :VENTA:000003:Jose:j@r.es:000000000000:Servicio de Graficos DIARIO EXPANSION: :644 970918:121423:21531:043667674 :VENTA:000004:Jose:j@r.es:000000000000:Servicio de Graficos DIARIO EXPANSION: :644 970918:121752:21950:043667674 :VENTA:000005:Jose:j@r.es:000000000000:Servicio de Graficos DIARIO EXPANSION: :644 970918:122304:22378:043667674 :VENTA:000006:Jose:j@r.es:000000000250:Servicio de Graficos DIARIO EXPANSION:620851:000 970923:092504: 8286:043667674 :VENTA:000007:G:g@pp.es:000000000005:Pruebas piloto TPV: :180 970924:122948:10171:043667674 :VENTA:000012:Sa:sa@sa.com:000000000001:Pruebas piloto TPV: :180 970925:110313: 2137:043667674 :VENTA:000013:E.M:E@R.ES:000000000250:Servicio de Graficos EXPANSION:047901:000 970929:093424: 6205:043667674 :VENTA:000014:Javier:j@kkk.es:000000000250:Servicio de Graficos EXPANSION:421906:000 Los nombres han sido cambiados, pero se aprecian varias cosas: aparece la hora, numero identificador, id_servicio(043667674), tipo (VENTA), nombre que ha introducido el usuario, direccion de correo, numero secuencial, solicitud, y algo que parece un codigo de error. Gracias a este listado obtuve gran cantidad (200) de nombres de usuario. El unico archivo que tiene fecha de hoy es 000000000.rep y 000000000.req, lo que me asegura que los otros son pruebas. Pero los nombres tambien valen. Usando mi cuenta de usuario, intente provocar peticiones erroneas para aparecer en estos listados, pero no lo consegui. Supongo que no solicite el servicio adecuado. El fichero cacert.pem contiene un certificado. Creo que es el propio de la entidad certificadora (para anidamiento de certificados), pero no tengo ninguna pista que lo asegure. simplemente aparece en el .cnf El cliente.err esta vacio. El GetVariableEntorno es un script que llama a entorno.plb El entorno.plb contiene un script en lenguaje perl. Simplemente sabe si vienes por Internet o por Infovia, para nombrar el servidor (jones.com o jones.inf). Vienes de infovia si tu direcion empieza por 10.xxx.yyy.zzz Lo interesante es que la primera linea es #!/usr/local/bin/perl Sin lugar a dudas, estoy en un UNIX, el administrador no se quiere complicar la vida usando chroot, y el estilo de programacion es diferente. Los datos los saca de entorno_infovia.conf o de entorno_internet.conf para decidir el nombre del servidor, el e-mail del admin, las direciones del gateway, el protocolo de SSL y otras direcciones de e-mail. Tambien aparece una referencia al directorio /tmp , ­como no se me habia ocurrido antes! Otra tecnica basica del hackeo es el trashing: buscar en la basura. Y la basura se guarda en /tmp/ Cuarta sesion. 20 de Noviembre: Lo primero, buscar en la basura. Apunto hacia https:www.bancojones.es/tmp/ Aqui encontre cosas interesantes: -un total de 7 ficheros , uno por cada dia de la semana. -un .tar llamado flexlang.tar -un par de scripts Todo esto eran los residuos de una aplicacion que toma las trazas (logs) de los sitios visitados, y hace estadisticas (el mas visitado, el que mas datos transfiere, el que mas esta en el cache del server, ...) Con todo esto obtuve esta informacion: -El servidor actua como firewall-proxy-cache tanto para los de dentro como para los de fuera -hay otro servidor interno: www2.bancojones.es que guarda las aplicaciones de ofimatica (BACKOFFICE). Tambien usa CGIs, pero el acceso solicita clave, como pude comprobar en mi siguiente conexion. -encontre unos ejecutables, concluyendo que el S.O es Solaris 2.5.1 para una Sparc. Formato Elf. Esto son buenas noticias, porque solo tengo que contactar con un ISP amiguete mio para que me deje probar la suya. -usan el programa flexlang (incluido con el soft del NetscapeServer) para hacer las estadisticas. -tienen logs de las peticiones entrantes y salientes. Cada dia tienen 1Mg de log. Tambien guardan los accesos de los radius. Por si no lo habia dicho, el Banco Jones tambien actua como ISP. -la gente trabaja a todas horas, incluso a las 4 de la madrugada -los empleados del banco Jones se conectan muchas horas al chat Pero empece a probar usuarios que saque del .req anterior. Unos de ellos me daban respuesta-2 (usuario desconocido o no autorizado), y algunas respuesta-1 (clave incorrecta) ­Y el corazon casi se me salta cuando recibo respuesta-0 ! Un usuario tenia la clave igual a su nombre. En este momento, YA habia cometido un delito. Dejare las implicaciones morales para el final. Pude ver su cuenta corriente, sus transacciones, ... Y tambien saque varias conclusiones: -No existe un metodo para revocar claves de usuarios si fallas muchas veces. -No existen normas de eleccion de claves. Solo entre 4 y 8 caracteres. -Las mayusculas y minusculas _si_ importan (esto ya lo sabia) -Hay gente tonta Al final, de 30 nombres probados, 4 eran validos pero desconocia la clave, y otro era un pardillo. exito parcial del 13% y total del 3% Asi que me hice un programa (Java es bueno para las comunicaciones) para sacar todos los usuarios. Total, 17 validos. Lamentablemente no saque ninguna clave mas. Pero ya habra tiempo para un ataque brute-force. (Nota: incluiria el codigo, pero es muy cutre) Tardo mas de lo esperado, porque la validacion en el servidor es muy lenta. Probe a coger /cgi-bin/ /cgi-bin/BJ/ /cgi-bin/BJ/index.cgi /cgi-bin/BJ/financiero.cgi pero no hubo suerte. A titulo formativo, tambien intente: /cgi-bin/BJ/financiero.c -> por si se habian dejado el fuente /cgi-bin/BJ/financiero.c~ -> por si se habian dejado una copia del fuente /cgi-bin/BJ/financiero.bak /cgi-bin/BJ/financiero.pl -> por si estaba en perl /cgi-bin/BJ/tmp/ -> por si trabajaba con temporales /cgi-bin/BJ/financiero. -> a ver que pasaba /cgi-bin/BJ/.htaccess -> listado de usuarios con privilegios, segun dice el manual del Netscape Enterprise Server /cgi-bin/../cgi-bin/ -> por si tienen el bug del .. /cgi-bin/BJ/? /cgi-bin/BJ/index.cgi? -> me respondio con la pagina de peticion de claves /cgi-bin/BJ/financiero.cgi? -> si fuera un ASP, me mostraria el codigo En todos los casos, la respuesta fue que el objeto solicitado no estaba en ese servidor. Lo peor es que supongo que aparecere en los logs. Pero con 1Mg de datos (2.5 pues era fin de semana), no creo que los miren. Tambien hice otra cosa: Me conecte como un usario valido (el mio), y solicite datos sobre una cuenta. Esto es del tipo POST al index.cgi con argumento 'xxxxyyyyaaabbbcccccccESPPESETA+ESPAÑOLA+++++++++++++++JONES+FBUENOS+FIMJONES+BUENOS+FIM++++++++++++++++++++++++++++++1995-12-1201001+++++++++130.877,00PPPPF' ademas del SessionID, bj_EngineID, y otros datos. Como fue bien, modifique para pedir 'xxxxyyyyaaabbbcccccddESPPESETA+ESPAÑOLA+++++++++++++++JONES+FBUENOS+FIMJONES+BUENOS+FIM++++++++++++++++++++++++++++++1995-12-1201001+++++++++130.877,00PPPPF' o sea, cambie ccccccc por cccccdd , a ver si asi conseguia acceder a otra cuenta. Pero no funciono. Me dijo que los datos eran erroneos. Supongo que con cada SessionID se obtiene un UserID que solo lo sabe el servidor, y con este numero se accede a los datos solicitados _del cliente_, por lo que no puedo ver (tan facilmente) los datos de otro. Bueno, esto es programacion basica. O quizas la combinacion xxxxyyyyaaabbbcccccdd no sea correcta, porque ningun usuario tenga ese numero. O quizas el dato del final de la cadena (el importe) se use como verificacion para los otros. como no conozco el importe, no puedo usar el numero, y tampoco al reves. Pero eso lo puedo solucionar: abro el navegador, me conecto como un usuario, accedo a los datos, y me guardo la peticion. Salgo, y vuelvo a entrar como otro usuario. llego hasta el mismo sitio, y entonces hago la peticion _anterior_. En teoria el sistema de privacidad me deberia impedir acceder a los datos... y asi es :-( O sea, el servidor guarda alguna relacion entre mi SessionId (u otro numero) y los datos a los que puedo acceder. Por cierto, no creo que pueda acceder a los datos de un usuario que no este dado de alta en el sistema: me explico: mantienen una base de datos con los movimientos de la gente que esta dada de alta, no de todos los usuarios del banco. Si fuera asi, necesitarian muchos megas (por otra parte, es un banco, y no creo que le importe poner un disco de 50 Gigas, que para SUN existen) Un poco decepcionado por mi intento fallado, corto la conexion Quinta sesion. 1 de Diciembre: He preparado un par de trucos, pero lo primero que hago es mirar la basura: en /tmp/ han desaparecido los archivos que habia, pero en cambio tengo Index of /tmp/

    Index of /tmp/

           Name                   Last modified     Size  Description
    
    [DIR] Parent Directory [   ] access-981112_235500 07-Dec-98 09:59 13M [   ] access-981114_235501 07-Dec-98 09:59 2M [   ] estadisticas_web 07-Dec-98 10:02 1K [   ] festivo 07-Dec-98 10:08 9K [   ] laborable 07-Dec-98 10:06 40K [DIR] tmp/ 08-Oct-98 12:23 1K El access-981112_235500 es un listado de las peticiones hechas al server. Por si alguien no se ha dado cuenta, son 13Mg ! Empiezo a bajarlo, para que que pinta tiene: format=%Ses->client.ip% - %Req->vars.pauth-user% [%SYSDATE%] "%Req->reqpb.proxy-request%" %Req->srvhdrs.clf-status% %Req->vars.p2c-cl% 183.74.4.225 - - [13/Nov/1998:23:55:31 +0000] "GET http://www.elpais.es/canal/elpais.cdf HTTP/1.0" 407 271 183.63.32.116 - - [13/Nov/1998:23:58:55 +0000] "GET http://channel.cnn.com/channel/cnn.cdf HTTP/1.0" 407 271 183.27.21.182 - lau1 [14/Nov/1998:00:06:02 +0000] "GET http://205.228.184.151:80/FIDO-1/BID-1/3932464-1/ccat.dat HTTP/1.0" 200 408 y muuuuchas lineas mas Que bien, incluso de explican como va el formato: -primero, la direccion ip del cliente -luego, el usuario -la fecha -la pagina requerida (junto con argumentos, y la version del navegador) -la respuesta del servidor (200=OK, 407=NoChange, ... ver manual de HTTP 1.1) -el numero de bytes recibidos Pues muy bien. Asi que puedo sacar nombres de usuarios internos al BancoJones, direcciones IP de sus maquinas, y cotillear lo que piden. Pero 13Mg es mucho. Incluso el de 2 Mg se me hace un poco grande. Ya ire a visitar a alquien que tenga una RDSI o algo mejor. Los archivos "festivo" y "laborable" contienen las estadisticas sacadas a partir de estos ficheros con el programa flexlang ¨Como lo he sabido? pues mirando el "estadisticas_web" #!/bin/csh #!/bin/csh if ($#argv == 0) then echo "" echo " se usa de esta forma: cmd fich_entrada fich_salida " echo "" ; exit 1 endif #/opt/ns-home/extras/flexanlg/flexanlg -n "www.bancojones.es" -x -r -i $1 -o $2 -c huok -t s10m10h10 -l c+30h+10 /opt/netscape/suitespot/extras/flexanlg/flexanlg -n "proxy inverso de tesoreria" -x -r -i $1 -o $2 -c huok -t s10m10h10 -l c+30h+10 #/opt/ns-home/extras/flexanlg/flexanlg -n "proxy inverso de bancojones" -x -r -i $1 -o $2 -c huok -t s10m10h10 -l c+30h+10 #/opt/ns-home/extras/flexanlg/flexanlg -n "proxy inverso de bancojones via internet" -x -r -i $1 -o $2 -c huok -t s10m10h10 -l c+30h+10 Vaya, vaya. codigo interesante. Un script. Asi que el shell habitual es csh. Y el soft del servidor esta instalado en /opt/netscape/suitespot en vez de en /opt/ns-home/ , como recomienda Netscape Segun el manual del Server, el comando flexlang permite varios argumentos: -n para el nombre del servidor (parecen usarlo como titulo) -x para que la salida quede en HTML (la verdad es que queda mas mono) -r para que traduzca numeros IP en nombres (no parece funcionar, o tienen bien instalado el Wins (para IP dinamicas) o el DNS (IP estaticas) -i archivo de entrada -o archivo de salida -c huok: total hits + total uniques URL + total unique hosts + total Kb -t s10m10h10: ultimos 10 segundos, ultimos 10 minutos, ultimas 10 horas -l c+30h+10: URL accedidas mas de 30 veces, hosts accedidos mas de 10 veces Por eso las estadisticas quedan tan bonitas. Solo les faltan colores. Vamos a detenernos aqui. Si quitamos los argumentos que hacen que quede mono, nos queda flexanlg -i $1 -o $2 que es un comando tambien valido. Pero que pasa si alimentamos este script con datos $1="/dev/nul" $2="/dev/nul; cp /etc/passwd ./passwd" Pues que queda el comando flexanlg -i /dev/nul -o /dev/nul; cp /etc/passwd ./passwd que se interpreta como 2 comando distintos: uno que no hace nada, y otro que copia el fichero de claves a este directorio (si tenemos privilegios) Solo se trata de que se pueda ejecutar: Nada mas facil. Creamos una pagina HTML (en local) que contenga
    (Por supuesto, no se pueden poner espacios, hay que sustituirlos por %20, pero asi es mas facil de leer) Y que pasa cuando la ejecutamos? Pues devuelve una respuesta diciendo que no se ha podido encontrar el objeto solicitado. Esto es bastante normal, dado que no se ha generado una pagina. Abro otra ventana, y hago GET /tmp Y para mi sorpresa descubro que no hay nada. Que habra pasado? Primero sospecho de los privilegios. No se bajo que nombre de usuario se esta ejecutando el servidor Web. Lo normal seria que fuera "nobody", tal como recomiendan miles de manuales, pero lo mas comun es que sea bajo el usuario "root", para que los administradores no se preocupen de los permisos. Tambien puede suceder (asi es en CER-httpd y NCSA-httpd) que, aunque el usuario propietario sea "root", luego se hace un setuid para cambiarlo. Otra posible causa es que no este usando el sitio correcto. Si el server tiene la opcion chroot (cambiar el directorio raiz), entonces todos los caminos absolutos se tratan como relativos, por lo que /etc/passwd acaba siendo /usr/Netscape/Server/etc/passwd , y este fichero no existe. O quizas es que el comando cp no esta en la ruta. Tambien podria pasar que no pueda ejecutar un programa que esta en /tmp O la peticion podria estar mal montada. La respuesta a todas estas preguntas la encontre acudiendo a alguien que tuviera un servidor igual, o, en su defecto, instalando yo uno. Una vez consegui esto (la semana siguiente), y sabiendo que hay 2 maneras de configurar los CGIs: -permitiendo solo unas extensiones: asi, los archivos *.EXE , *.pl , *.cgi deben ser ejecutados por el servidor, no permitiendo que el usuario los baje a su ordenador personal. -permitiendo solo un directorio: asi, todos los archivos de /cgi-bin/ (y los que cuelgan de este) deben ejecutarse. Pero claro, si el archivo flexlang esta en /tmp ,es porque el administrador los ejecuta desde una cuenta shell. Por tanto, la solucion estaba en ejecutar cualquier archivo de /cgi-bin , por supuesto, con una peticion POST Sabia unos cuantos archivos control_servicio.cgi index.cgi BJ/financiero.cgi BJ/BJregenera.pl BJ/bj.cgi boletin.cgi formularios.cgi financiero.cgi enviacom.cgi Si pudiera tener el fuente de alguno para ver si ejecutaban un shell ... Pues intento acceder a BJ/bj.c -> Fallo BJ/bj.c~ -> Fallo BJ/bj.pl -> Fallo BJ/bj.bas -> Fallo Y asi con muchos mas. En fin, puerta cerrada. En todos intente alimentarlos con una peticion que incluyera "; cp /etc/passwd ../tmp/passwd" , pero ninguno funciono. Deben tener activado el chequeo de no salirse de directorios. Como no me habia salido muy bien este intento, decidi dejar reposar el tema, e intentarlo de otra manera. Navegando, descubri que el Banco Jones tambien tiene una facilidad de busqueda para palabras claves. Asi, si pones "Bolsa", te muestra las paginas cuyo titulo (etiqueta en HTML) contiene la palabra "Bolsa". Pues que bien. A ver cuales tienen la palabra cgi ? bueno, pues salen 5. Ninguna de nuevo interes. Pero lo bueno es hay un motor de busqueda que accede a todas las paginas. Seguro que tiene acceso a muchas cosas. Vamos a ver que sale por aqui. Este sistema se basa en un software llamado Architext, creado por la casa excite. La direccion es www.atext.com, pero en seguida te lleva a www.excite.com (uno de los multiples buscadores). O sea, que se hicieron un spider (buscador, en la jerga) y ahora lo comercializan. Aprendi que te lo puedes bajar para probarlo. Bueno, son 2 megas. Hay versiones para todo, en particular para NT, Linux y Sun. Contienen 2 binarios de 1.7 Mg cada uno, herramientas de indexacion, manual, dibujos, interprete de perl, modulos en perl, y un interface para manejarlo desde la linea de comandos. Nada del otro mundo. El manual es ciertamente breve, El interface es bastante simple, y los modulos no hacen demasiadas cosas. Pero los ejecutables contienen muchas cosas; son el autentico corazon del Architext. No encontre ningun sitio com exploits, pero si que hay parches. Y porque existe los parches? pues porque los programas tienen fallos. Asi que consegui un par de parches (no hay mas), vi lo que cambiaban, y me ilusiono el comentario del principio: ## Unix Version Patch -- architext_query.pl ## This updated version of this library file removes ## a security hole that made shell-based hacking possible via CGI Vaya, parece que estan hablando de mi. Pero que querra decir shell-based ? Significa que necesitas tener un shell para atacar, o que un ataque posibilita un shell ? Ya lo veremos. Todos los *.pl ocupan unos 300 Kb de codigo en lenguaje perl , y no es precisamente facil de leer. Pero como yo lo que busco es un punto debil, busco exclusivamente los OPEN, EXEC, USE, y otras cosillas mas. la jerarquia del architext es: /Architext/ /Architext/collections/*.web -> referencias a ficheros a indexar /Architext/collections/*.idx -> bases de datos ya ordenadas /Architext/collections/*.conf -> configuracion /otros_archivos_internos /*.tmp -> indexaciones y busquedas solicitadas /Architext/perllib/ -> modulos en perl /Architext/perl.exe /Architext/AT-*.html -> paginas de entrada de datos, y de administracion /Architext/AT-*.cgi -> programas de busqueda, indexacion y mantenimiento. Hay muchas cosas que se podrian contar del Architext, y menciono algunas: -el directorio /Architext/ debe ser de lectura y escritura para el usuario que ejecuta el Web Server. O sea, "root" o "nobody" -Para que se ejecuten los *.pl deben ser ejecutados por el servidor. O sea, que (combinado con lo aprendido antes), deben moverse a /cgi-bin/ -Solo busca los titulos y palabras clave de las paginas, no los conenidos. O sea, si una pagina tiene <HTML> <title>Bank Hack Aprende como entrar en sistemas para ganar unas pesetas Y buscas "Hack" o "dinero", pues lo encuentra. Pero no encuentra "pesetas" -Tiene un poco de "Inteligencia". Si en una pagina de bicicletas aparece la palabra "rueda", deduce que estan relacionadas, y cuando buscas la palabra "rueda", te pueden aparecer paginas de bicicletas, aunque ni lo hayas buscado, ni aparezca la palabra "rueda". En fin, los scripts estan bien hechos, es dificil hincarles el diente, pero se aprende mucho perl (ese es el proposito del Hacking, no?) A cambio, no son muy seguros, porque es el propio binario es que se encarga de invocarlos o procesar su resultado, asi que forman un canal bastante ancho por el que colarse. Y aqui esta el hueco: el interprete de perl (que llamare perl.exe aunque en realidad se llama simplemente "perl") esta en un sitio que se puede invocar desde una pagina web. Este mas bien es fallo de la persona que lo instalo. Supongo que probo muchas cosas, y lo dejo asi. (En cuanto funciona, no lo toques) O sea, que existe /cgi-bin/perl.exe Mas claro: Por supuesto que hay que quitar los espacios y que que poner comillas simples (') en el comando, pero asi se entiende mejor. Y como lo de antes no funciono bien, pues lo voy a hacer de otra manera que me gusta mas: en vez de copiar el /etc/passwd, voy a mandarme otro por HTML: print "Content-type: text/plain", "\n\n"; open ( FILE, "../tmp/estadisticas_web" ) $contenido = print < /tmp/listado , y me lo traigo. Asi aprendo mucho del sistema. Por cierto, tienen una maquina mas que aceptable. Y tras esto, el mundo a mis pies. Saque la base de datos de usuarios, para sacar sus clave para usar sus cuentas. Pero esto es otra historia. Fin de la ense~anza. Quizas alguien se pregunte que hace el autor de este articulo ahora; pues lo mismo que antes: trabajo en una peque~a empresa de informatica, ganando un sueldo misero, pero con la satisfaccion de haber ense~ado a alguna gente como se hace para conocer la verdad que esta ahi afuera. O quizas no sea asi, sino que ahora estoy en el Caribe, disfrutando del sol y bebiendo mojitos hasta reventar. O quizas estoy en Alcala Meco, con Mario Conde, Barrionuevo y Pinochet. O todo esto es mentira y el Banco Jones ni siquiera tiene servidor Internet. O yo soy el administrador de www.bancojones.es y en cuanto probeis esto llamo a la BSA. Postdata: Con respecto a la filosofia hacker, yo me pregunto: se puede ser hereje? Todo eso del conocimiento, la informacion libre, paz y libertad suena bien, pero es mucho mas atractivo si se saca provecho.