wing ftp 服务器验证命令执行的 Snort 规则
Snort rule for wing ftp server authenticated command execution
您好,我正在为一个大学项目编写一些自定义规则,我想知道是否有人可以检查我的规则是否存在此漏洞;
http://www.exploit-db.com/exploits/34517/
这是我的规则;
alert tcp 任何 -> 任何 5466 \
(消息:"FTP command execution";内容:“/管理员lua脚本html”;内容:"POST";http_method;内容:"os execute";)
修订规则; alert tcp any any -> any 5466\
(消息:"FTP command execution";内容:“/admin_lua_script.html”;内容:"POST";http_method;内容:"os execute";)
我会推荐如下内容:
alert tcp any any -> any 5466 /
(msg:"FTP command execution"; flow:to_server,established; /
content: "POST"; http_method; nocase; /
content:"/admin_lua_script.html"; fast_pattern; http_uri;/
content:"command=os.execute"; http_client_body; nocase; /
metadata: service http;)
解释:
目标端口 5466:
如果可能,您应该始终指定一个端口。当您有 "any/any" for source/destination 的规则时,snort 对待它们的方式与定义端口的规则不同。
重要提示: 由于此漏洞利用模块在端口 5466 上运行并且是 http,因此您需要确保此端口在您的端口的 http 预处理器配置中。具体来说,您的 snort.conf 应该有类似于以下的配置行:
预处理器http_inspect_server:服务器默认配置文件所有端口{80 ... 5466 ...}
(显然不要放点,只代表你应该有的其他端口)。如果您的 http 预处理器配置中没有此端口,则所有 http 内容修饰符都不会匹配,因为 snort 不会将此端口上的流量视为 http,这可能是您遇到的主要问题。
流程:to_server,成立;
您只想检查流向服务器的已建立会话。这将更有效,因为 snort 不必检查未建立会话的随机流量,也不必检查流向客户端的流量,因为您知道此漏洞利用的方向将始终流向服务器。请求成功的唯一方法是客户端和服务器之间已经建立连接,否则攻击不会成功,对此发出警报毫无意义。
内容:"POST"; http_method;没有情况;
post 匹配需要 nocase,因为 http 不需要所有大写字母的方法。
内容:"/admin_lua_script.html"; fast_pattern; http_uri;
添加 fast_pattern 选项将使规则更有效,因为它将把它放入 snort 的快速模式匹配器中。你知道这个内容是静态的并且永远不会改变(包括大小写)所以这符合快速模式匹配器的条件。由于这是规则中唯一区分大小写的内容匹配,snort 会将其单独放入快速模式匹配器中,但如果您稍后使用另一个内容匹配修改规则,您会希望这是要使用的内容匹配对于 fast_pattern 匹配器。
内容:"command=os.execute"; http_client_body;没有情况;
这将在客户端正文中,因此添加 http_client_body 选项。
元数据:服务 http;
如果您正在使用 target based(现在应该是这样了),您需要添加 service http 关键字。如果您不使用基于目标的,那么在规则中添加此内容不会阻止规则触发,因此如果您知道此流量是什么服务,将此内容添加进来也是一个好习惯。
附加说明:
您的自定义规则 sids 应为 1000000 或以上,低于此值的任何内容都保留给 snort 分发规则。查看更多相关信息 here
您好,我正在为一个大学项目编写一些自定义规则,我想知道是否有人可以检查我的规则是否存在此漏洞; http://www.exploit-db.com/exploits/34517/
这是我的规则;
alert tcp 任何 -> 任何 5466 \ (消息:"FTP command execution";内容:“/管理员lua脚本html”;内容:"POST";http_method;内容:"os execute";)
修订规则; alert tcp any any -> any 5466\ (消息:"FTP command execution";内容:“/admin_lua_script.html”;内容:"POST";http_method;内容:"os execute";)
我会推荐如下内容:
alert tcp any any -> any 5466 /
(msg:"FTP command execution"; flow:to_server,established; /
content: "POST"; http_method; nocase; /
content:"/admin_lua_script.html"; fast_pattern; http_uri;/
content:"command=os.execute"; http_client_body; nocase; /
metadata: service http;)
解释:
目标端口 5466:
如果可能,您应该始终指定一个端口。当您有 "any/any" for source/destination 的规则时,snort 对待它们的方式与定义端口的规则不同。
重要提示: 由于此漏洞利用模块在端口 5466 上运行并且是 http,因此您需要确保此端口在您的端口的 http 预处理器配置中。具体来说,您的 snort.conf 应该有类似于以下的配置行:
预处理器http_inspect_server:服务器默认配置文件所有端口{80 ... 5466 ...}
(显然不要放点,只代表你应该有的其他端口)。如果您的 http 预处理器配置中没有此端口,则所有 http 内容修饰符都不会匹配,因为 snort 不会将此端口上的流量视为 http,这可能是您遇到的主要问题。
流程:to_server,成立;
您只想检查流向服务器的已建立会话。这将更有效,因为 snort 不必检查未建立会话的随机流量,也不必检查流向客户端的流量,因为您知道此漏洞利用的方向将始终流向服务器。请求成功的唯一方法是客户端和服务器之间已经建立连接,否则攻击不会成功,对此发出警报毫无意义。
内容:"POST"; http_method;没有情况;
post 匹配需要 nocase,因为 http 不需要所有大写字母的方法。
内容:"/admin_lua_script.html"; fast_pattern; http_uri;
添加 fast_pattern 选项将使规则更有效,因为它将把它放入 snort 的快速模式匹配器中。你知道这个内容是静态的并且永远不会改变(包括大小写)所以这符合快速模式匹配器的条件。由于这是规则中唯一区分大小写的内容匹配,snort 会将其单独放入快速模式匹配器中,但如果您稍后使用另一个内容匹配修改规则,您会希望这是要使用的内容匹配对于 fast_pattern 匹配器。
内容:"command=os.execute"; http_client_body;没有情况;
这将在客户端正文中,因此添加 http_client_body 选项。
元数据:服务 http;
如果您正在使用 target based(现在应该是这样了),您需要添加 service http 关键字。如果您不使用基于目标的,那么在规则中添加此内容不会阻止规则触发,因此如果您知道此流量是什么服务,将此内容添加进来也是一个好习惯。
附加说明:
您的自定义规则 sids 应为 1000000 或以上,低于此值的任何内容都保留给 snort 分发规则。查看更多相关信息 here