无法在链规则中验证ARG

时间:2017-03-22 15:09:44

标签: security owasp mod-security mod-security2

我正在尝试评估和阻止某些URI没有给定ARG的GET / POST请求。

以下规则不验证“!@ eq 1”

(REQUEST_URI和REQUEST_HEADERS在单独测试时按预期工作)

SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:1,id:999955,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
SecRule &ARGS:cualquiera "!@eq 1" "chain"
SecRule &REQUEST_HEADERS:Referer "@eq 0"

我可以验证“@ eq1”“!@ eq1”,如果我写一个类似下面的SecRule:

SecRule &ARGS:cualquiera "@eq 1" "id:999957,phase:2,pass,log,capture,msg:'param cualquiera found: %{MATCHED_VAR}'"

规则ID 999955如何实现这一目标?

实施例

SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:999955,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
  SecRule &ARGS:cualquiera "@eq 1" "chain"
   SecRule &REQUEST_HEADERS:Referer "@eq 0"

卷曲 - 形成cualquiera = ANY http://foo.bar/jwtpoc.showcaller [确定]

[22/Mar/2017:17:23:50 --0400] [foo.bar/sid#1ab39b8][rid#7f518c014e60][/jwtpoc.showcaller][1] Access denied with code 508 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/moduleconf/myrules/test/cp_rules.conf"] [line "2"] [id "999955"] [msg "IP: 10.10.10.145 GET/POST test URI"]

但对于这个:

curl --referer myReferer http://beta.reservhotel.com/win/owa/jwtpoc.showcaller [ NOTOK ]

规则 SecRule& ARGS:cualquiera“@eq 1”“chain”未被考虑且此操作未被阻止

谢谢!

1 个答案:

答案 0 :(得分:0)

第1阶段不提供POST参数。因此,将链式规则999955更改为第2阶段规则,它应该可以正常工作。

您也误解了链式规则的工作原理。它们作为AND参数起作用。所以所有规则都必须符合工作要求。这是你问题中的第一条规则,即块jwtpoc请求,它也没有cualquiera参数,也没有引用者。

您第二次尝试然后移除cualquiera参数测试的不是部分。所以它查找具有cualquiera参数的jwtpoc请求,并且也没有引用者。您的第一个示例与所有三个规则匹配,但您的第二个示例不匹配(因为中间规则不匹配)。

如果您想在没有cualquiera参数或引用者的情况下使所有jwtpoc请求失败,那么您需要为此OR语句编写两个规则。像这样:

#Rule 9999550 to block jwtpoc requests with a cualquiera argument
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:9999550,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
  SecRule &ARGS:cualquiera "!@eq 1"

#Rule 9999551 to block jwtpoc requests with no referrer
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:9999551,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
  SecRule &REQUEST_HEADERS:Referer "@eq 0"