Defiende tu sitio web con ¡bombas zip!

Para crear una bomba sencilla, un fichero lleno de ceros, podemos ejecutar el siguiente comando desde la consola:
$ dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 67,6557 s, 159 MB/s
$ du -sh 10G.gzip
10M 10G.gzipComo veis, hemos creado un fichero de 10M que se convertir� en 10GB al descomprimirse. Ahora, para construir una simple defensa simplemente usa un peque�o script que, dependiendo del User-Agent, enviar� la "bomba" creada:
<?php
$agent = lower($_SERVER[HTTP_USER_AGENT]);
//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, nikto) !== false || strpos($agent, sqlmap) !== false || startswith($url,wp-) || startswith($url,wordpress) || startswith($url,wp/))
{
sendBomb();
exit();
}
function sendBomb(){
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize(10G.gzip));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile(10G.gzip);
}
function startsWith($haystack,$needle){
return (substr($haystack,0,strlen($needle)) === $needle);
}Como dice su autor, no es la "panacea" puesto que todos sabemos que cambiar el User-Agent es trivial, pero ya supondr�a una molestia para script kiddies y podr�an implementarse otros triggers (por n�mero de peticiones, IPs o pa�ses, payloads, etc.).
El resultado dependiendo del navegador o herramienta utilizada ser�a el siguiente:
- IE 11: se incrementa la memoria, IE se bloquea
- Chrome: se incrementa la memoria, se muestra un error
- Edge: se incrementa la memoria, luego drippea y carga en bucle
- Nikto: parece escanear bien pero no reporta nada (ninguna salida)
- SQLmap: alto uso de memoria hasta que se bloquea
Fuente: How to defend your website with ZIP bombs
download file now