JAVA代码审计之XSS漏洞

news2024/12/22 12:51:39

Part1 漏洞案例demo:

没有java代码审计XSS漏洞拿赏金的案例。
所以将就看看demo吧
漏洞原理:关于XSS漏洞的漏洞原理核心其实没啥好说的,网上一查一大堆

反射性XSS漏洞

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>XSS Vulnerable</title>
</head>
<body>
<form action="index.jsp" method="post">
  Enter your name: <input type="text" name="name"><input type="submit">
</form>

<%

    String str = request.getParameter("m");
    <%=str%>
%>

</body>
</html>


image.png

存储型XSS漏洞

存储型XSS漏洞和反射XSS漏洞的核心唯一区别就在于,字段入了数据库,然后又将页面取了出来。

// 留言板页面上的表单提交处理代码
@WebServlet("/postComment")
public class CommentServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 从表单中获取用户输入的评论内容
        String comment = request.getParameter("comment");
        
        // 将评论内容存储到数据库中
        saveCommentToDatabase(comment);
        
        // 重定向回留言板页面
        response.sendRedirect("message_board.jsp");
    }
    
    // 将评论内容存储到数据库中的函数
    private void saveCommentToDatabase(String comment) {
        try {
            // 假设这里使用 JDBC 连接数据库,并执行 SQL 语句将评论内容存储到数据库中
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
            Statement statement = connection.createStatement();
            String sql = "INSERT INTO comments (content) VALUES ('" + comment + "')";
            statement.executeUpdate(sql);
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

message_board.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
    <h1>留言板</h1>
    
    <!-- 留言板评论 -->
    <div id="comments">
        <%-- 这里使用 JSP 脚本块来动态生成评论 --%>
        <% 
            // 假设从数据库中获取留言板评论的数据列表
            List<String> comments = getCommentsFromDatabase();
            for (String comment : comments) {
        %>
            <div class="comment">
                <%= comment %>
            </div>
        <% } %>
    </div>
</body>
</html>

其实漏洞demo,xss的单独漏洞实在没啥可写的
image.png

漏洞组合经典漏洞CS CVE-2022-39197

经典案例CS RCE漏洞
其实这个洞核心不是XSS漏洞,核心还是反射机制导致的问题
漏洞的具体细节这里就不细讲了,给大家简单讲一讲原理:

1.)objectview对象 可以利用反射机制动态的加载classid的类名,且当实例化对象归属于Component的子类或实现类,且类型为string类型以及为public修饰符修饰时,可以进行控制setxxx方法对值进行控制

  <object classid="javax.swing.JLabel">
      <param name="text" value="sample text">
      </object> 

image.png
如上面这个即反射动态加载javax.swing.JLabel这个类名。

2.)apache的batik包中即org.apache.batik.swing.JSVGCanvas对象
满足上面的条件,导致利用set方法可控制uri值及set方法中存在loadSVGDocument方法可以去引用svg进而去调用loadScript方法,而该loadScript方法中如果类型为application/java-archive时,可引入外部一个jar包,且cs可将该jar包实例化为一个对象,进而导致代码执行。

3.)CS的jlabel存在无参数构造方法,可以进行控制setText的值。
进而实现我们展示进程名,主机名这些。

即完整的链:
jlabel中setText控制字段名–>设置字段名为object去引用JSVGCanvas对象调用set方法–>进而控制loadSVGDocument方法–>控制加载svg标签–>svg标签去加载jar包进行实例化,进而代码执行。

实际利用脚本:
cve-2022-39197 cs利用

Part2 进一步分析与思考

漏洞自动化挖掘:

推荐利用fortify
fortify效果:
对于XSS漏洞的审计追踪还是较为友好。

匹配思路:
如果一定要使用匹配思路
就经典正则匹配下面的规则,限定为2条,3条规则即可

getParamter
<%=
param.
${
典型jstl语法思路写的
<c:out
<c:if
<c:forEach
ModelAndView
ModelMap
Model
request.getParameter
request.setAttribute

漏洞进一步思考:

其实XSS的漏洞本身单独从一个漏洞的角度而要,利用效果其实不会特别好。
但是结合其他漏洞,就可以达到1click实现RCE漏洞的效果,如宝塔rce,小皮面板rce,cs rce,蚁剑反制,goby反制均为如此。
除此之外,还可以达到结合csrf实现蠕虫,同源策略问题实现账户接管漏洞,具体就得看怎么玩了。

Part3 后言:

最近看到了很多安全圈的瓜,什么不如保安。
自媒体,社群,朋友圈等等铺天盖地的宣传,安全已死的概念。
怎么说呢?
不太爱评论一些东西,但是还是想说

别太焦虑,也没必要焦虑
有那闲工夫不如多学点东西来的有趣,任何行业再不好都有人能扎根,再好也都会有人淘汰。
所以淘汰的哪个人为啥应该是你?
image.png

自信从容,虚心进步,慢慢成长,以定入世,以律自洽,自行。
共勉
image.png

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

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

相关文章

微服务远程调用Feign

目录 RPC概述 什么是Feign&#xff1f; Ribbon&Feign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 RPC概述 微服务之间如何方便优雅的实…

【Linux进阶之路】Socket —— “UDP“ “TCP“

文章目录 一、再识网络1. 端口号2. 网络字节序列3.TCP 与 UDP 二、套接字1.sockaddr结构2.UDP1.server端1.1 构造函数1.2 Init1.3 Run 2.客户端1.Linux2.Windows 3.TCP1. 基本接口2. 客户端3. 服务端1.版本12.版本23.版本34.版本4 三、守护进程尾序 一、再识网络 1. 端口号 在…

给windows server安装nginx服务

一、先安装chocolatey https://chocolatey.org/install 二、查询nginx包 https://community.chocolatey.org/packages 三、安装nginx choco install nginx 四、通过命令行启动/关闭nginx net stop nginx net start nginx 我开发的chatgpt网站&#xff1a; https://chat.xut…

Unity中URP实现水效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

【Java】类与对象(实验二)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握类的定义与对象的创建。理解构造方法和this关键字的用法。掌握对象对于属性及方法的引用。 二、实验内容 1、编写一个Java程序&#xff0c;定义一个表示学生的类Student&#xff0c;该类包括: (1)这个类的…

C++力扣题目300--最长递增子序列 674--最长连续递增序列 718--最长重复子数组

300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2…

深入理解flinksql执行流程,calcite与catalog相关概念,扩展解析器实现语法的扩展

深入理解Flink Sql执行流程 1 Flink SQL 解析引擎1.1SQL解析器1.2Calcite处理流程1.2.1 SQL 解析阶段&#xff08;SQL–>SqlNode&#xff09;1.2.2 SqlNode 验证&#xff08;SqlNode–>SqlNode&#xff09;1.2.3 语义分析&#xff08;SqlNode–>RelNode/RexNode&#…

R的seurat和python的scanpy对比学习

现在的单细胞分析&#xff0c;往往避免不了scanpy的使用&#xff0c;我们可以通过对比seurat来学习scanpy 今天的格式怎么都改不了。。。手机阅读有点费劲&#xff0c;&#xff0c;推荐电脑阅读。 单细胞数据分析概览 单细胞分析&#xff0c;总流程 python教程 seurat教程 se…

ubuntu20配置protobuf 2.5.0

python安装protobuf包 sudo pip2 install protobuf2.5.0github克隆获取安装包 wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz解压并进入该目录 tar -zxvf Protobuf-2.5.0.tar.gz cd protobuf-2.5.0配置安装环境 sudo …

HTB pwn Dragon Army

逆向分析 程序使用了alloca函数扩大了栈区 此处可以泄露libc的地址 程序主要功能在下面 while ( 1 ){while ( 1 ){fflush(stdin);fflush(_bss_start);fprintf(_bss_start, "\n%sDragons: [%d/%d]%s\n\n", "\x1B[1;34m", v5, 13LL, "\x1B[1;37m"…

【洛谷题解】B2118 验证子串

题目链接&#xff1a;验证子串 - 洛谷 题目难度&#xff1a;入门 涉及知识点&#xff1a;STL函数 题意&#xff1a; 分析&#xff1a;用一个STL内置的find函数 AC代码&#xff1a; #include<bits/stdc.h> /*find用法&#xff1a;string s1&#xff0c;s2;int as1.f…

crmeb多门店商城系统二次开发 增加车辆车牌搜索功能、车辆公里数

1、增加的数据库 ALTER TABLE eb_store_order ADD cart_number VARCHAR(255) NOT NULL DEFAULT COMMENT 车牌 AFTER erp_order_id, ADD curmileage VARCHAR(255) NOT NULL DEFAULT COMMENT 当前里程 AFTER cart_number; ALTER TABLE eb_store_cart ADD cart_number VARCHAR(…

容器_Docker ( 04 )

容器_Docker ( 03 ) 解密云原生 - 集群概述 kubernetes概述 kubernetes起源 如果想要将docker应用于具体的业务实现 , 是存在困难的 – 编排, 管理和调度等各个方面 , 都不容易.于是 , 人们迫切需要一套管理系统 , 对docker及容器进行更高级更灵活的管理 , 于是kubernetes出…

Kotlin filterIsInstance filterNotNull forEach

Kotlin filterIsInstance filterNotNull forEach fun main(args: Array<String>) {val i1 MyItem(1, 1)val i2: MyItem? nullval i3: Int 3val i4 "4"val i5 nullval i6 MyItem(6, 6)val list mutableListOf<Any?>(i1, i2, i3, i4, i5, i6)lis…

蓝牙耳机哪个品牌质量好?2024超高性能机型比拼推荐

​无线耳机已经成为现代生活中的必备数码产品&#xff0c;尤其在感受到无线带来的自由后&#xff0c;很难再适应有线耳机的束缚。因此&#xff0c;耳机市场竞争激烈&#xff0c;各种类型和外观的耳机层出不穷。在此&#xff0c;我为大家总结了五款使用体验很不错的蓝牙耳机&…

静态时序分析:SDC约束命令set_driving_cell详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在上文中&#xff0c;我们不建议使用set_drive命令而是使用set_driving_cell命令&#xff0c;这是一个描述输入端口驱动能力更精确的方法。因为大多数情况下&…

黑马头条-day10

文章目录 app端文章搜索1、文章搜索1.1 ElasticSearch环境搭建1.2 索引库创建①需求分析②ES导入数据场景分析③创建索引和映射 1.3 索引数据同步①app文章历史数据导入ES②文章实时数据导入ES 1.4 文章搜索多条件复合查询①关键词搜索②搜索接口定义 2、搜索历史记录2.1 需求说…

免费的代理IP能用吗?

随着大家对代理IP的认知逐步加深&#xff0c;不可避免地&#xff0c;免费代理IP安全性和潜在风险也越来越关注&#xff0c;今天我们就来一探究竟&#xff0c;这到底是怎么一回事。 首先&#xff0c;我们得了解一下代理IP。 代理IP是指作为中介的服务器&#xff0c;它能够代理用…

java.lang.IllegalStateException: Promise already completed.

spark submit 提交作业的时候提示Promise already complete 完整日志如下 File "/data5/hadoop/yarn/local/usercache/processuser/appcache/application_1706192609294_136972/container_e41_1706192609294_136972_02_000001/py4j-0.10.6-src.zip/py4j/protocol.py"…

修改单据转换规则后保存报错提示

文章目录 修改单据转换规则后保存报错提示 修改单据转换规则后保存报错提示