1

为了解决渗透测试结果,我必须检查 cookie 的值。如果 cookie 为空或特定站点,则一切正常。如果是另一个站点,cookie值应该被清空,例如:Cookie [一些其他不应该被触及的文本] WASReqURL= https://an.evil.site [可能更多的文本不应该被触及] 在这个示例https://an.evil.site应替换为空字符串。使用的 Web 服务器是 IBM HTTP Server。我想在网络服务器配置中使用的规则是:

RequestHeader edit Cookie "^WASReqURL=<empty or my.sites.url>" ""

我想通了

^((?!WASReqURL=http(s|)(%3a|:)(%2a|\/){2}(acc.|)my.site.url)[\s\S])*$ 

我可以检查 cookie 是否包含正确的值,但这并不能帮助我删除该值。那里有任何 RegEx 大师可以为我指明正确的方向吗?

4

1 回答 1

0

这非常接近,但非常令人生畏/脆弱。它与您开始使用的非常相似,但使用了更多的 cookie 分隔符和捕获。

RequestHeader edit Cookie (?i)(^|.*;)\s*(?:WASReqURL=(?!https?(?:%3a|:)(?:%2f|/){2}(?:acc.)?my.site.url(?:$|\s|;))(?:[^;]+);?)(.*)$   "$1$2"
  • 忽略表达式中的大小写
  • 首先,我们在 WASReqURL 之前抓取任何 cookie 并将其放入 $1
  • 接下来,锚定到 WSARequRL
  • 仅当值不是我们的白名单域时,否定前瞻匹配
  • 非捕获组吞噬坏域
  • $3 获取任何后续 cookie

在 IHS 9.0 / Apache 2.4 中,您可以在 lua 脚本中执行此操作,这将更加必要,并且不会通过越来越复杂的单个表达式快速进入“正则表达式地狱”。

您也可以在 C 模块中以非常直接的方式执行此操作,但这是很多包袱。

最简单的替代方法是删除所有没有列入白名单的 WASReqURL(= 污染或恶意请求)的 cookie,这样可以使整个表达式更简单、更可靠。

于 2017-08-07T01:35:52.293 回答