`
tcspecial
  • 浏览: 901898 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 反射攻击

    博客分类:
  • java
阅读更多

 

Java反射机制指的是程序在运行时能够获取自身的信息;它能动态截获或改写程序的行为。

 

1. 单例模式漏洞

/**
 * 懒汉式单例模式
 */
public class Singleton {
	private static Singleton instance = null;

	private Singleton() {

	}

	public static synchronized Singleton getInstance() {
		if( instance == null ){
			instance = new Singleton();
		}

		return instance;
	}
}

 

常规情况下,只能通过 getInstance() 创建实例;但是通过反射可以直接调用private方法创建实例。

/**
 * 单例反射攻击
 */
public static void singletonTest() throws Exception {
	Class<Singleton> clazz = (Class<Singleton>)Class.forName( "com.sun.Singleton" );

	Constructor<Singleton> constructor = clazz.getDeclaredContructor( null );
	constructor.setAccessible( true );	// 允许访问私有属性,跳过权限检查

	// 成功创建多个实例
	Singleton s1 = constructor.newInstance();
	Singleton s2 = constructor.newInstance();
}

 解决方案:在无参构造函数中再次检测instance是否存在。

 

2. 泛型漏洞

面试题:

给一个ArrayList<Integer>的一个对象,要在这个集合中添加一个字符串数据,如何实现呢?

大家都知道,泛型约束了集合的数据类型,添加非Integer数据会引起编译错误。

 

/**
 * 反射突破泛型检测
 */
public static void addString() throws Exception {
	List<Integer> list = new ArrayList<Integer>();
	list.add( 1 );
	
	// Get class
	Class<? extends List> clazz = list.getClass();
	// Get add method
	Method method = clazz.getMethod( "add", Object.class );

	// invoke 
	Object obj = method.invoke( list,  "str1" );
	obj = method.invoke( list, "str1" );
	obj = method.invoke( list, "str2" );
	
	// print
	for( Object i : list ){
		System.out.println( "Val: " + i );
	}
}

 

上述代码成功绕开泛型检测,执行结果如下:

Val: 1

Val: str1

Val: str2

 

 

 

 

 

分享到:
评论

相关推荐

    反射型xss攻击代码.rar

    Java作为一种广泛使用的后端开发语言,也可能会成为反射型XSS攻击的目标。下面我们将深入探讨这种攻击方式以及如何利用Java来实施和防御。 **一、反射型XSS攻击原理** 1. **攻击过程**:攻击者构造一个包含了恶意...

    Java安全漫谈 - 01.反射篇(1)1

    Java 反射机制安全漫谈 Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时访问和修改类的信息。然而,这种功能也引入了安全隐患。本文将讨论 Java 反射机制的安全问题,重点介绍反射机制的基本概念、...

    Java反射机制.工作原理

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,从而实现动态类型的功能。通过反射,我们可以在代码执行期间动态地创建对象、调用方法、访问和修改字段,这...

    通用Java反射型漏洞检测模型研究.zip

    Java反射是一种强大的编程特性,允许程序在运行时检查和修改其自身的行为。它在许多高级功能中起到关键作用,如动态加载类、访问私有成员以及调用未公开的方法。然而,这种灵活性也引入了安全风险,特别是当不正确或...

    PatchLib,告别Java反射!.zip

    PatchLib是一个开源项目,主要目的是为Java开发者提供一个替代传统反射机制的解决方案。在Java编程中,反射是一种强大的工具,允许程序在运行时检查并操作类、接口、字段和方法,但同时也带来了性能开销和安全性问题...

    奇安信安全扫描漏洞解决路径遍历和存储型xss和反射xss攻击漏洞

    亲测可用,中级漏洞,解决服务器段请求伪造 final String forURL = ESAPI.encoder().encodeForURL(url); restTemplate.exchange(forURL, HttpMethod.GET,new HttpEntity&lt;String&gt;(headers), List.class, params);

    Java安全漫谈 - 02.反射篇(2)1

    总结起来,Java反射在安全领域扮演着重要角色,它允许攻击者绕过常规的访问限制,直接操作类和对象,但也为防御者提供了代码审计和安全控制的手段。理解和熟练掌握反射机制是提升Java安全能力的关键步骤。

    java 预防XSS攻击

    在Java开发过程中,XSS(Cross Site Scripting)攻击是一种常见的安全威胁,它允许攻击者在用户的浏览器上执行恶意脚本。XSS攻击通常发生在Web应用程序未能充分验证或过滤用户输入的情况下,使得恶意代码能够被嵌入...

    Java安全漫谈 - 03.反射篇(3)1

    这种方法可以用来绕过常规的访问控制,但同时也可能导致安全问题,因为攻击者可能会滥用反射来执行原本不应被公开调用的私有成员。 在进行代码审计和安全分析时,理解并正确处理这些反射机制至关重要。不恰当的反射...

    java hack_hacks_

    反射攻击是Java特有的安全挑战,它利用了Java的反射API来访问私有成员或执行非公开操作。虽然反射在某些情况下是必要的,但滥用可能导致安全漏洞。因此,限制对敏感类和方法的反射访问,并使用适当的访问控制是必要...

    行业分类-设备装置-基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击.zip

    Java沙箱逃逸攻击是指恶意代码试图突破Java安全模型的限制,获取系统级权限或执行非授权操作的行为。为了防止这种攻击,开发者可以利用Java字节码插桩和方法挂钩技术来增强应用的安全性。本文将深入探讨这两种技术...

    JAVA防止XSS注入,附jar包

    攻击方式有反射型、存储型和DOM型三种,每种都有其特定的攻击途径和防范策略。 为了防止XSS注入,Java开发者可以采取以下措施: 1. **输入验证**:对用户提交的所有数据进行严格的验证,确保它们符合预期的格式。...

    动态查询oracle加反射

    Java反射API允许我们在运行时获取关于类、接口、字段和方法的信息,并能在运行时调用私有方法、访问私有字段。以下是如何使用反射创建对象并调用其方法的例子: ```java Class&lt;?&gt; clazz = Class.forName(...

    java动态特性eval

    Java反射API允许我们在运行时检查类、接口、字段和方法的信息,甚至能够在运行时调用私有方法或访问私有字段。在模拟`eval()`功能时,我们可能需要使用`Class.forName()`加载类,`Method.invoke()`执行方法,或者`...

    Java 2 Java 2

    4. **反射API**:Java 2的反射API使得在运行时可以检查和操作类、接口、字段和方法,大大增强了代码的灵活性和可维护性。 5. **安全模型**:Java 2的安全模型进行了强化,增加了细粒度的权限控制,以保护应用程序免...

    Java知识的讲解(一些JAVA方面知识热点)

    对于高级主题,如Java反射、注解、模块系统以及Java 8及更高版本引入的Lambda表达式和流API,也是Java开发者提升技能的重要部分。 在学习Java的过程中,阅读官方文档、参与开源项目、编写实际应用以及不断练习是...

    Java的各种实验包括反射,算法,多线程,面试题,springboot,shiro,valid,XSS,CSRF防御

    Java反射是Java语言的一个重要特性,允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和修改属性。通过反射,开发者可以实现元编程,即在程序运行时检查和操作对象的内部结构,增强了代码的...

    (JAVA 版本的 官方经典PHash算法).zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

    根据java文件动态生成Mysql表.rar

    这一过程涉及到了几个关键的技术点,包括Java反射、Java编译API以及MySQL的JDBC操作。 首先,让我们深入了解Java的动态编译。Java提供了JavaCompiler接口,它是Java编译API的一部分,允许我们在运行时编译源代码。...

    分页组件+反射分页组件+反射分页组件+反射

    而反射是Java等面向对象编程语言中的一种核心特性,它允许运行中的代码检查自身的信息并操作类、接口、方法等。将分页组件与反射相结合,可以实现更加灵活和动态的分页功能。下面我们将深入探讨这两个知识点。 首先...

Global site tag (gtag.js) - Google Analytics