首页 技术 正文
技术 2022年11月14日
0 收藏 761 点赞 3,887 浏览 1967 个字

SSRF安全威胁在JAVA代码中的应用

如上图所示代码,在进行外部url调用的时候,引入了SSRF检测:ssrfChecker.checkUrlWithoutConnection(url)机制。

SSRF安全威胁:

  很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。当攻击者提供的是一个企业私网IP时,服务器可能会访问对应网址后,把结果返回,这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。

      如果应用程序对用户提供的URL和远端服务器返回的信息没有进行合适的验证和过滤,就可能存在这种服务端请求伪造的缺陷。Google,Facebook,Adobe,baidu,tencent等知名公司都被发现过这种漏洞。攻击者利用ssrf可以实现的攻击主要为绕过网络限制攻击企业内网:

  • 信息收集:可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
  • 信息收集:对内网web应用进行指纹识别,通过访问默认文件实现;
  • 执行指令:攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
  • 执行指令(溢出):攻击运行在内网或本地的应用程序(比如溢出);
  • 信息收集:利用file协议读取本地文件等。

 以下业务场景容易出现这种漏洞:

1、应用从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户;

2、应用获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据;

3、应用根据用户提供的URL,抓取用户的web站点,并且自动生成移动wap站;

4、应用提供测速功能,能够根据用户提供的URL,访问目标站点,以获取其在对应经纬度的访问速度;

SSRF安全威胁在JAVA代码中的应用

如上图代码,黑客可以通过如下方式:

http://xxx.alibaba-inc.com/ajax/Hservice.do?url=http://172.24.191.64:3333/aaa.htm&_mf_req={"xx":"xx"}&charset=utf8&_mf_callback=2222

针对上述问题,解决方案如下:

(1)判断业务需求是否只需要对几个特定的域名作请求。如果是,将这几个特定的域名加入到白名单,拒绝白名单域名之外的请求。
(2)判断业务方请求来源是否为固定的几个IP或域名。如果是,将这几个特定的IP/域名加入到白名单,拒绝白名单域名之外的请求。
(3)如果业务需求向任意URL发送请求,需要请求前通过安全包提供的函数来判断,如果业务需要跟随302跳转,每次请求时都需要经过安全包函数判断。
(4)如果在情况3的前提下,不能使用安全包需要让开发自己实现SSRF修复逻辑。
(5)其他情况拉安全工程师一起判断。

附:

1.解决jar包冲突:引入jar包的过程中,出现了jar包冲突,导致编译正常,运行时找不到类而抛错误。通过查看jar包依赖,使用exclusion来排除jar包。通过mvn dependency:tree或者open with Maven POM  Editor.jar包仲裁机制。

2.NoClassDefFoundError和ClassNotFoundException的区别。NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。   

  NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。

参考地址:

1.http://www.freebuf.com/articles/web/20407.html

2.阿里jar包仓库:http://mvnrepo.alibaba-inc.com/nexus/

上一篇: koa redis 链接
下一篇: table表格的属性
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905