Parchando mod_headers

Posted on 9:07 by Xianur0

Bueno ahora viene la forma de parchar el mod_headers (apache2)...

Primero que nada se requiere el mod_headers.c (viene en cualquier paquete de codigo fuente del apache), luego viene lo siguiente:


static int nocrlf(char *val) {
ap_regex_t *regex;
ap_regcomp(&regex, "\n",AP_REG_EXTENDED);
if(ap_regexec(&regex, val, 0, NULL, 0) != 0) {
return 1;
}
return 0;
}




esa funcion retorna 1 en caso de que no tenga crlf lo que le demos como parametro, de lo contrario 0... esto es mediante expresiones regulares (nadamas buscamos un \n y es todo xD...).

la podemos colocar en cualquier lado (no importa mucho donde declaramos esta funcion), en mi caso lo puse en la linea 510...

lo siguiente es hacer que no setie las cabeceras cuando tienen crlf...

busquemos:

switch (hdr->action) {



y justamente antes ponemos:

if(nocrlf(process_tags(hdr, r)) == 1)



esto es, si hay crlf en el header no se entra al switch, de modo que no se setea la cabecera...

listo, ya tenemos el mod_headers parchado, ahora nos toca instalarlo:



root@Zer0-Null:/usr/local/apache2/bin# ./apxs -cia /home/xianur0/httpd-2.3.5-alpha/modules/metadata/mod_headers.c



bueno eso fue en mi caso, nadamas hay que posicionarnos en la ruta donde este instalado nuestro apache, y buscar el apxs (tiene que estar instalado, de otro modo tendriamos que recompilar el apache :S...) y darle la ruta del mod_headers.c

y ahora ya, tenemos parchado mod_headers y nuestro apache :)...

1 comentarios:

Alevsk dijo...

Genial método para vulnerar y el método para corregir el bug, una pregunta, este es uno de los 0 days de los que me habías comentado xianur0