¿Por qué estas 2 expresiones regulares no funcionarán como se espera en ModSecurity?

6
PROBLEMRULE #1; SecRule REQUEST_URI "^/(|(.*)/)(lpt1|lpt2|lpt3|lpt4)(/|\.|\?|$)" "t:none,t:htmlEntityDecode,t:lowercase,t:removeWhitespace,block,msg:'X',id:'1000'"
PROBLEMRULE #2; SecRule REQUEST_URI "^(.*)//(.*)$" "t:none,t:removeWhitespace,block,msg:'X',id:'1001'"

// I also tried those, but no success.
SecRule REQUEST_URI "//"
SecRule REQUEST_URI "^/(.*)/(lpt1|lp...

Estas 2 cosas no funcionarán como se esperaba. Otras reglas funcionan bien. Quiero bloquear una solicitud algo como:

// (too many slash, NOT blocked)
/////////// (too many slash, NOT blocked)
/lpt1 (Apache returns 403, NOT from modsec. Error log: "Forbidden: (web-dir)/lpt1 doesn't point to a file or directory")
/lpt1/blah (Apache returns 403, NOT from modsec. "doesn't point to a file or directory")
/somedir/lpt4.txt (Same as above)
/somedir/lpt4 (Same as above)
/somedir/////// (* SUCCESSFULLY blocked)

Creo que estas expresiones son O.K., así que realmente quiero saber por qué mod_security2 no bloquea estas solicitudes. Quiero bloquear usando mod_sec2, no apache.

Ambiente: Servidor web de prueba de Windows | mod_sec2 | Apache 2.4

To moderators:
Sorry for creating another question,
because my email has been hacked and I lost my password.
Please delete http://security.stackexchange.com/questions/47000/why-these-2-regexp-wont-work-as-expected
I use THIS ONE to continue question.

A la pregunta anterior:

  

La variable REQUEST_URI no incluye el dominio o el protocolo. ¿Querías agregar más al final de esa URL?

Sí, lo sé. Quiero que mod_sec2 niegue "GET ////////" (se muestra en los ejemplos anteriores). Si golpeo un navegador hxxp: // algo.misitio.com////////// REQUEST_URI se convierte en "///////", por lo que se debe aplicar id: 1001. Estoy en lo correcto?

  

¿Se ha registrado el ID de la regla para la solicitud que se bloqueó con éxito por Mod Security?

Si la regla mod_security se aplicó con éxito, puedo ver el error mod_sec en mi el registro de errores de apache (incluido el número de ID de golpe, por supuesto)

"/ somedir / lpt4" y otra cosa, son el bloque por apache, no por mod_security. (No hay registros de mod_security)

LTP1?

enlace Quiero que mod_sec niegue estos comandos internos feos, así que creo una regla (id: 1000).

P.S. "RewriteRule" no es una opción para mí. Quiero usar mod_sec2 para hacer esto.

    
pregunta Krey 15.12.2013 - 09:44
fuente

1 respuesta

1
SecRule REQUEST_URI "^/(|(.*)/)(lpt1|lpt2|lpt3|lpt4)(/|\.|\?|$)" "t:none,t:htmlEntityDecode,t:lowercase,t:removeWhitespace,block,msg:'X',id:'1000'

Puede haber dos problemas con estas reglas.

  1. Funciones de transformación de solicitud HTTP, es decir, t: htmlEntityDecode, t: minúscula, t: removeWhitespace debe cumplir con el esquema de codificación real utilizado en la solicitud HTTP. Modsecurity transforma la entrada y aplica la expresión regular para cada transformación.
  2. Está utilizando el bloque como una acción disruptiva, problema con el bloque que usa el valor SecDefaultAction que puede ser pass, deny,drop . Por lo tanto, es posible que el bloqueo no esté bloqueando la solicitud HTTP maliciosa y reemplazar block con deny puede resolver el problema.
respondido por el Ali Ahmad 24.12.2013 - 18:06
fuente

Lea otras preguntas en las etiquetas