【系统安全】nginx 禁用不安全的http方法

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 工作小总结
  • 时间:2023-07-10 22:51
  • 2233人已阅读
简介 系统安全扫描提示:不安全的http方法。如下图0x01漏洞描述-不安全的HTTP方法-不安全的HTTP方法一般包括:PUT、DELETE、COPY、MOVE、SEARCH、PROPFIND、TRACE等。不合理的权限配置可能导致网站被攻击者非法入侵。众所周知,GET、POST是最为常见方法,而且大部分主流网站只支持这两种方法,因为它们已能满足功能需求。其中,GET方法主要用来获取服务器上的资源,而

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

系统安全扫描提示:不安全的http方法。如下图

dec8db6084eaf46d93b8d1cd78d7e204.png

0x01 漏洞描述

- 不安全的HTTP方法 -

不安全的 HTTP 方法一般包括:PUT、DELETE、COPY、MOVE、SEARCH、PROPFIND、TRACE 等。不合理的权限配置可能导致网站被攻击者非法入侵。

c0d32680dbbeeb40e28ea5f1037ee264.png

众所周知,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 漏洞修复

  1. 限制PUT、DELETE、SEARCH、COPY、MOVE、TRACE等危险的方法的访问权限。

  2. 如果不需要使用上述 HTTP 方法,应关闭不必要的方法,只留下GET、POST方法。

修复方式:

①:在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 &quot;%r&quot; %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 方法之前,请确保你真正了解需要禁用的方法,以及它们可能产生的影响。



TopTop