elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 05:44  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits
| | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | |-+  Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] Ir Abajo Respuesta Imprimir
Autor Tema: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]  (Leído 33,585 veces)
sirdarckcat
Troll Buena Onda y
Moderador
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #225 en: 29 Noviembre 2009, 16:38 »

Les explicare porque este bug funciona... de una manera MUY SUPERFICIAL y tecnica.. parece que nadie termino entendiendo que paso y porque funciona xD asi que ahi va una brief explaination.

Pondre mas info en la wiki (y avisare cuando lo haga), pero mientras tanto..

Este NO ES EL UNICO bug de este tipo y estos problemas seguiran apareciendo no solo en SMF sino en todos lados que usen expresiones regulares en PHP con PREG con cosas tan sensibles como lo es parsear codigo que pasara a HTML.

Es una vulnerabilidad bastante complicada de entender... y cabe mencionar que por donde la veas es un dolor de cabeza.

Se llama ReDoS, (Regular Expression Denial of Service), fue presentada en Septiembre en OWASP 2009 - Israel.
http://www.checkmarx.com/NewsDetails.aspx?id=23

Basicamente la idea es abusar de la feature de backtracking de las expresiones regulares:
http://en.wikipedia.org/wiki/Backtracking

Voy a poner un ejemplo, la siguiente expresion regular:

Código:
([abc]+[def]|[cde]+[fgh])*i

lo que hace es buscar una cadena del tipo:
aaaadegafei
adadccfcfi
adi
cfi


Es muy facil generar ejemplos que funcionen con esta expresion regular, pueden probarlo en su navegador:
Citar
javascript:alert(/([abc]+[def]|[cde]+[fgh])*i/("adi"));

Ahora, el problema viene cuando una cadena NO coincide con dicha expresion regular como lo es:
adcd

el algoritmo en esos casos, cuando se da cuenta que la expresion regular no coincide, debe regresar a la ultima posicion que matcheo correctamente (recursivamente) y probar con la otra opcion (si es que hay).

es decir:
/([abc]+[def]|[cde]+[fgh])*i/("adcd") hace:
1.- a (coincide con primer caracter de primer grupo)
2.- d (coincide con segundo caracter de primer grupo)
-- entrando en repeticion -- *
3.- c (coincide con primer caracter de primer grupo)
4.- d (coincide con segundo caracter de primer grupo)
5.- [fin] (no coindide!! necesitamos una i, regresa a 4)
4.- (no hay mas opciones! regresa a 3)
3.- c (coincide con primer caracter de segundo grupo)
4.- d (no coincide!! regresa a 3)
3.- (no hay mas opciones! regresa a 2)
2.- (no hay mas opciones! regresa a 1)
1.- (no hay mas opciones! regresa a 0)
no hay 0, no hay match.

ahora, asi es como funciona un engine de expresiones regulares.. y si vemos esta expresion regular en especifico, podemos ver que hay un problema.
([abc]+[def]|[cde]+[fgh])

los strings:
cf
ccccccccccf
cfcf
cccf

etc..

coinciden con ambos grupos ([abc]+[def] y [cde]+[fgh]), ahora porque esto es relevante?

porque el siguiente string:
cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfQ

no va a matchear, pero el parser tiene que probar todas las opciones posibles para estar seguro.

1.- c (coincide con primer caracter de primer grupo)
 2.- f (coincide con segundo caracter de primer grupo)
 -- entrando en repeticion -- *
 3.- c (coincide con primer caracter de primer grupo)
 4.- f (coincide con segundo caracter de primer grupo)
 -- repeticion --
5.- c (coincide con primer caracter de primer grupo)
 6.- f (coincide con segundo caracter de primer grupo)
 -- repeticion --
etc..
--repeticion--
50.- c (coincide con primer caracter de primer grupo)
 51.- f (coincide con segundo caracter de primer grupo)
52.- Q (no coincide, regresa a 51)
51.- (no hay mas opciones, regresa a 50)
50.- c (coincide con primer caracter se segundo grupo)
 51.- f (coincide con segundo caracter de segundo grupo)
52.- Q (no coincide, regresa a 51)
 51.- (no hay mas opciones, regresa a 50)
 50.- (no hay mas opciones, regresa a 49)
 49.- (no hay mas opciones, regresa a 48)
48.- c (coincide con primer caracter de segundo grupo)
 49.- f (coincide con segundo caracter de segundo grupo)
50.- c (coincide con primer caracter de primer grupo)
 51.- f (coincide con segundo caracter de primer grupo)
 52.- Q (no coincide, regresa a 51)
51.- (no hay mas opciones, regresa a 50)
 50.- c (coincide con primer caracter se segundo grupo)
 51.- f (coincide con segundo caracter de segundo grupo)
52.- Q (no coincide, regresa a 51)
 51.- (no hay mas opciones, regresa a 50)
 50.- (no hay mas opciones, regresa a 49)
 49.- (no hay mas opciones, regresa a 48)
48.- (no hay mas opciones, regresa a 47)
...
etc..

como ven, el hecho de que cf coincidiera en 2 grupos, hizo que el engine repitiera la comparacion en 50 y 51, y luego, en 48 y 49.. lo que hizo que 50 y 51 se repitieran de nuevo.

Ahora, esto hace que 50 y 51 se re-prueben 2 VECES cada que 48 matchee, y 48 va a re-probarse 2 VECES cada que 46 matchee (aqui van 2*2 = 4 veces paraa 50/51), y 46 se re-probara 2 VECES cada que 44 matchee, lo que hace 50 (2*2*2), etc..

eso se repite 25 veces:
2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2=16,777,216

ahora, esto es nadamas la cantidad de veces que matcheara 50/51, ahora hay que sumar la cantidad de veces que matcheara 48/49
2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2=8,388,608

etc.... esto es a lo que en algoritmia se le llama un problema de complejidad exponencial, y hace que sea bastante tardado de resolver.

ahora, aqui estamos explotando un bug en una expresion regular que trata de detectar URLs... www.a((((((((((((((((((((((((((((((((((((((((((((.

donde "(" toma el papel de "cf" en nuestro ejemplo anterior.

en PHP, PREG va a suspender la ejecucion despues de N iteraciones y alterara la memoria donde esta almacenada la variable de tal forma, que se borraran los ultimos 3 bytes dentro de esta.

Esto tiene repercusiones bastante malas a largo plazo, como lo podemos ver, y se debe tener mucho cuidado...

Recomendaciones.. lean el PDF, y aprendan a detectar ReDoS y evitenlas en su codigo!

Saludos!!
 
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #226 en: 29 Noviembre 2009, 16:40 »

Y como supiste que era ESA la cadena "rara".. porque, las probabilidades de que CUALQUEIR OTRA sea la cadena rara, son: INFINITAS..
Como has descubierto que era esa la cadena que jsuto daba ese error extraño?

Esto lo coloque antes de que Sirdarckcat coloque todo eso..
« Última modificación: 29 Noviembre 2009, 16:44 por Skeletron » En línea

NikNitro!


Desconectado Desconectado

Mensajes: 807


Galletaaa!!!


Ver Perfil
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #227 en: 29 Noviembre 2009, 16:46 »

guau, cuanto sabes SDC.... si sabes cocinar me caso contigo :P :laugh: :laugh:

S@lu2
En línea


Entra en mi blog ahora. Diario de abordo de un teclado de ordenador Actualizado sm
MonzterKuki.


Desconectado Desconectado

Mensajes: 380



Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #228 en: 29 Noviembre 2009, 16:46 »

Eres Gay? :o(sin ofender)

xD
En línea

Es Mejor Ser querido que temido.
seclogman

Desconectado Desconectado

Mensajes: 269


l0gbyte


Ver Perfil
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #229 en: 29 Noviembre 2009, 17:01 »

Repito


 lo he probado en algunos smf de la misma version, y en algunos no ha funcionado. ¿ a que puede ser debido ?


PD: maravillosa explicacion sdc

saludos!!
En línea





Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #230 en: 29 Noviembre 2009, 17:07 »

Me hubiese gustado entenderlo...
Es muy dificil entender que algo busca comparaciones en un conjunto de letras, como una maquina de turing, cuando no sabes de donde vienen, ni donde van, ni con que parametros base busca que como donde cuando....
En fin.. lo mio no es la seguridad :)
En línea

yasión

Desconectado Desconectado

Mensajes: 48

‮‮


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #231 en: 29 Noviembre 2009, 17:33 »

Pues me ha dejado esto...  :o :o
Algo había intuido, pero me ha sorprendido saber porque sucede realmente. Ahora tocará leer un buen rato y probar...=P

@Hwfr0ze‪: Pues habiendo leído esto lo primero que se me ocurre es que dependerá del servidor (algunos aguantarán más que otros), así que haciendo que tenga que evaluar todavía más casos probablemente funcione. De todos modos tendré que probarlo.

Saludetes!!
En línea

NikNitro!


Desconectado Desconectado

Mensajes: 807


Galletaaa!!!


Ver Perfil
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #232 en: 29 Noviembre 2009, 23:08 »

Eres Gay? :o(sin ofender)

xD

[nolistentoSDC]Que vaa, si tengo novia y too xDD pero con tal de aprender, nos hacemos un amor platónico y qu eme enseñe de too que es mas comodo que buscar:P[/nolistentoSDC]

S@lu2
En línea


Entra en mi blog ahora. Diario de abordo de un teclado de ordenador Actualizado sm
.;.


Desconectado Desconectado

Mensajes: 354


Ver Perfil
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #233 en: 29 Noviembre 2009, 23:32 »

Citar
www.a(((((((((((((((
En línea
jdc


Desconectado Desconectado

Mensajes: 3.253


janito dos cuatro...


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #234 en: 30 Noviembre 2009, 00:25 »

Se puede seguir probando cosas en este post?
En línea

anarquistadel89

Desconectado Desconectado

Mensajes: 158



Ver Perfil
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #235 en: 30 Noviembre 2009, 00:49 »

Me hubiese gustado entenderlo...
Es muy dificil entender que algo busca comparaciones en un conjunto de letras, como una maquina de turing, cuando no sabes de donde vienen, ni donde van, ni con que parametros base busca que como donde cuando....
En fin.. lo mio no es la seguridad :)

estamos iguales  :-\

Habra que leer mas xD
En línea

WHK
吴阿卡
Moderador
***
Desconectado Desconectado

Mensajes: 4.113


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #236 en: 30 Noviembre 2009, 04:58 »

Citar
Se puede seguir probando cosas en este post?

Mira, puedes utilizar xampp xD
http://www.apachefriends.org/en/xampp-windows.html

El concurso ya terminó.
En línea

Mi foro Ultra Off-Topics: http://whk.drawcoders.com/foro/

Gracias a todos! Good bye!
sirdarckcat
Troll Buena Onda y
Moderador
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #237 en: 30 Noviembre 2009, 17:23 »

pzzzz ya lo medio parcheamos en el foro...

pero el parche me da tanta pena que mejor esperen a que SMF saque el suyo xDDD jajjaja

nah.. es este..
Código
$data = preg_replace(array('~(?<=[\s>\.(;\'"]|^)((?:http|https|ftp|ftps)://[\w\-_%@:|]+(?:\.[\w\-_%]+)*(?::\d+)?[^\s\[\(<]*)~i', '~(?<=[\s>(\'<]|^)(www(?:\.[\w\-_]+)+(?::\d+)?[^\s\[\(<]*)~i'), array('[url]$1[/url]', '[url=http://$1]$1[/url]'), $data);

pero no se... me da miedo que tenga algun bug en la parte que busca comillas....

Saludos!!

--edit--
cambio el link de pastebin por el parche
« Última modificación: 30 Noviembre 2009, 17:31 por sirdarckcat » En línea

sirdarckcat
Troll Buena Onda y
Moderador
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Hackea a Elhacker.net ! [Finalizado - Ganador: yasión]
« Respuesta #238 en: 30 Noviembre 2009, 17:30 »

ah si! y el archivo a modificar es
http://code.google.com/p/smf2-review/source/browse/branches/smf1.x/Sources/Subs.php#1802

linea 1802...


En línea

Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Finalizado] Hackea a elhacker.net v2.0 (ganador: yoya) « 1 2 ... 9 10 »
Nivel Web
WHK 141 18,277 Último mensaje 27 Febrero 2012, 22:47
por ~ Yoya ~
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines