Java 审计之SSRF篇(续)

Java审计之SSRF篇(续)0x00前言先来说说为啥会有该篇章,在刚刚码完上篇文章后,后来又去找了找在Java中的一些远程请求的类。果然翻到了一些有意思的东西,在这里就拿出来给大家分享一下。

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java 审计之SSRF篇(续)

0x00 前言

先来说说为啥会有该篇章,在刚刚码完上篇文章后,后来又去找了找在Java中的一些远程请求的类。果然翻到了一些有意思的东西,在这里就拿出来给大家分享一下。

0x01 imageIO中的SSRF

imageIO类是jdk中自带的一个类,主要用于操作一些图片文件。比如读写、压缩图片。

ssrf 类:

public class ssrf {
    public static BufferedImage read(URL url) throws IOException {
        if (url == null) {
            System.out.println("输入内容为空");
        }


        InputStream  istream = url.openStream();
        ImageInputStream stream =  ImageIO.createImageInputStream(istream);  //获取文件流


        BufferedImage bi = ImageIO.read(stream);  //返回 BufferedImage作为供给的解码结果

        return bi;
    }
}

servlet:

@WebServlet("/httpclientServlet")
public class httpclientServlet extends HttpServlet {


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String geturl = request.getParameter("url");
        ServletOutputStream outputStream = response.getOutputStream();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        URL url = new URL(geturl);
        BufferedImage image = ssrf.read(url);

        ImageIO.write(image, "png", os);
        InputStream input = new ByteArrayInputStream(os.toByteArray());
        int len;
        byte[] bytes = new byte[1024];
        while ((len = input.read(bytes)) > 0) {
            outputStream.write(bytes, 0, len);
        }


    }

}

写完后来测试一下,先来测试一下传入一个图片的url试试。

Java 审计之SSRF篇(续)

成功输出出来了。证明远程请求图片的功能是没问题的。

再来读取一下本地文件试试

Java 审计之SSRF篇(续)

发现报错了 貌似读取不了除了图片以外的文件。

再来尝试一下读取本地的图片试试

Java 审计之SSRF篇(续)

读取成功,看来只能读取图片。

但这里发现一个东西,就是文件虽然不能读取,但是可以看到该文件存不存在。

Java 审计之SSRF篇(续)

Java 审计之SSRF篇(续)

如果文件不存在的话会显示找不到指定文件,而存在但文件不为图片文件的话则显示image==null。

HttpClient下的SSRF

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpClient client = new HttpClient();
HttpGet getRequest = new HttpGet(url);
HttpResponse response = httpClient.execute(getRequest);

OkHttp 下的SSRF

 Request request = new Request.Builder()
      .url("http://publicobject.com/helloworld.txt")
      .build();

  Response response = client.newCall(request).execute();

HttpRequest

HttpRequest request = HttpRequest.get("http://www.baidu.com",true,'q',"baseball gloves","size",100);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119920.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • asp.net(c#)的货币格式化

    asp.net(c#)的货币格式化

    2021年8月7日
    58
  • 函数依赖关系的例子_部分函数依赖

    函数依赖关系的例子_部分函数依赖这里写自定义目录标题完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:2.部分函数依赖:传递函数依赖:完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:通过{学生学号,选修课程名}可以得到{该生本门选修课程的成绩},而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}2.部分函数依赖:通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓

    2025年5月25日
    3
  • 模拟城市完美布局平面图_css四大布局

    模拟城市完美布局平面图_css四大布局我们之前已经学过一些布局模型,比如说浮动,绝对定位等等,但是这些布局方式一是不够简洁,而是使用的范围确实是太窄了。flex模型拥有比较多的属性,来设置多样的布局方式,接下来我们就详细介绍各种属性对布局的改变,最后再对属性做一个汇总先看一下flex的基本模型,如下图所示:container父容器里有三个子元素flex-item。当给父容器设置display:flex;直接子元素就有布…

    2025年6月15日
    2
  • matlab数学建模人口预测模型_三层bp神经网络模型图

    matlab数学建模人口预测模型_三层bp神经网络模型图对中国1949年-2019年的人口特征数据进行分析,基于BP神经网络模型在matlab上实现,对中国每年增长人口数量进行预测。

    2025年9月15日
    6
  • 黑客入门 | 什么是踩点[通俗易懂]

    黑客入门 | 什么是踩点[通俗易懂]踩点就是收集目标信息的技巧,通过踩点找寻你感兴趣的信息。《孙子兵法》曰:“知已知彼,百战不殆;不知彼而知己,一胜一负;不知彼不知己,每战必殆。”通过对目标进行有计划,有步骤的踩点,收集整理出一份关于该目标的信息安防现状完整剖析图。收集方面:因特网、内联网、远程访问、外联网因特网主要收集:域名、网络地址和子网、可以直接从因特网访问的各个系统的具体IP地址、已经被发现的各个系统上运行的TCP和…

    2022年5月15日
    109
  • 承包商正在跟上IT的步伐 (美国)

    承包商正在跟上IT的步伐 (美国)

    2021年7月22日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号