- 博客(121)
- 资源 (5)
- 收藏
- 关注
原创 CVE-2016-1000031 Apache Commons FileUpload 反序列化漏洞深入分析
反序列化漏洞最近一直不得安宁,先有Apache Commons Collections通过反序列化实现远程代码执行,再有Spring RMI 反序列化漏洞,最新又有了common upload file的反序列化漏洞CVE-2016-1000031(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1000031)漏洞原因先来看
2017-02-20 15:45:26 14563
原创 Java 8 动态类型语言Lambda表达式实现原理分析
Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标。
2017-02-07 17:22:18 13623 10
原创 Java XML XXE 底层防御
JavaXML相关API是由JAXP定义了相关的XML的通用接口,常见包括DOM/SAX/STAX/XPATH 的标准APIJavax.xml.parsers -> DOM/SAXJavax.xml.stream -> STAXJavax.xml.xpath -> XPATHJavax.xml.bind -> JAXBjavax.xml.ws
2016-12-07 22:10:02 6570
原创 Httpoxy漏洞看Java与CGI如何交互
具体漏洞详情在https://httpoxy.org/1 什么是CGICGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的
2016-07-22 23:33:27 1443 2
原创 Java命令注入之防护
1 Java中的命令注入在Java中的Runtime.getRuntime本质就是使用ProcessBuilder,以ProcessBuilder里用ProcessImpl,start 的一个子进程执行命令,Java的native调用a. Windows是CreateProcessW 创建子进程执行命令b. Unix中以enecve 来创建子进程执行命令
2016-07-16 23:24:34 15538 1
原创 Java对象反序列化防护
最近一直曝光的开源软件第三方反序列化漏洞:CVE-2015-7501Commons Collections Java反序列化漏洞Springframework 反序列化RCE漏洞都是由于Java对象反序列化本身设计本身缺陷造成的1.1 Java对象反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这
2016-07-07 23:14:22 4617 1
原创 Java Instrument (六) 动态重定义Class
在上篇博客(http://blog.csdn.net/raintungli/article/details/51646556)中提到了在on_attach的方式上如何重新定义class,里面也提到了最后attach时候会调用我们自定义的agent class的agentmain方法,在看Instrumentation的接口,里面本身提供了redfineClasses的方法也就是agentmai
2016-06-13 23:03:00 10940 1
原创 Java Instrument (五) Agent attach
首先先参考笔者前期的博客(http://blog.csdn.net/raintungli/article/details/7034005),先了解在jvm启动的过程中的两个线程Signal Dispatcher和Attach Listener在博客中,已经探讨了在Attach Listener 的线程在linux环境中创建了socket的文件,接着我们的关注点讲成为客户端如何写这个文件。
2016-06-12 23:22:26 6231
原创 Java Instrument(一) Java Agent
1 AgentAgent在java中本质是一个动态库,利用JVMTI暴露出来的一些接口实现逻辑的入侵,需要实现如下的一个或者多个函数:JNIEXPORT jint JNICALLAgent_OnLoad(JavaVM *vm, char *options, void *reserved);JNIEXPORT jint JNICALLAgent_OnAttach(JavaV
2016-06-06 09:36:36 5916
原创 防XSS的输出编码规则
网上相关资料比较少,这里收集一下防止跨站脚本(XSS)相关的关键输出编码机制编码类型编码机制HTML实体编码 1. 字符 , . - _ 空格 不需要转码2. 字母(a-z, A-Z)数字(0-9)不需要转码3. 转换 & 为 &amp;4. 转换 < 为 &lt;5. 转换 > 为 &gt;6. 转换 " 为 &quot;7. 其...
2016-04-29 14:15:09 8580 2
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(七)利用寄存器攻击
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(七)利用寄存器攻击
2015-02-23 10:43:30 3346
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(六)固定地址的栈溢出攻击
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(六)固定地址的栈溢出攻击
2015-02-23 10:40:40 2895 1
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(五)栈溢出原理
在前面的系列中,已经提到了方法调用关系中栈空间是如何布局的,而造成栈溢出的主要原因是有些函数没有越界检查,最后导致了栈的溢出,也就是栈的空间被人为的重新布局。大家重新在看这张栈的图方法A调用方法B, 当B方法执行退出的时候,首先rbp指针指回方法A的函数入口地址,然后把rip 赋值到返回地址也就是当A call B的地址,而在图上返回地址就在B方法的调用栈的上方(栈是从高位到低位分配的
2015-02-23 10:39:36 2615
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(四)linux下进程内存布局
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(四)linux下进程内存布局
2015-02-23 10:37:59 2585
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(三)linux下进程中的多用户
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(三)linux下进程中的多用户
2015-02-23 10:37:01 3028
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(二)shellcode
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(二)shellcode
2015-02-23 10:34:51 9525
原创 栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(一)函数如何执行
栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(一)函数如何执行
2015-02-23 10:32:56 3997
原创 java中的SecureRandom在linux中的实现
在安全系统中,通常我们会使用securerandom去更安全的生成随机数,而默认的SecureRandom里使用的算法是SHA1PRNG。 Linux中的随机数发生器在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。/dev/random在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的
2015-01-19 19:52:28 25738 5
原创 Linux下关于TCP的keep alive的实现源码分析
TCP下的Keep Alive我们常说的TCP的keep alive,就是为了保证连接的有效性,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。通常上层应用会自己提供心跳检测机制,而Linux内核本身也提供了从内核态确保连接有效性的方式。在sock 函数中可以设置是否需要打开keep alive开关,默认建立socket 是关闭keep alive的。代码如下 opt
2015-01-14 21:14:49 4906
原创 不要在linux上使用java 7 Files的接口参数StandardOpenOption.DELETE_ON_CLOSE
最近在看安全代码规范建议中提到关于如何删除创建的临时文件,推荐使用jdk7中的Files的函数,通过参数StandardOpenOption.DELETE_ON_CLOSE来控制代码示例BufferedWriter writer = Files.newBufferedWriter(tempFile, Charset.forName("UTF8"), StandardOpenOption.D
2015-01-07 19:50:17 4222
原创 Java (JDK7)中的String常量和String.intern的实现
Java中的String常量和String.intern的实现
2014-08-16 10:15:22 8070 4
原创 linux里的backlog详解
说起backlog, 都会想起socket编程中的listen backlog 参数,而这个backlog 是linux内核中处理的backlog么?int listen(int sockfd, int backlog)man listen 可以看到关于listen 的解释The backlog argument defines the maximum length to wh
2014-07-18 19:00:59 39333 5
原创 JVM源码系列:ThreadMXBean 打出堆栈信息原理分析
我们通常会使用工具jstack 去跟踪线程信息,其如何实现使用attach 的方式还是ptrace 的方式,这些可以去参考本人的博客的其他文章。但这些方式都是外部使用的方式,如何直接使用java代码得到当前进程的线程的信息,方便监控jvm的整个运行状态,就不的不提到了ManagementFactory通过调用方法ThreadMXBean tmbean = ManagementFacto...
2014-03-15 16:28:21 6751 2
原创 java JNI 实现原理 (六) 调用JNI方法
在前面的博客中提到过调用的JNI的entry是generate_native_entry,也就是说方法generate_native_entry是最终调用的我们的c++写的库文件里的方法
2013-11-16 11:14:07 4647
原创 java JNI 实现原理 (五) JNI方法解释调用
Hotspot主要有两种解释器,而下面我们主要讨论的是 Template Intepreter也叫asm interprete解释器, 文章下面的介绍基本都是基于template解释器我们举一个invokespecial的例子,下面是templateTable方法解释invokespecial的代码void TemplateTable::invokespecial(int byte_no)
2013-11-15 08:25:08 3943
原创 java JNI 实现原理 (四) 初始化JNI方法
在调用函数的时候都会在template 解释器中会使用invokespecial -> prepare_invoke -> load_invoke_cp_cache_entry -> resolve_cache_and_index在代码中我们可以看到 case Bytecodes::_invokevirtual: case Bytecodes::_invokespeci
2013-11-15 08:24:12 4830
原创 java JNI 实现原理 (三) JNI中的RegisterNatives方法
我们常用javah去生成JNI的头文件,然后去实现自己定义的JNI方法,使用这种方式比较传统,但是我们可以看到定义的格式甚至连名字都必须按照规范JNIEXPORT jint JNICALL Java_test_symlink (JNIEnv *, jobject, jstring, jstring);完整的结构是Java_classpath_classname_native m
2013-11-09 07:07:02 12683
原创 java JNI 实现原理 (二) Linux 下如何 load JNILibrary
在博客java JNI (一)虚拟机中classloader的JNILibrary 中讨论了java中的Library 是由classloader 来load的,那我们来看看 classloader是如何去load 一个library的ClassLoader.c JNIEXPORT void JNICALL Java_java_lang_ClassLoader_00024Nat
2013-11-09 06:03:19 5939
原创 java JNI 实现原理 (一)虚拟机中classloader的JNILibrary
调用JNI的时候,通常我们使用System.loadLibrary(String libname)来load JNI library, 同样也可以使用System.load(String fileName)来load JNI library,两者的区别是一个只需要设置库的名字,比如如果libA.so 只要输入A就可以了,而libA.so的位置可以同过设置 java.library.path 或者
2013-11-06 14:49:57 6240 1
原创 java垃圾回收那点事(五)ParallelGCThreads参数
为了提高垃圾回收的性能,java在parallel回收的时候可以设置同时并行处理的线程数也就是ParallelGCThreads,如果你没有设置该参数,该单数jvm会默认设置成online的cpu的数目,并不包括被shutdown的内核Linux 下获取online的cpu的核数int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
2013-09-12 17:49:19 24469
原创 java垃圾回收那点事(四)谁执行了GC的任务
在第一篇中曾经提到过,System.gc 曾经调用代码Universe::heap()->collect(GCCause::_java_lang_system_gc);而每个不同类型的gc,使用不同的heap策略,以parallelScavengeHeap 为例子void ParallelScavengeHeap::collect(GCCause::Cause cause) { a
2013-09-11 10:46:07 3292
原创 java垃圾回收那点事(二)究竟有多少GC
java的gc回收的类型主要有几种 UseSerialGC,UseConcMarkSweepGC,UseParNewGC,UseParallelGC,UseParallelOldGC,UseG1GC,而这几个参数是如何搭配的,实际上只要看下面的代码就非常清楚bool Arguments::check_gc_consistency() { bool status = true; // E
2013-09-10 16:30:33 13143 1
原创 java垃圾回收那点事(三)不同gc策略的heap分配
在前面的文章中曾提到了在java虚拟机启动的时候会让不同的GC,使用不同的heap的分配策略。
2013-09-09 18:05:06 6280
jdk1.6.23 libsaproc.so linux 下amd64架构
2012-02-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人