0

嗨,我正在为一个大学项目编写一些自定义规则,我想知道是否有人可以检查我的规则是否存在此漏洞; http://www.exploit-db.com/exploits/34517/

这是我的规则;

alert tcp any any -> any 5466 \ (msg: "FTP command execution"; content: "/admin lua script html"; content: "POST"; http_method; content: "os execute";)

修订规则;alert tcp any any -> any 5466\ (msg: "FTP command execution"; content:"/admin_lua_script.html"; content:"POST"; http_method; content: "os execute";)

4

1 回答 1

0

我会推荐如下内容:

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;) 

解释:

dest 端口 5466:
应尽可能指定端口。当您有源/目标的“任何/任何”规则时,snort 对待它们的方式与定义端口的规则不同。
重要提示:由于此漏洞利用模块在端口 5466 上运行并且是 http,因此您需要确保此端口在您的端口的 http 预处理器配置中。具体来说,您的 snort.conf 应该具有类似于以下内容的配置行:

预处理器 http_inspect_server:服务器默认配置文件所有端口 { 80 ... 5466 ...}

(显然不要放点,只代表你应该在那里拥有的其他端口)。如果您的 http 预处理器配置中没有此端口,则所有 http 内容修饰符都将不匹配,因为 snort 不会将此端口上的流量视为 http,这可能是您遇到的主要问题。

流:to_server,已建立;
您只想检查流向服务器的已建立会话。这将更有效率,因为 snort 不必检查未建立会话的随机流量,也不必检查流向客户端的流量,因为您知道此漏洞利用的方向将始终流向服务器。请求成功的唯一方法是客户端和服务器之间已经建立了连接,如果不是这样,漏洞利用将不会成功,并且对此发出警告是没有意义的。

内容:“发布”;http_方法;无壳;
您需要 nocase 进行后期匹配,因为 http 不要求该方法全部为大写字母。

内容:“/admin_lua_script.html”;快速模式;http_uri;
添加 fast_pattern 选项将使规则更有效,因为它会将其放入 snort 中的快速模式匹配器中。你知道这个内容是静态的并且永远不会改变(包括大小写),所以这符合快速模式匹配器的条件。由于这是规则中唯一区分大小写的内容匹配,因此 snort 会自行将其放入快速模式匹配器中,但如果您稍后使用另一个内容匹配修改规则,您会希望这是要使用的内容匹配对于 fast_pattern 匹配器。

内容:“命令=os.execute”;http_client_body;无壳;
这将在客户端正文中,因此添加 http_client_body 选项。

元数据:服务http;
如果您使用基于目标(现在应该是这样),则需要添加 service http 关键字。如果您不使用基于目标的规则,则在规则中包含此内容不会阻止触发规则,因此如果您知道此流量是什么服务,则将其放入也是一个好习惯。

附加说明:
您的自定义规则 sids 应为 1000000 或以上,低于此值的任何内容都保留用于 snort 分发规则。在此处查看更多信息

于 2015-02-26T03:01:35.523 回答