freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

细学《Magic In Java API》(hessian部分)
2023-09-02 13:03:35

前言

这篇文章主要是对yemoliR1ckyZ在KCON2023中的议题《Magic In Java API》的一次学习记录

对应的slide可以在https://github.com/knownsec/KCon/tree/master/2023中获取

概述

该议题的结构如下

  1. API的介绍

  2. 该API在各个框架或者组件能够的影响细节

  3. 在RASP中利用该API的小技巧

  4. 根据各个组件的修复方式总结了一些有效的防御措施

API介绍

议题中API指代的就是sun.print.UnixPrintServiceLookup这个类

image-20230826232547663.png

这是一个用于打印服务注册的功能的接口

一个用于查找可用的打印机服务

public static void main(String[] args) throws IOException {
    // 获取 UnixPrintServiceLookup 实例
    PrintServiceLookup lookup = (PrintServiceLookup) PrintServiceLookup.lookupDefaultPrintService();

    // 使用 UnixPrintServiceLookup 查找所有可用的打印服务
    PrintService[] printServices = lookup.getPrintServices();

    if (printServices.length == 0) {
        System.out.println("No printers available.");
    } else {
        System.out.println("Available printers:");
        for (PrintService printer : printServices) {
            System.out.println(printer.getName());
        }
    }
}

在windows中对应的功能是在Win32PrintServiceLookup中实现的

public static void main(String[] args) {
    // 获取 PrintServiceLookup 实例
    // 获取所有可用的打印服务
    PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);

    if (printServices.length == 0) {
        System.out.println("No printers available.");
    } else {
        System.out.println("Available printers:");
        for (PrintService printer : printServices) {
            System.out.println(printer.getName());
        }
    }
}

UnixPrintServiceLookup初始化的时候

image-20230830221252242.png

创建了一个PrinterChangeListener监听器,是一个线程类,不断的更新服务

image-20230830221529635.png

过程中存在有可能利用的点getAllPrinterNamesBSD方法中

image-20230830222226574.png

image-20230830222330793.png

存在有命令执行的位置,传入的参数是在lpcAllCom数组中的其中一个元素

如果我们能够控制传入的参数就能够达到RCE的目的

之后就是从修改类属性的”不同方法“的角度来阐明该API可能导入RCE的情况

  1. 想要更改类的属性值,我们常用的结合反序列化可以通过java

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录