Copy Link
Add to Bookmark
Report
SET 031 0x06
-[ 0x06 ]--------------------------------------------------------------------
-[ Buscando informacion ]----------------------------------------------------
-[ by TheEnemi ]-----------------------------------------------------SET-31--
GANANDO INFORMACION
ThEnemI
consultas, dudas, criticas... <thenemi@hotmail.com>
/////////////////////////////////////////////////////////////////////////////
Buenos dias/tardes/noches. Como ya viene siendo habitual, antes de empezar,
explicare el proposito con el que escribi este articulo (luego para lo que se
use es otra cosa)
La idea de este texto es, que el individuo que quiera hackear algo, sepa por
donde hacerlo, es decir, que antes de atacar sepa contra que se enfrenta.
Ultimamente me encuentro con personas que se bajan un programa de ultima
generacion para su windows, que les han dicho que sirve para tal cosa, y se
ponen a usarlo. Pues a ver si con este documento consiguo que se cambien las
preguntas de "quiero hackear la web de mi pueblo" por algo como "busco un bug
para la version x de apache" (algo es algo)
* Por que analizar y obtener informacion de un sitio?
- Pues o porque eres curioso, o porque eres un consultor de seguridad,
un hacker, o porque te aburres y esta lloviendo.
Como ya sabes, lo que hagas con esto es cosa tuya.
Y ahora si, empezamos.
/////////////////////////////////////////////////////////////////////////////
ESQUEMA
1. Ganando informacion en servidores web
A) ciberia.yai.com/pepito
B) www.pepito.com | hotelespepito.com (aqui es donde mas chicha hay)
C) pepito.es.vz
*notese que todas las webs que contienen la palabra pepito estan inventadas,
pero quizas existen
2. Ganando informacion en toda clase de maquinas (principalmente ordenadores)
(corto, idea general)
3. Ganando informacion en cuentas de correo (muy corto :P)
// fin del esquema -->
1. Ganando informacion en servidores web
===========================================
Para que quede todo claro, procurare poner siempre ejemplos, y resultados
reales, actuales, pero ligeramente modificados.
Como la mayoria de vosotros esta pensando en webs, decir que no es lo
mismo analizar una pagina personal (ciberia.yai.com/pepito) que otra del estilo
www.paginadepepito.com, o un dominio de tercer nivel (paginadepepito.es.vz)
Por eso las tratare en distintos apartados.
Hay que ponerse en situacion del administrador,(pepito en este caso), pensar
como organizaria la pagina, y que tendria que hacer si quiere cambiar la
pagina.
A) ciberia.yai.com/pepito
En el primer caso, pepito teclearia en su navegador, www.yai.com. Una vez
que ha cargado la pagina, iria a la seccion de identificacion, pondria su
nompre de usuario (pepito), y su contrase¤a (******) Ya dentro, eligiria
la seccion de dominio web (si la hay) y desde el panel de control que yai
haya puesto a su disposicion, haria los cambios.
Normalmente, yai.com no solo dispondra de un servicio de alojamiento de
paginas gratuito, sino que pondra, amablemente, a disposicion del cliente,
una cuenta de correo y vaya usted a saber que cosas mas. Por lo tanto, si un
atacante consiguiera hacerse con la contrase¤a de pepito, tendria acceso a
su correo, espacio web...
Bueno a lo que ibamos. Puede darse el caso de que yai.com disponga de un
servidor ftp, y que le de a pepito una cuenta para que pueda subir sus
paginas.
Nosotros, mentes enfermas, queremos saber como actua pepito si quiere
actualizar su web. Queremos datos. Pues nada, como el portal yai.com nos
ofrece alojamiento gratuito (webalemnte hablando), nos creamos una cuenta,
una pagina, y vemos como funciona.
A la hora de crear la cuenta, no seais burros y dejeis la direccion de
correo real, a no ser que querais probar el filtro antispam que teneis
(porque lo teneis).
Con la cuenta creada, y una vez identificados, nos damos una vuelta por el
portal de yai.com. Vemos si se puede subir por ftp (si se puede lo hacemos),
todas las chuminadas que tenga...
Alguno ha puesto cara rara cuando ha leido lo del ftp. Tranquilos, porque
todavia no he dicho lo mas importante que teneis que hacer mientras navegais
por yai.com ...
Bajaros todos los manuales, howto, archivos de ayuda, informacion
tecnica... todo lo que podais. Seguro que yai.com tiene manuales que, aunque
no expliquen el fundamento, explican como subir tu web, cambiar tu
contrase¤a...
Bueno, pues lo siguiente que hay que hacer es leernos esos manuales, por
muy tontos que sean (o muy complejos). Quizas te encuentres con frases que
se parezcan a esto:
"importante: se recomienda que desactives esta opcion que viene por defecto,
porque si un atacante hace esto, podria entrar en tu cuenta", o
"si haces esto, un atacante podria conseguir esto otro", o
"guarde sus cookies en un lugar seguro, ya que contienen su contrase¤a"
No hace falta que diga que tendrias que hacer eso para tener la contrase¤a
de pepito, porque ya lo dice el manual.
Ademas, este texto habla de como ganar informacion. (leer titulo)
Pero nosotros somos hackers, y no nos basta con la informacion que nos den
en yai.com. Queremos mas.
Existe un gran truco para obtener datos. Y parece que poca gente lo sabe.
Pero lo voy a revelar. Se trata de una web que es capaz de responder a tus
dudas, tanto a las transcendentales, como a las que no lo son. Bueno, sin mas
preambulos...
---> www.google.com (sorprendido?)
Hacemos una visita a google, y en un recuadro que tiene
(que cosas) escribimos "fallos de seguridad en yai.com"
(sin las comillas, por supuesto) o "informacion tecnica de yai.com" o
"hackeo a yai.com" o cualquier cosa que se te ocurra.
[nota adicional: si explico cosas simples, es porque hay gente que lo necesita.
yo por ejemplo]
Podemos seguir comiendo informacion (por ejemplo cookies, que buenas estan)
si seguimos los pasos del apartado B
B) www.paginadepepito.com
Aqui ya no hay un portal que ofrezca nada.(vale, si, pero es distinto)
Ahora se trata de un servidor (IIS, apache...)
Lo primero de todo es averiguar la version del servidor. Nada, abrimos
nuestra shell (ms-dos en windows) y marchando una de:
telnet www.paginadepepito.com 80
(siendo 80 el puerto de la web).
Una vez conectados a pepito.com probamos a escribir
GET / y tambien GET / HTTP/1.1
lo que nos puede (puede) proporcionar datos del servidor.
Evidentemente, a la hora de conectar a traves de telnet, no solo esta el
comando GET, hay otros como PUT, HEAD, POST, DELETE, CONNECT... que dejo a
descubirmiento del intrepido lector (pista:unas lineas mas arriba hay una
direccion)
Ya le hemos metido mano a pepito.com gracias a los GET y demas
gaitas, vamos a hacer uso de un programa que vea las peticiones
servidor/cliente.
Yo he usado achilles, que viene con "documentacion" incluida (3 folios...)
Le diremos a nuestro navegador (por ejemplo, firefox) que se conecte a
traves de una direccion proxy (127.0.0.1, es decir, localhost) por un puerto
(por ejemplo, 6969) ejecutamos el achilles, activamos intercept mode,
y le decimos que escuche tanto client data como server data. Lo activamos, y
ahora cada vez que nuestro navegador haga una peticion a pepito.com veremos
todos los datos por achilles antes de que aparezcan en nuestro navegador
(cookies incluidas) y durante esa sesion podremos modificar desde el nombre
de nuestro navegador, las cookies que envia, formularios...
*Nota: no tienes por que usar el achilles. ni siquiera tienes por que usar
un programa. Simplemente prueba, y usa lo que mas te guste, convezca,
agrade, odies?
Ya tenemos todo el tinglado preparado. Solo falta introducir la web. Y como
dije que iba a poner ejemplos reales, aqui va. Me conecto a
www.hotelespepito.com, (para seguir la tonica del articulo. Evidentemente este
no es el nombre real, pero protege la identidad de los afectados)
Me doy una vuelta, veo ofertas, una visita virtual... unos 7 minutos de
ciber-rodeos. Mientras tanto, estamos grabando las conexiones. Vamos a
echarlas un vistazo:
--------=====================--------
HTTP/1.0 200 OK
Date: Sun, ?? 08 2004 0:28:42 GMT
Server: Apache/1.3.26 (Unix) tomcat/1.0 mod_ssl/2.8.10 OpenSSL/0.9.6d
Servlet-Engine: Tomcat Web Server/3.2.4 (JSP 1.1; Servlet 2.2; Java
1.3.1_04;
Linux 2.4.20-28.7smp i386; java.vendor=Sun Microsystems Inc.)
--------=====================--------
(la fecha ha sido ocultada, la hora modificada)
Pues definitivamente sabemos algo mas. Sun microsystems, Tomcat web Server
3.2.4 , Linux 2.4.20-28.7smp i386...
Hala, a tirar de google. llegamos a la pagina oficial
(http://jakarta.apache.org/tomcat/) con una seccion de bug reporting, FAQ,
guia de usuario, manuales, y datos en definitiva.
Siempre es interesante la seccion de instalacion, que podemos consultar para
ver la instalacion por defecto, carpetas de logs... Ademas te lo puedes
descargar, y ponerte a probar cosas en TU ordenador.
Bien, pues resulta que en apache, si pones una carpeta y no hay un archivo
que se llame index, te va a mostrar el contenido de esa carpeta si esta mal
configurado.Sabiendo esto, seguimos revisando los logs...
www.hotelespepito.com/visitaVirtual/hotelcaro/perocarodeverdad/dormitorio.htm
Probaremos a poner www.hotelespepito.com/visitaVirtual/
y el navegador nos muestra:
--------=====================--------
Parent Directory 06-Jul-2004 09:03 -
a*************/ 31-May-2004 09:59 -
lalal_bitch/ 20-Sep-2002 12:57 -
c?rdr??/ 19-Sep-2002 17:00 -
empalador/ 01-Apr-2003 19:21 -
grsan_ct*ran/ 20-Sep-2002 12:59 -
???iul_al30/ 29-Jan-2003 10:53 -
reding/ 29-Jan-2003 11:02 -
e???????lr/ 16-Dec-2002 15:46 -
vv_hotel1/ 10-Jul-2003 12:51 -
vv_hotel2/ 10-Jul-2003 12:49 -
vv_Grn/ 14-May-2003 18:42 -
vv_GrandFet/ 11-Jun-2004 09:47 -
vv_GrandNeva/ 24-Jun-2003 15:39 -
vv_RoyReso..> 28-May-2003 15:37 -
vv_a???untacana/ 01-Apr-2003 19:27 -
vv_caribbeanuyruC..> 05-May-2003 15:51 -
vv_rtyjiwejyillageP..> 05-May-2003 17:15 -
vv_carirtayrtyryue/ 27-Jan-2003 16:37 -
vv_embajador/ 01-Apr-2003 19:12 -
vv_fetyeryolata/ 07-Mar-2003 10:05 -
vv_fwrtytacana/ 27-Jan-2003 16:31 -
vv_frtyrtye?????.jar 10-Jun-2004 13:31 3.9M
vv_fuewtenwryra/ 10-Jun-2004 13:42 -
vv_jartywtyr/ 27-Jan-2003 16:39 -
vv_pwrtyyda/ 27-Jan-2003 16:39 -
vv_pertyr/ 27-Jan-2003 16:40 -
vv_retyra/ 18-Mar-2003 16:20 -
vv_sars/ 27-Jan-2003 16:41 -
vv_sesae5/ 31-May-2004 09:56 -
--------=====================--------
Los nombres han sido alterados. las vv son de visita virtual. Todas
las carpetas contienen archivos de fotos, y nada con sustancia. El .jar
es un archivo comprimido con mas de lo mismo, no accesible desde la web.
De hecho, es un archivo comprimido que contiene exactamente lo mismo que
una carpeta del mismo nombre. Seguramente lo descomprimieron, y no lo
borraron.
Sobre las fechas, juzgar vosotros mismos.
No hemos obtenido nada para tirar cohetes, pero bueno, es un comienzo. Por
lo menos tenemos un programa en javascript que le das una foto panoramica y
te la muestra, y gira, y gira, y gira...
Ademas, ya sabemos algo sobre su estructura de directorios.
Pero sigamos, que aun hay mas log....
www.hotelespepito.com/Pepito/web/.../index2.htm
volvemos a hacer el mismo truco de antes, vamos a la direccion
www.pepitohoteles.com/Pepito
y esta es la salida:
--------=====================--------
css/ lun, 05 jul 2004 14:52 CEST
images/ lun, 05 jul 2004 14:52 CEST
jscript/ lun, 05 jul 2004 14:52 CEST
web/ mar, 06 jul 2004 09:02 CEST
Tomcat Web Server v3.2.4
--------=====================--------
En css encontramos dos, uno llamado publico.css y otro admin.css. Vamos, que
si usamos achilles, y no nos gusta nuestra css, cuando llama a
pepito/publico.css basta con cambiarlo por pepito/admin.css. Ademas nos
da que pensar. Habra una pantalla de login para el admin en la web? ;)
En images, mas carpetas y mas archivos, que os las pego si quereis
--------=====================--------
01quienes/ lun, 05 jul 2004 14:52 CEST
02prensa/ lun, 05 jul 2004 14:52 CEST
03asociados/ lun, 05 jul 2004 14:52 CEST
04empleo/ lun, 05 jul 2004 14:52 CEST
05hoteles/ lun, 05 jul 2004 14:52 CEST
06destinos/ lun, 05 jul 2004 14:52 CEST
08registro/ lun, 05 jul 2004 14:52 CEST
actividades/ lun, 05 jul 2004 14:52 CEST
company/ lun, 05 jul 2004 14:52 CEST
index/ lun, 05 jul 2004 14:52 CEST
menuImagenes/ lun, 05 jul 2004 14:52 CEST
points/ lun, 05 jul 2004 14:52 CEST
proyectos/ lun, 05 jul 2004 14:52 CEST
quality/ lun, 05 jul 2004 14:52 CEST
Archivos:
FleHead.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
SiteCir.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
allInclusive2.gif 4.2 KB lun, 05 jul 2004 14:52 CEST
allinclusive.gif 1.7 KB lun, 05 jul 2004 14:52 CEST
barraBlanca.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
expired.gif 0.9 KB lun, 05 jul 2004 14:52 CEST
fleAbajo.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
fleArriba.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
flecha.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
flecha2.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
hom-barra.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
hom-fot1.gif 2.2 KB lun, 05 jul 2004 14:52 CEST
hom-logo.gif 1.3 KB lun, 05 jul 2004 14:52 CEST
homeImg.jpg 13.6 KB lun, 05 jul 2004 14:52 CEST
hotel-intro.gif 2.0 KB lun, 05 jul 2004 14:52 CEST
hotel-intro2.jpg 12.8 KB lun, 05 jul 2004 14:52 CEST
index5.gif 0.2 KB lun, 05 jul 2004 14:52 CEST
logonimg.gif 4.4 KB lun, 05 jul 2004 14:52 CEST
mas.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
menos.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
monitor.jpg 4.4 KB lun, 05 jul 2004 14:52 CEST
perroHombre.gif 5.1 KB lun, 05 jul 2004 14:52 CEST
royalClub.gif 1.5 KB lun, 05 jul 2004 14:52 CEST
royalClub2.gif 4.2 KB lun, 05 jul 2004 14:52 CEST
sombra.gif 1.8 KB lun, 05 jul 2004 14:52 CEST
spacer.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spa _HOTEL.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spa_HOTEL_.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spaEL_CITY.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spaceGRAND.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spaceROYAL.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
space_arra.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
spacnation.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
subir.gif 0.1 KB lun, 05 jul 2004 14:52 CEST
--------=====================--------
Y no he cambiado nada. Toma ya. Mas real imposible :P
Prosigamos. en la carpeta jscript, muchos *.js comentados en perfecto
castellano.
Llama doblemente la atencion el que pongo a continuacion. Primero porque
es el unico que esta comentado en ingles, (el resto estan comentados en
perfecto castellano) por lo que imagino que se usara en mas sitios.
Y despues por el nombre. Pero no os hagais la boca agua, que tampoco es
nada del otro mundo ;)
-----creditcard.js------
/*************************************************************************\
* CREDIT CARD VALIDATION.
*
* 1. MasterCard
* 2. Visa
* 3. American Express
* 3. American Express
* 4. Diners Club
* 5. Discover
* 6. JCB
*
/*************************************************************************\
<!-- Begin
var Cards = new makeArray(8);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = Cards[3];
Cards[4] = new CardType("DiscoverCard", "6011", "16");
var DiscoverCard = Cards[4];
Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
var enRouteCard = Cards[5];
Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var JCBCard = Cards[6];
var LuhnCheckSum = Cards[7] = new CardType();
/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function CheckCardNumber(form) {
var tmpyear;
if (form.CardNumber.value.length == 0) {
alert("Please enter a Card Number.");
form.CardNumber.focus();
return;
}
if (form.ExpYear.value.length == 0) {
alert("Please enter the Expiration Year.");
form.ExpYear.focus();
return;
}
if (form.ExpYear.value > 96)
tmpyear = "19" + form.ExpYear.value;
else if (form.ExpYear.value < 21)
tmpyear = "20" + form.ExpYear.value;
else {
alert("The Expiration Year is not valid.");
return;
}
tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
// The following line doesn't work in IE3, you need to change it
// to something like "(new CardType())...".
// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
alert("This card has already expired.");
return;
}
card = form.CardType.options[form.CardType.selectedIndex].value;
var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
"\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";
if (retval)
// comment this out if used on an order form
alert("This card number appears to be valid.");
else {
// The cardnumber has the valid luhn checksum, but we want to know which
// cardtype it belongs to.
for (var n = 0; n < Cards.size; n++) {
if (Cards[n].checkCardNumber(form.CardNumber.value, tmpyear, tmpmonth)) {
cardname = Cards[n].getCardType();
break;
}
}
if (cardname.length > 0) {
alert("This looks like a " + cardname + " number, not a " + card + "
number.");
}
else {
alert("This card number is not valid.");
}
}
}
/*************************************************************************\
Object CardType([String cardtype, String rules, String len, int year,
int month])
cardtype : type of card, eg: MasterCard, Visa, etc.
rules : rules of the cardnumber, eg: "4", "6011", "34,37".
len : valid length of cardnumber, eg: "16,19", "13,16".
year : year of expiry date.
month : month of expiry date.
eg:
var VisaCard = new CardType("Visa", "4", "16");
var AmExCard = new CardType("AmEx", "34,37", "15");
\*************************************************************************/
function CardType() {
var n;
var argv = CardType.arguments;
var argc = CardType.arguments.length;
this.objname = "object CardType";
var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";
this.setCardNumber = setCardNumber; // set CardNumber method.
this.setCardType = setCardType; // setCardType method.
this.setLen = setLen; // setLen method.
this.setRules = setRules; // setRules method.
this.setExpiryDate = setExpiryDate; // setExpiryDate method.
this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);
this.checkCardNumber = checkCardNumber; // checkCardNumber method.
this.getExpiryDate = getExpiryDate; // getExpiryDate method.
this.getCardType = getCardType; // getCardType method.
this.isCardNumber = isCardNumber; // isCardNumber method.
this.isExpiryDate = isExpiryDate; // isExpiryDate method.
this.luhnCheck = luhnCheck;// luhnCheck method.
return this;
}
/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
function checkCardNumber() {
var argv = checkCardNumber.arguments;
var argc = checkCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
var year = (argc > 1) ? argv[1] : this.year;
var month = (argc > 2) ? argv[2] : this.month;
this.setCardNumber(cardnumber);
this.setExpiryDate(year, month);
if (!this.isCardNumber())
return false;
if (!this.isExpiryDate())
return false;
return true;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
function isCardNumber() {
var argv = isCardNumber.arguments;
var argc = isCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
if (!this.luhnCheck())
return false;
for (var n = 0; n < this.len.size; n++)
if (cardnumber.toString().length == this.len[n]) {
for (var m = 0; m < this.rules.size; m++) {
var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
if (headdigit == this.rules[m])
return true;
}
return false;
}
return false;
}
/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else return false.
\*************************************************************************/
function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;
year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;
if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}
function isExpiryDate(month,year) {
today = new Date();
var y = today.getYear();
var m = today.getMonth();
if((parseInt(year,10)+2000) > y)
return true
else if ((parseInt(year,10)+2000) < y)
return false
else if ((parseInt(month,10)-1) < m)
return false
else
return true;
}
/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else return false.
\*************************************************************************/
function isNum(argvalue) {
argvalue = argvalue.toString();
if (argvalue.length == 0)
return false;
for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;
return true;
}
/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
function luhnCheck() {
var argv = luhnCheck.arguments;
var argc = luhnCheck.arguments.length;
var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
if (! isNum(CardNumber)) {
return false;
}
var no_digit = CardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;
for (var count = 0; count < no_digit; count++) {
var digit = parseInt(CardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return true;
else
return false;
}
/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/
function makeArray(size) {
this.size = size;
return this;
}
/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}
/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}
/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}
/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
function setLen(len) {
// Create the len array.
if (len.length == 0 || len == null)
len = "13,14,15,16,19";
var tmplen = len;
n = 1;
while (tmplen.indexOf(",") != -1) {
tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
n++;
}
this.len = new makeArray(n);
n = 0;
while (len.indexOf(",") != -1) {
var tmpstr = len.substring(0, len.indexOf(","));
this.len[n] = tmpstr;
len = len.substring(len.indexOf(",") + 1, len.length);
n++;
}
this.len[n] = len;
return this;
}
/*************************************************************************\
CardType setRules()
return the CardType object.
\*************************************************************************/
function setRules(rules) {
// Create the rules array.
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";
var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}
// End -->
-----creditcard.js------
Pues eso, comentado, para que queremos mas. Ademas, si no os habeis fijado:
-Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
Un departamento linguistico que ademas ha cambiado de web (:?)
(este archivo lo podriamos haber consegido tambien mirando el codigo fuente,
ya que en algun lugar existe algo como src=loquesea )
Seguimos. Entramos en la carpeta web, y sorpresa, nos muestra la pagina de
inicio.
Normal, hay un index.htm
Pero de vuelta al log: www.hotelespepito.com/Pepito/web/es_ES/....
Y nos encontramos con:
--------=====================--------
Subdirectorios:
associated/ lun, 05 jul 2004 14:52 CEST
company/ lun, 05 jul 2004 14:52 CEST
contact/ lun, 05 jul 2004 14:52 CEST
custrrelationship/ lun, 05 jul 2004 14:52 CEST
destinations/ lun, 05 jul 2004 14:52 CEST
employment/ lun, 05 jul 2004 14:52 CEST
hotels/ lun, 05 jul 2004 14:52 CEST
images/ lun, 05 jul 2004 14:52 CEST
login/ lun, 05 jul 2004 14:52 CEST
myprofile/ lun, 05 jul 2004 14:52 CEST
myreservations/ lun, 05 jul 2004 14:52 CEST
points/ lun, 05 jul 2004 14:52 CEST
pressroom/ lun, 05 jul 2004 14:52 CEST
quality/ lun, 05 jul 2004 14:52 CEST
whoarewe/ lun, 05 jul 2004 14:52 CEST
Archivos:
aperturas.html 2.8 KB lun, 05 jul 2004 14:52 CEST
aperturas_anterior.html 4.0 KB lun, 05 jul 2004 14:52 CEST
condiciones.htm 0.8 KB lun, 05 jul 2004 14:52 CEST
home.jsp 5.7 KB mié, 07 jul 2004 14:03 CEST
homeNavidad.html 0.3 KB lun, 05 jul 2004 14:52 CEST
jurisdiccion.htm 1.1 KB lun, 05 jul 2004 14:52 CEST
proyectos.htm 3.6 KB lun, 05 jul 2004 14:52 CEST
use_conditions.html 11.5 KB lun, 05 jul 2004 14:52 CEST
--------=====================--------
Y voy a dejar de comentar. No hace falta que diga que en login/ hay cosas
interesantes que home.jsp recibe parametros, que myprofile y myreservations
te muestran justamente eso...
Creo que al principio olvide decir que se podian hacer reservas. Bueno,
pues lo digo ahora. Con una tarjeta y dinero, se pueden hacer reservas en una
suite.
Como el log no da mas de si, cogi el manual, vi que habia carpetas donde
se guardaban logs por defecto, y alguna cosa mas, y...
La estructura del sitio quedaria mas o menos asi:
/
|--------/visitaVirtual
| |---/hotel1
| | | fotos..jpg
| | | masfotos.jpg
| | |___
| |
| |---/hotel2
| | |fotos..jpg
| | |masfotos.jpg
| | |___
| |
| |---archivo.jar
| |
|
|--------/Pepito
| |---/css
| | | admin.css
| | | visitante.css
| | |____
| |---/images
| | |---/fotos
| | | | una.jpg
| | | |___
| | |---/gif
| | |flecha.gif
| | |___
| |---/jscript
| | | algo.js
| | |creditcard.js
| | |___
| |---/web
| | |index.htm
| | | + archivos
| | |---/es-ES
| | | |---/login
| | | |---/myprofile
| | | |---/myreservations
| | | |---/...
| | | | archivos
| | | |
| | |---/?????
|
|--------/????
y mas...
Aun nos queda por hacer whois , que nos daria informacion sobre el dominio,
la direccion abuse@pepitohoteles.com, donde esta registrado, a nombre de
quien...
Tambien podriamos hacer un tracert (traceroute), un ping, un loqueseteocurra.
Es un buen comienzo. Pero podemos obtener mas enlazando con ganando
informacion en toda clase de maquinas. Ya llegara.
C) pepito.es.vz
Es decir, un dominio de tercer nivel. pues podemos usar el achilles(en
realidad basta con ver el codigo fuente), y descubiremos que pide los datos
a otra pagina: www.ciberia.yai.com/pepito. Es decir, que pepito.es.vz
apunta a www.ciberia.yai.com/pepito, y para tener datos podemos usar lo ya
explicado en el caso A y B. O tambien, podriamos conectarnos a
www.dominios-es-vz.com y decir que somos pepito, con la contrase¤a ******
y queremos que en vez de apuntar a www.ciberia.yai.com/pepito apunte a
www.ciberia.ya.com/peitonoesunbuenadmin. Pero en este articulo solo hablamos
de como ganar informacion.
2. Ganando informacion en toda clase de maquinas
=================================================
Si quieres saber como usar una batidora, tienes dos opciones.
A) Ensallo-Error
B) Te lees las instrucciones
Pues en un ordenador igual (ordenador, sistema operativo...) Lo primero
de todo es saber el Sistema Operativo del ordenador que vas a visitar, y
saber que puertos tiene abiertos. Pues creo que queda claro que hay que
hacer un escaneo de puertos (port scanning)
O te haces un programa, o usas el nmap o cualquier otro. Asi obtienes la
version del Sistema Operativo. Luego dependiendo de los puertos que tenga
abierto, haras una cosa u otra. Aconsejo que mires el 25 para ver si
usan sendmail, y que version (hay muchos bugs para el sendmail). El 21
(servidor ftp), y lo que se te ocurra (netbios, troyanos de los que pueda
estar infectado...) Vamos, que busques informacion. Y no te olvides de los
common password. Tambien ping, tracert, whois... lo tipico.
Sitios de interes:
-www.securityfocus.com
-www.securitytracker.com
-www.securiteam.com/exploits/
-www.hispasec.com
-www.cert.org
-www.k-otik.com/exploits/
-www.google.com (el mas importante)
Por ejemplo, antes vimos que www.hotelespepito.com usaba
Linux 2.4.20-28.7smp i386, si ademas el escaneo de puertos nos lo
ha confirmado, y vemos que tiene el puerto 25 abierto corriendo
una version del sendmail que tiene un bug...
Lee manuales, busca, y prueba. Si no doy nombres de port-scanners es para
que pruebes varios y escojas el que mas te guste
3. Cuentas de correo
=====================
Pues para obtener informacion sobre el usuario que usa una cuenta, mira
todo lo que puedas.
Es decir, que leas su perfil (si existe), su pregunta secreta tambien te
puede decir mucho sobre el... Mira si es accesible por el 25, busca bugs
Y aqui entra en juego sobre todo la ingenieria social. Preguntar haciendote
pasar por una tia (o en su defecto un tio) buenorra (o buenorro) siempre da
buenos resultados. Ingenieria social tambien es fake mail, que se esta
poniendo de moda hacer confesar datos simulando ser alguien de la empresa
(como se llamaba? :P)
Tampoco me voy a extender mucho, porque ya se ha hablado del tema. Ademas
creo haber leido en el foro que alguien ha escrito un articulo...
Solo recordar que si consigues la contrase¤a de pepito@yai.com probablemente
tambien tengas la de su servidor web. La gente es asi, usa la misma
contraseña para todo.
4. Talue
=========
Conclusion de este articulo: Hay cosas que podrian ser mas largas, otras
mas cortas, otras son innecesarias?, quedan algunas en el tintero... Pero
esperemos que le haya servido a alguien.
Como dije la ultima vez: "Hasta otra (si la hay), y ser buenos..."
*EOF*