【系统安全】nginx 禁用不安全的http方法
- 工作小总结
- 时间:2023-07-10 22:51
- 2233人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
系统安全扫描提示:不安全的http方法。如下图
0x01 漏洞描述
众所周知,GET、POST是最为常见方法,而且大部分主流网站只支持这两种方法,因为它们已能满足功能需求。其中,GET方法主要用来获取服务器上的资源,而POST方法是用来向服务器特定URL的资源提交数据。而其它方法出于安全考虑被禁用,所以在实际应用中,九成以上的服务器都不会响应其它方法,并抛出404或405错误提示。以下列举几个HTTP方法的不安全性:
1、OPTIONS方法,将会造成服务器信息暴露,如中间件版本、支持的HTTP方法等。
2、PUT方法,由于PUT方法自身不带验证机制,利用PUT方法即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限。
3、DELETE方法,利用DELETE方法可以删除服务器上特定的资源文件,造成恶意攻击。
0x02 漏洞验证
使用Burpsuite抓取网站数据包,修改请求包的方法为OPTIONS,响应包中出现PUT、DELETE、TRACE等不安全的 HTTP 方式。
0x03 漏洞修复
修复方式:
①:在tomcat中配置
②:在nginx中配置
③:在apache中配置
④:代码中配置
①在tomcat中配置
凯哥这里以Tomcat版本 8.0.15为例
Tomcat版本 8.0.15
1、禁止tomcat不安全的HTTP请求方法
在 ./conf/web.xml 中
第一步:将<web-app>协议替换为:【此处协议有可能不需要替换】
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/j2ee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
第二步:在web.xml结尾 ,</web-app>之前加入下面的配置
<security-constraint> <web-resource-collection><!-- 白名单配置--> <url-pattern>/*</url-pattern> <http-method-omission>GET</http-method-omission> <http-method-omission>POST</http-method-omission> </web-resource-collection> <auth-constraint /> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
第三步:在./conf/server.xml中
将现有的一行代码按照下面的配置修改
<Connector connectionTimeout="20000" port="8089" protocol="HTTP/1.1" redirectPort="8443" allowTrace="true" server="x"/>
第四步:在./conf/server.xml中结尾部分修改如下:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/> <!-- 此处是将tomcat默认的错误信息屏蔽掉 --> <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" /> </Host>
②:在nginx中配置
nginx 禁用不安全的http方法,既可以在nginx配置文件 server 下进行全局设置,也可以在某个location下进行设置。
全局设置方法一:
if ($request_method ~ ^(PUT|DELETE)$) { return 403; }
或者:
if ($request_method !~ ^(GET|POST)$) { return 403; }
例如:
server { listen 80; server_name www.iwen.com; #return 301 https://$server_name$request_uri; if ($request_method !~ ^(GET|POST)$) { return 403; } ....... ....... }
局部设置方法一:
location /knowlege_app { include /usr/local/nginx/allow_ip_list.conf; if ($request_method = PUT ) { return 403; } if ($request_method = DELETE ) { return 403; } if ($request_method = OPTIONS ) { return 403; } if ($request_method = TRACE ) { return 403; } proxy_pass http://kaigejavaKnowlege_app; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
局部设置方法2:
location /knowlege_app { include /usr/local/nginx/allow_ip_list.conf; if ($request_method !~ ^(GET|POST)$) { return 403; } proxy_pass http://serverKnowlege_app; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
③:在apache中配置
在 Apache 中禁用 HTTP 方法可以通过修改 Apache 配置文件(如 httpd.conf)或虚拟主机配置文件(如 httpd-vhosts.conf)来实现。
具体步骤如下:
1. 打开 Apache 配置文件,找到 <Directory> 的配置块。
<Directory "/path/to/directory"> # ... </Directory>
2. 在该配置块中添加 Limit 或 LimitExcept 指令,并列出需要禁用的 HTTP 方法。
例如,要禁用所有 HTTP 方法,可以使用 Limit 指令:
<Directory "/path/to/directory"> # ... Limit ALL </Directory>
如果只想禁用某些方法,可以使用 LimitExcept 指令。例如,要禁用 POST 和 PUT 方法,可以这样写:
<Directory "/path/to/directory"> # ... LimitExcept GET HEAD OPTIONS </Directory>
3. 保存配置文件并重启 Apache。
注意,Apache 默认情况下会允许所有标准的 HTTP 方法(GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE)。因此,在禁用 HTTP 方法之前,请确保你真正了解需要禁用的方法,以及它们可能产生的影响。