AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 810414
Accepted
Vladimir
Vladimir
Asked: 2016-10-22 00:39:29 +0800 CST2016-10-22 00:39:29 +0800 CST 2016-10-22 00:39:29 +0800 CST

如何仅修改一个参数的 modsecurity 规则操作?

  • 772

我有一个带有核心规则集的 modsecurity。我有 3 个参数的 POST 请求:Par1 = “base64-encoded XML”& Par2 = “url”&Par3 = “hash”。

我想将 CRS 规则修改为仅对Par1 进行 base64Decode 并“按原样”使用 Par2 和 Par3。

我尝试使用SecRuleUpdateActionById指令,但它需要为 CRS 中的每条规则编写指令。 SecDefaultAction指令也不起作用,因为所有 CRS 规则都有覆盖默认操作的“t:none”。我也找到了multiMatch行动,但我认为它会在 base64-string 上造成很多误报。

是否有某种方法可以在不重写此规则的情况下更新多个规则的操作?

security web-application-firewall mod-security
  • 2 2 个回答
  • 1596 Views

2 个回答

  • Voted
  1. Best Answer
    Vladimir
    2016-11-10T01:14:19+08:002016-11-10T01:14:19+08:00

    我找到了解决方案。我决定获取参数 Par1 的值,对其进行 base64 解码并记录在“TX”变量中。在事务完成之前,此变量将可用。有两种方法可以做到这一点。

    1.1。使用 lua:

    • 创建extract_param.lua具有相似内容的文件:

      function main()
          -- Retrieve par1
          local par1 = m.getvar("ARGS.Par1", {"base64DecodeExt"});
          if par1 == nil then
              m.log(3, "no Par1 in request.");
              return nil;
          end
          m.log(3, "Par1 base64-decoded:" ..par1.. ".");
          m.setvar("TX.Par1",par1);
      return nil;
      end
      
    • 在加载 CRS之前添加SecRuleScript指令:

      SecRuleScript path/to/script/extract_param.lua phase:2,log
      

    1.2. 使用标准的“setvar”功能。这个方法比较简单,我用过。但后来我找到了它(在这里),并决定也介绍一下 lua。

    • 在加载 CRS之前添加以下规则:

      SecRule ARGS:par1 "^(.*)$" "log, pass, id:22, phase:2, t:base64DecodeExt, setvar:tx.par1=%{MATCHED_VAR}"
      

    2.加载CRS后添加一堆SecRuleUpdateTargetByTag指令:

    SecRuleUpdateTargetByTag 'OWASP_CRS/WEB_ATTACK/SQL_INJECTION' "!ARGS:par1|TX:par1"
    
    • 2
  2. Barry Pollard
    2016-10-28T14:32:23+08:002016-10-28T14:32:23+08:00

    更新多个 CRS 规则的操作并不容易,因为您给出的原因没有列出每个规则 ID。

    可以使用SecRuleUpdateTargetByTag更新与一组规则匹配的变量,但不能更新操作,因为没有 SecRuleUpdateActionByTag (只有一个SecRuleUpdateActionById),但老实说,即使您只想转换 1 个变量给你带来麻烦。我同意多重匹配在这里可能不是正确的答案,即使你可以这样做。

    最终我会推荐的是:

    1. 保持规则不变,基本上忽略 CRS 的 base64 par1 变量(请注意,如果 base64 编码产生误报,您可能需要更新某些规则以忽略某些规则的此参数)。

    2. 确定 par1 XML 变量的攻击向量,并为此编写(或从 CRS 复制)较小的规则子集,并使用 base64Decode 转换。即使在 base64 解码时,我想 XML 仍然会产生很多误报,所以你可能不想在它们上运行完整的 CRS。

    祝你好运!

    • 0

相关问题

  • OpenSSH 漏洞 [重复]

  • 选择什么安全套件?

  • 安全地授予对 SQL 2005 复制监视器的访问权限以创建快照

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • 如何将安全组添加到正在运行的 EC2 实例?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve