【域名访问限制不严格漏洞原理及修复】

本文详细描述了域名访问限制不严格漏洞,涉及Nginx、Apache和Tomcat的配置方法,以防止攻击者通过IP绕过防护或注入恶意代码。解决方案包括设置默认server和检查规则,确保仅通过合法域名访问服务。


基本信息
漏洞名称:域名访问限制不严格漏洞
漏洞描述: 漏洞详情: 目标存在域名访问限制不严格漏洞。Http请求的Hostname字段没有严格的域名限制,导致可以绕过一些防护措施。 验证方法:
1.访问IP地址时host头可以改为任意域名 2.网站有域名得情况下可以直接通过IP访问网站内容 两种情况存在一种即为存在

漏洞危害
1. 攻击者可以通过直接访问IP绕过CDN、云WAF等云防护措施 2.
攻击者可以将恶意域名解析至服务器IP地址进行仿站,或导致服务器IP因解析恶意域名被查封。 3. 攻击者可以通过修改host头注入恶意代码至页面当中。

解决方案
配置WEB服务器,限制只能通过本地服务器解析的域名访问服务器。
Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。

Nginx:

方法一:

修改nginx.conf

添加一个默认server,nginx 会根据访问头(request head)中Host
的数据来确定使用哪个server来处理当前请求。如果请求没有匹配任何 server,或者访问头(request
head)中没有包含Host的数据,那么nginx会将该请求路由给默认的
server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。

server {

    listen       8888 default_server;

    server_name  _;

    access_log   off;

    return       403;

}
方法二:

修改nginx.conf

在目标server添加检测规则,参考以下配置:(if部分)

server {

       server_name  192.168.0.171;

       listen       8888;



        if ($http_Host !~*^192.168.0.171:8888$)

        {

        return 403;

        }

       include /etc/nginx/default.d/*.conf;



       location / {

       root /www/dvwa;

       index index.php index.html index.htm;

       }

}

Apache:

方法一

修改\conf\httpd.conf文件

修改ServerName为应用的域名,例如

ServerName www.domain.com:80

添加下列行

UseCanonicalName On
在这里插入图片描述重启Apache即可。

方法二:

修改\conf\httpd.conf文件

参考以下配置添加:

NameVirtualHost 192.168.0.16

<VirtualHost 192.168.0.16>

ServerName 192.168.0.16

<Location />

Order Allow,Deny

Deny from all

</Location>

</VirtualHost>

<VirtualHost 192.168.0.16>

DocumentRoot "C:\www"

ServerName www.test.com

</VirtualHost>

重启Apache即可。

作用:
拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www

Tomcat:

修改tomcat\conf\server.xml

找到如下位置:
在这里插入图片描述
将Host里的name修改为静态的域名,如下:
在这里插入图片描述

SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造非授权的URL,并由服务端发起请求的安全漏洞。其核心原理在于Web应用提供了从其他服务器获取数据的功能,但未对目标地址进行充分的过滤与限制,从而允许攻击者利用服务端作为跳板,访问或控制未经授权的系统[^3]。 在正常情况下,Web应用可能会提供一些功能,例如解析用户提供的URL、下载文件、加载指定地址的图片等。这些功能通常由服务端发起请求,获取外部资源[^5]。然而,如果这些功能未对用户输入的URL进行严格校验和过滤,攻击者就可以构造恶意输入,使服务端访问内部网络资源、本地文件,甚至发起对其他服务器的攻击[^4]。 SSRF的攻击方式多样,主要包括以下几种: - **端口扫描**:攻击者可以利用服务端发起请求的能力,对内网或本地的端口进行扫描,获取服务的banner信息。 - **访问本地或内网资源**:通过构造`file://`、`dict://`、`gopher://`等协议,读取本地文件或访问内网服务。 - **攻击内网或本地应用程序**:利用SSRF漏洞访问内网Web应用,识别企业内部资产信息,甚至发起进一步攻击(如SQL注入、Struts2漏洞利用等)。 - **远程攻击**:攻击者可以利用服务端的网络访问权限,作为代理对其他远程服务器发起恶意请求[^4]。 为防止SSRF漏洞,建议采取以下措施: - **严格校验输入**:对用户提供的URL进行白名单校验,限制访问域名或IP地址范围。 - **使用安全库**:使用安全的编码和解码库,避免URL解析过程中出现绕过检测的情况。 - **限制协议类型**:禁止使用危险协议如`file://`、`gopher://`等。 - **设置访问控制**:对服务端发起的请求进行网络访问控制,如限制访问端口、禁止访问私有IP地址等。 - **定期安全测试**:通过渗透测试、代码审计等方式,及时发现并修复潜在的SSRF漏洞[^1]。 以下是一个简单的Java代码示例,展示如何对URL进行白名单校验以防止SSRF攻击: ```java import java.net.URL; import java.util.Arrays; import java.util.List; public class SSRFProtection { // 定义允许访问域名白名单 private static final List<String> ALLOWED_DOMAINS = Arrays.asList("trusted.com", "api.example.com"); public boolean isAllowedUrl(String inputUrl) throws Exception { URL url = new URL(inputUrl); String host = url.getHost(); // 检查域名是否在白名单中 if (!ALLOWED_DOMAINS.contains(host)) { throw new SecurityException("允许访问域名: " + host); } return true; } public static void main(String[] args) { SSRFProtection protector = new SSRFProtection(); try { String userInput = "http://trusted.com/data"; if (protector.isAllowedUrl(userInput)) { System.out.println("URL允许访问"); } } catch (Exception e) { System.err.println(e.getMessage()); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值