Hace unos días que trasteo con el WAF de dotDefender para conseguir saltarlo y tal. En uno de esos momentos que te encuentras cara a cara con el queridísimo mensaje "dotDefender Blocked Your Request", ahí­ en ese preciso instante empieza la guerra entre el y yo.

La verdad no hay mucho que enseñar, simplemente a base de ver como se comportaba, que cadenas me detectaba y filtraba llegue a la conclusión de que creando un par de arrayâs y luego juntarlos para ejecutar la tipica alerta en un XSS se podí­a bypassear fácilmente el WAF, para que lo veais mejor dejo aquí el payload usado:


  <img src=x onerror='var x = new Array(); x[0]="alert"; x[1]="(/JKS/.source)"; x[2]=eval; x[2](x[0]%2Bx[1]);' />

La explicación es sencillita, creamos un array llamado "x" en el cual la primera cadena será alert, separamos los paréntesis porque el WAF lo detecta si estan juntos, después añadimos un eval para poder ejecutar la alerta, ya que esta en string, finalmente lo juntamos todo para que proceda a ejecutarse. He usado el %2B (+ en hexadecimal) porque si añadieramos el + así­ y quisieramos usar el payload en un GET el navegador lo interpretaría como un espacio. Encontré otra forma más churra de saltarlo, usando URI, no tiene mucha magia ya que se usó en Opera para saltarse su filtro: colocar un sencillo document.location en base64 dentro de un href.


    <a href=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pg== />