Java代码审计安全篇-SSRF(服务端请求伪造)漏洞

这篇具有很好参考价值的文章主要介绍了Java代码审计安全篇-SSRF(服务端请求伪造)漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油

注意:

本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望各位博主 师傅 大佬 勿喷,还希望大家指出错误

SSRF漏洞 

SSRF(Server-side Request Forge, 服务端请求伪造)。
由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务。

危害:

1.获取内网主机、端口、banner信息

2.对内网的应用程序 进行攻击,例如Redis、jboos

3.file等伪协议读取文件

4.造成内网程序的溢出

SSRF审计函数 

SSRF漏洞一般位于远程图片加载与下载、图片或文章收藏功能、URL分享、通过URL在线翻译、转码等功能点处。当然,SSRF是由发起网络请求的方法造成。代码审计时需要关注的发起HTTP请求的类及函数,部分如下:

HttpURLConnection. getInputStream
URLConnection. getInputStream
Request.Get. execute
Request.Post. execute
URL.openStream
ImageIO.read
OkHttpClient.newCall.execute
HttpClients. execute
HttpClient.execute
……

Java里面SSRF支持的协议:

https,https,file,ftp等 

所以使得JAVA并不能像PHP中一样使用gopher 协议来拓展攻击面,gopher 协议在jdk8 中就被移除了

gopher协议在SSRF中使用可以看下面这篇文章

gopher 协议在SSRF 中的一些利用

 我们直接进入Webgoat的靶场进行测试

点击第二关得到

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审

根据提示我们输入 jerry

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审 

这时候就说明 传入的参数可控,产生了SSRF漏洞

我们看一下源代码

@RestController
@AssignmentHints({"ssrf.hint1", "ssrf.hint2"})
public class SSRFTask1 extends AssignmentEndpoint {

  @PostMapping("/SSRF/task1")
  @ResponseBody
  public AttackResult completed(@RequestParam String url) {
    return stealTheCheese(url);
  }

  protected AttackResult stealTheCheese(String url) {
    try {
      StringBuilder html = new StringBuilder();

      if (url.matches("images/tom\\.png")) {
        html.append(
            "<img class=\"image\" alt=\"Tom\" src=\"images/tom.png\" width=\"25%\""
                + " height=\"25%\">");
        return failed(this).feedback("ssrf.tom").output(html.toString()).build();
      } else if (url.matches("images/jerry\\.png")) {
        html.append(
            "<img class=\"image\" alt=\"Jerry\" src=\"images/jerry.png\" width=\"25%\""
                + " height=\"25%\">");
        return success(this).feedback("ssrf.success").output(html.toString()).build();
      } else {
        html.append("<img class=\"image\" alt=\"Silly Cat\" src=\"images/cat.jpg\">");
        return failed(this).feedback("ssrf.failure").output(html.toString()).build();
      }
    } catch (Exception e) {
      e.printStackTrace();
      return failed(this).output(e.getMessage()).build();
    }
  }
}

主要看下面几行代码

public AttackResult completed(@RequestParam String url) {
    return stealTheCheese(url);
  }
// completed() 方法使用 @PostMapping 注解标记,表示它处理HTTP POST请求,并且映射到路径 "/SSRF/task1"。该方法接受一个名为 "url" 的请求参数,类型为字符串。

 意思就是接受url的参数 并映射到到路径 "/SSRF/task1

然后看下一句

 protected AttackResult stealTheCheese(String url) {
    try {
      StringBuilder html = new StringBuilder();
//stealTheCheese() 方法是一个受保护的方法,用于处理传入的URL并返回相应的结果。它接受一个名为 "url" 的字符串参数。

方法逻辑:stealTheCheese() 方法首先创建了一个 StringBuilder 对象 html,用于构建HTML响应。

就是很明显没有对这个url进行过滤处理等,然后 就直接进入下面的url匹配,

    这段代码是一个简单的SSRF攻击任务处理器。它接受一个URL作为输入,并根据URL的不同返回不同的HTML响应。然而,代码中存在一些潜在的安全风险,因为它没有对传入的URL进行充分的验证和过滤,可能导致安全漏洞,如SSRF攻击。

我们接着看下一关

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审

我们先点击看看会是啥样

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审 我们还是根据提示进行输入

url=http://ifconfig.pro

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审 验证成功

Java代码审计安全篇-SSRF(服务端请求伪造)漏洞,JAVA代码安全审计,java,代码复审 

说明url参数可控,可以通过恶意语句进行对内网主机信息的获取 

我们分析源代码

@RestController
@AssignmentHints({"ssrf.hint3"})
public class SSRFTask2 extends AssignmentEndpoint {

  @PostMapping("/SSRF/task2")
  @ResponseBody
  public AttackResult completed(@RequestParam String url) {
    return furBall(url);
  }

  protected AttackResult furBall(String url) {
    if (url.matches("http://ifconfig\\.pro")) {
      String html;
      try (InputStream in = new URL(url).openStream()) {
        html =
            new String(in.readAllBytes(), StandardCharsets.UTF_8)
                .replaceAll("\n", "<br>"); // Otherwise the \n gets escaped in the response
      } catch (MalformedURLException e) {
        return getFailedResult(e.getMessage());
      } catch (IOException e) {
        // in case the external site is down, the test and lesson should still be ok
        html =
            "<html><body>Although the http://ifconfig.pro site is down, you still managed to solve"
                + " this exercise the right way!</body></html>";
      }
      return success(this).feedback("ssrf.success").output(html).build();
    }
    var html = "<img class=\"image\" alt=\"image post\" src=\"images/cat.jpg\">";
    return getFailedResult(html);
  }

  private AttackResult getFailedResult(String errorMsg) {
    return failed(this).feedback("ssrf.failure").output(errorMsg).build();
  }
}

 咱们主要关注下面两行代码

public AttackResult completed(@RequestParam String url) {
    return furBall(url);
  }completed() 方法使用 @PostMapping 注解标记,表示它处理HTTP POST请求,并且映射到路径 "/SSRF/task2"。该方法接受一个名为 "url" 的请求参数,类型为字符串。

  protected AttackResult furBall(String url) {

//furBall() 方法是一个受保护的方法,用于处理传入的URL并返回相应的结果。它接受一个名为 "url" 的字符串参数。

下面就是常规的正则匹配,总体而言,这段代码是另一个简单的SSRF攻击任务处理器。它接受一个URL作为输入,并尝试访问该URL获取HTML内容,并根据结果返回相应的响应。如果访问成功,则返回包含HTML内容的成功响应;如果访问失败,则返回一个包含特定错误消息的失败响应。

具体的JAVA中 SSRF漏洞可以访问

https://www.freebuf.com/vuls/293473.html

SSRF修复 

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip,(正确判断内网IP,正确获取host)

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

6.正确处理302跳转 

 文章来源地址https://www.toymoban.com/news/detail-840282.html

 

到了这里,关于Java代码审计安全篇-SSRF(服务端请求伪造)漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。  环境准备 示例: 假设用户在银行网站A上登录并保持会话活动,同时他也在浏览其他网站。攻击者在一个不可信任的网站B上创建了一个恶意链接,当用户点击该链接时,会自动向银行网站A发送一个

    2024年02月10日
    浏览(55)
  • Web漏洞之SSRF(服务器端请求伪造)

    服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的缺陷。“请求伪造”,顾名思义,

    2024年02月04日
    浏览(48)
  • 【burpsuite安全练兵场-服务端9】服务端请求伪造SSRF漏洞-7个实验(全)

       博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书等。 擅长:

    2024年02月02日
    浏览(45)
  • SSRF 服务器端请求伪造

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端 提供了从其他服务器应用获取数据的功能 ,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 数据流:攻击者----

    2024年02月12日
    浏览(47)
  • PHP代码审计8—SSRF 漏洞

    1、漏洞原理与防御方法 1) 漏洞原理 SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能,并且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。 2)防御方法 过滤返

    2024年02月09日
    浏览(41)
  • 【CTF】SSRF服务器端请求伪造

    漏洞危害: 扫描内网开放端口服务 向内网中的任意主机的任意端口发送payload来攻击内网服务 向内网发动DOS攻击 攻击内网的Web应用(如直接SQL注入、XSS攻击等) 利用file、gopher、dict协议来读取本地文件、执行命令等 漏洞原理: 从pikachu中来看: 例子: 然后,使用百度翻译翻

    2024年02月04日
    浏览(34)
  • OWASP之SSRF服务器伪造请求

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击 的Web应用程序发送精心设计的请求的对其他网站进行攻击。 SSRF攻击的目标是从外网无法访问的内部系统。利用一个可以发起网络请求的服务,当做跳板来攻击其它服务。简单来说就是:A让B帮忙访问C

    2024年02月10日
    浏览(36)
  • SSRF服务器请求伪造原理和pikachu靶场实验

    ★★ 免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、SSRF简介 SSRF全称:Server-Side Request Forgery,服务器端请求伪造,是指攻击者能够从易受攻

    2024年03月13日
    浏览(49)
  • API安全——SSRF服务端请求伪造的原理以及防范

    SSRF全称Server-Side Request Forgery,服务端请求伪造。 在最新的2023 OWASP中API 安全的Top10榜单中,ssrf排第7。 我们在开发过程中,通常使用API 获取远程时出现服务器端请求伪造 (SSRF) 缺陷 资源,而不验证用户提供的 URL。它使攻击者能够 强制应用程序将精心编制的请求发送到意外

    2024年02月12日
    浏览(40)
  • 网络安全进阶学习第四课——SSRF服务器请求伪造

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击。 一般情况下, SSRF攻击的目标是从外网无法访问的内部系统,也就是内网。 利用一个可以发起网络请求的服务,当做跳板来攻击其它服务 SSRF 形

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包