Bypaseando cloudflare (Capa 7)

Iniciado por inzect02, Noviembre 12, 2014, 11:34:54 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 12, 2014, 11:34:54 PM Ultima modificación: Mayo 11, 2015, 01:20:56 PM por ANTRAX
Un poco de teoría:

Como sabrán muchos Cloudflare actúa como proxy inverso filtrando conexiones (Puerto 80/443).
Entre las medidas de seguridad que Cloudflare tiene ante ataques de capa 7 (Nivel de aplicación web) son:

1.- Balanceador de carga (Cloudflare divide la carga entre distintos servidores en todo el mundo).
2.- Filtro de cabeceras http.
3.- Verificación de cookie

Ahora, muchos se preguntarán, ¿Cómo saltarse el modo de "Estoy bajo ataque"?



Antes que nada, informo que nada se obtiene de la suerte, para lograr saltarnos este paso primero hay que analizar a fondo de que manera actúa este mecanismo de defensa.

Para quienes ya hayan analizado un poco se podrán dar cuenta de que una función javascript es la encargada de otorgar o no el acceso a los clientes legítimos.

Algo como esto:
Código: javascript
<script type="text/javascript">
  //<![CDATA[
  (function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function(){
      var a = document.getElementById('cf-content');a.style.display = 'block';
      setTimeout(function(){
        var t,r,a,f, mdyTuiL={"eD":+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]))};
        t = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;r = t.match(/https?:\/\//)[0];
        t = t.substr(r.length); t = t.substr(0,t.length-1);
        a = document.getElementById('jschl-answer');
        f = document.getElementById('challenge-form');
        ;mdyTuiL.eD*=!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![];mdyTuiL.eD+=!+[]+!![]+!![];mdyTuiL.eD*=!+[]+!![]+!![]+!![];mdyTuiL.eD*=+((+!![]+[])+(!+[]+!![]));mdyTuiL.eD+=+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));mdyTuiL.eD+=+((+!![]+[])+(+!![]));mdyTuiL.eD+=+((!+[]+!![]+[])+(!+[]+!![]+!![]+!![]));mdyTuiL.eD+=+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));mdyTuiL.eD+=+((+!![]+[])+(+!![]));a.value = parseInt(mdyTuiL.eD, 10) + t.length;
        f.submit();
      }, 5850);
    }, false);
  })();
  //]]>
</script>


Vale, viéndolo de este modo es algo confuso, ustedes se preguntarán ¿Cómo esta función identifica a un cliente legítimo?
Pues la respuesta esta en el mismo javascript, generalmente un bot no puede ejecutar javascript ( a menos de que se haya configurado para hacerlo), y en el supuesto de que este sea el caso, Cloudflare tambien combina el uso de html.

Código: html5
<form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
    <input type="hidden" name="jschl_vc" value="339b52c916b4b33d83d0737d068d6d99"/>
    <input type="hidden" id="jschl-answer" name="jschl_answer"/>
  </form>
</div>


Viéndolo de esta manera, para lograr ejecutar javascript & html tendríamos que ser un navegador web; en efecto, esa es la respuesta: solo un navegador web podría ejecutar cierta función y obtener la cookie que será la encargada de otorgarnos el acceso al host solicitado. Lástima no podemos ejecutar código html, ni javascript, así que no podremos...

Un momento...pero la tecnología avanza y los tiempos cambian así que ¿por qué no convertir nuestro bot en un navegador ?

Analizamos la función y vemos que es lo que hace exactamente:

4 variables que almacenan información básica (una de los cuales es el esquema y la longitud de host), así como un objeto de nombre aleatorio que contiene la respuesta real "desafío".

La respuesta se calcula con algunas operaciones aritméticas que se encuentra semi ofuscado dentro del código para hacernos un poco mas complicado el trabajo, y se añade a la entrada "jschl_answer" del formulario.
A la respuesta se envía entonces al directorio: "/cdn-cgi/l/chk_jschl", que valida la respuesta al "desafío" y, si tiene éxito, devuelve un código de respuesta (301) al recurso solicitado inicialmente, así como una cookie "cf_clearance".

Esto lo solucionamos con un poco de código :


Ahora, tenemos la cookie! lo que significa que de esta cookie en solicitudes posteriores no pasa por nuevos "desafios" y podremos visualizar el sitio web con normalidad.

Cada solicitud contiene diferentes operaciones aritméticas, y la coookie "cf_clearance" está restringida a una dirección IP individua;  lo que quiere decir que esta cookie no se puede usar en otros ordenadores con diferente dirección IP.

PD: Esto no es un tutorial, si no un ejemplo de como funciona Cloudflare y como tan fácil se puede saltar, es por ello que no incluiré el source para hacer esto.

Buenas noches.

Pues sí :)

Además puedes bajar CEF y con Node.js usarlo a tu antojo para saltar todo éste tipo de protecciones.