移动安全测试 已知服务器地址和端口,怎么测试该服务开放了哪些 http 方法

兔白小 · April 04, 2018 · Last by 陈恒捷 replied at April 13, 2018 · 2175 hits

步骤一:已知服务器地址和端口比如 192.168.1.110:8080,按照一般的测试方法:“在命令窗口中输入 telnet 192.168.1.110:8080,回车确定,在新行中输入 OPTIONS / HTTP/1.1,再回车”。并没有返回相关允许的 http 方法信息,而是提示
HTTP/1.1 400 Bad Request
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Date:Wed,04 Apr 2018 03:14:46 GMT
Connecion:colse

ps:在输入 telnet 192.168.1.110:8080 回车后,命令窗口就没有显示任何内容,只显示光标焦点,然后我继续输入 OPTIONS / HTTP/1.1,输入的命令内容 “OPTIONS / HTTP/1.1” 也是不显示出来的
问题 1:是不是就表明服务器禁止查询 http 方法的命令?
步骤二:为了能够得到开放的 http 方法,我又继续使用了其他方式进行测试:使用火狐插件 httprequster,在 URL 中输入对外开放的网址域名比如https://xxx.com,options”然后选择 “ ,点击提交,返回的提示信息为

HTTP Status 405 - JSPs only permit GET POST or HEAD
type Status report
message JSPs only permit GET POST or HEAD
description The specified HTTP method is not allowed for the requested resource.
问题 2:是不是可以认为对外开放的方法为 GET 、POST、 HEAD?该测试方法是针对网址域名,是否等同于步骤一?即步骤二的测试是否可以确认服务器对外开放的 http 方法。

共收到 7 条回复 时间 点赞

为什么要做这件事?

@lofbat ,这是要做安全类的测试 。一般来说服务器对外提供的 http 方法 应该是 只包含必需的方法,其他没有必要提供的 http 方法尽量不要开放,避免受到更多类型的攻击。就跟对外开放的端口尽量不要提供额外的端口一样的道理。

从实际服务端开发的角度,一般会有一个 router 负责管理所有的 path + http method 组合的响应,如果这个组合服务端没有,那么就会返回 4xx 系列错误码(如 path 没有注册到 router 返回 404)。

看了下这个 options 的说明,感觉它只是一个特殊的 http method ,按照协议会告诉你这个 path 可以访问的 http method 有哪些,但实际实现是框架默认实现好的。从你描述上看应该是服务端关闭了 options 的自动响应吧。

想了解这个和安全有什么关系?依我愚见,即使关了 options ,也只是提高扫描成本,但照样可以通过每个 path 各种 http method 都试验一次找出所有允许的请求方法。

@chenhengjie123 ,测试 http 方法 只是其中一个步骤,即使返回的结果 提示 说 不允许 某个 方法 比如说是 put 方法不允许,后续也还会测试 put 请求。我的问题是想确认下 我的测试方法是不是可行。另外 ,按你的描述 ,这个路由器 router 管理的 path+http method 可以通过什么方式查看吗 ?

兔白小 回复

看源码。

@chenhengjie123 这个不是 在 服务器中配置的么。。

兔白小 回复

你说的是服务器中的配置文件? router 一般和具体功能绑定,不随便改,所以应该不会配置到配置文件。

你提到的这部分功能,其实都是由框架负责实现,应用只负责对应配置 router 规则。我理解这部分的测试应该通过检查 router 规则效率更高?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up