我不明白为什么以下规则没有检测到内容"unescape":
alert tcp any any -> any any (msg:"example 1";flow:to_client,established;file_data;content:"unescape";sid:20001)
虽然以下工作:
alert tcp any any -> any any (msg:"example 1";flow:to_client,established;file_data;content:"<script>";sid:20001)
似乎Snort没有检测到脚本标签中的任何内容。谢谢。
选项可以在 http 预处理器中命名 javascript。 您需要确保已启用此功能,否则取消逃逸等功能将不是您所期望的。但是,您仍然应该看到"unescape",所以我不完全确定这是您的问题。您可以在服务器配置选项的snort手册中阅读有关如何配置此选项的信息。 以下是手册中有关此选项的代码片段:
"normalize_javascript此选项允许在HTTP响应正文中规范化Javascript。在配置此选项之前,您应该extended_response_inspection选择配置选项。启用此选项后,Http Inspect 通过搜索 <script>
标记在 HTTP 响应正文中搜索 Javascript,并开始对其进行规范化。当 Http Inspect 看到没有类型的 <script>
标记时,它被视为 javascript。javascript函数中的混淆数据,如unescape,String.fromCharCode,decodeURI,decodeURIComponent将被规范化。在 unescape/decodeURI/decodeURIComponent 中处理的不同编码是 %XX, %uXXXX,二十和三十一.除了这些编码之外,Http Inspect 还将检测连续的空格并将其规范化为单个空格。Http Inspect 还将规范化加号并连接字符串。规则选项file_data可用于从规则访问此规范化缓冲区。当 Http 检查中的混淆级别等于或大于 2 时,将生成具有 SID 9 和 GID 120 的预处理器警报。
如果这仍然不起作用,那么您应该检查以下内容:
可能是 http 预处理器服务器配置配置中的server_flow_depth设置得太低。默认值为 300,因此如果"<script>
"在前 300 个字节内,而"unescape"在 300 字节之后,snort 不会检查那么远。 尝试将此值设置为 65535。您应该能够通过为" </script>
"提供内容匹配来测试这一点,如果这不会生成警报,则可能是该设置。