Perché queste 2 regexp non funzioneranno come previsto in 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...

Queste 2 cose non funzioneranno come previsto. Altre regole stanno funzionando bene. Voglio bloccare una richiesta come:

// (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)

Credo che questa regexpression sia O.K., quindi voglio davvero sapere perché mod_security2 non bloccherà queste richieste. Voglio bloccare usando mod_sec2, non apache.

Ambiente: Server Web Test di 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.

Alla domanda precedente:

The REQUEST_URI variable doesn't include the domain or the protocol. Did you mean to add more to the end of that URL?

Sì, lo so. Voglio mod_sec2 per negare "GET ////////" (mostrato negli esempi precedenti). Se clicco su un browser hxxp: // something.mysite.com////////// REQUEST_URI diventa "///////", quindi deve essere applicato l'id: 1001. Ho ragione?

Is the rule ID logged for the request that is successfully blocked by Mod Security?

Se la regola mod_security è stata applicata correttamente, posso vedere l'errore mod_sec nel mio log degli errori di apache (incluso il numero dell'ID hit, ovviamente).

"/ somedir / lpt4" e altre cose, sono block di apache, non da mod_security. (Nessun log da mod_security)

LTP1?

link Voglio che mod_sec neghi questi brutti comandi interni, quindi creo una regola (id: 1000).

P.S. "RewriteRule" non è un'opzione per me. Voglio usare mod_sec2 per fare questo.

    
posta Krey 15.12.2013 - 09:44
fonte

1 risposta

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

Ci possono essere due problemi con queste regole.

  1. Richiesta HTTP Funzioni di trasformazione i.e t: htmlEntityDecode, t: minuscolo, t: removeWhitespace deve essere conforme allo schema di codifica effettivo utilizzato nella richiesta HTTP. Modsecurity trasforma l'input e applica l'espressione regolare per ogni trasformazione.
  2. Stai utilizzando il blocco come azione dirompente, il problema con il blocco che utilizza il valore SecDefaultAction che può essere pass, deny,drop . Pertanto, il blocco potrebbe non bloccare la richiesta HTTP dannosa e sostituire block con deny potrebbe risolvere il problema.
risposta data 24.12.2013 - 18:06
fonte

Leggi altre domande sui tag