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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安装yum(Ubuntu中的安装,带讲解,以及源的更新)

    安装yum(Ubuntu中的安装,带讲解,以及源的更新)Ubuntu 中 yum 的安装 带讲解 先放上我这只菜鸟的绝望 在网上找了好久都搞不定 那些文章都不带人思考 一路给一堆命令 然而都搞不定 白瞎了 或者说我实在太菜 冷静 calmdown 重要的一步 我们来分析一下 这边说的是在软件包里面无法定位 yum 问题是什么 怎么解决直接的问题呢 right 直接的解决方法就是去更新软件包 而那种去找各种代码来安装 yum 的 只要源一修改 什么软件没

    2025年6月23日
    3
  • 使用fiddler抓包工具替换网站文件

    使用fiddler抓包工具替换网站文件

    2022年2月20日
    82
  • Android ConstraintLayout百分比布局使用详解

    Android ConstraintLayout百分比布局使用详解AndroidConstraintLayout是谷歌推出替代PrecentLayout的组件。支持相对布局、线性布局、帧布局,笔者看来更像是FrameLayout、LinearLayout、RelativeLayout三者的结合体,并且比这三者更强大的是实现了百分比布局,大家都知道安卓碎片严重,使用百分比适配,那么将彻底解决适配问题。本文将教会你如何使用此控件。一、当作Relative…

    2022年5月18日
    40
  • java 高效列转行,java 列转行「建议收藏」

    java 高效列转行,java 列转行「建议收藏」一个员工在多个部门内,一个部门有多个员工List———–>Map>1.部门类publicclassDept{publicDept(Stringid){this.id=id;}privateStringid;//省略get,set方法}2.员工类publicclassUser{publicUser(Stringid)…

    2022年6月25日
    27
  • 双系统轻松卸载Vista系统攻略

    双系统轻松卸载Vista系统攻略☆使用DaemonTools加载Vista光盘映像(或者放入Vista光盘)  ☆打开“运行”(开始〉运行),输入cmd  ☆输入X:(X代表你的虚拟光驱盘符)  ☆输入cdboot  ☆输入bootsect/nt52SYS(使用启动修复程序改变系统盘启动管理器)  ☆重新启动,Vista的启动管理器已经消失了  ☆删除在启动盘中的:

    2022年10月12日
    4
  • 万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程

    万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程在大学时学习Hadoop大数据技术的时候,安装配置Hadoop框架,发现找的一些资料介绍得不够详细,比如一些路径的变化没有说清楚,这对于初学者来说是不够友好的,所以在这里做个详细总结介绍一下Hadoop框架,以及Ubuntu版本的Hadoop伪分布式的安装配置。

    2022年6月14日
    44

发表回复

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

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