自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沧海一粟

More know, more less

  • 博客(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 (四) JPLISAgent

Java Instrument (四) JPLISAgent

2016-06-08 23:22:13 4021

原创 Java Instrument (三) 钩子函数

Java Instrument (三) 钩子函数

2016-06-07 22:02:41 2506

原创 Java Instrument (二) JVMTI

Java Instrument (二) JVMTI

2016-06-07 21:57:10 3664

原创 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.  转换 & 为 &4.  转换 < 为 <5.  转换 > 为 >6.  转换 " 为 "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

原创 自己动手编译hsdis

HSDIS 是hotspot 的一个工具,用于能够da yin

2014-10-21 17:44:02 4308

原创 IPVS(也叫LVS)的源码分析之persistent参数

IPVS 也叫LVS的源码分析之persistent参数

2014-09-04 19:04:23 8927 1

原创 Java (JDK7)中的String常量和String.intern的实现

Java中的String常量和String.intern的实现

2014-08-16 10:15:22 8070 4

原创 lvs DR模式的笔记

最近在配置lvs,想用lvs做个VIP

2014-07-26 18:21:31 2767

原创 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

原创 linux上TCP connection timeout的原因查找

最近在产线上经常出现connection timeout的问题

2014-07-16 17:37:44 39612 1

原创 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架构

详细请看: Java 工具(jmap,jstack)在linux上的源码分析(五) -F 参数的bug的解决lib (http://blog.csdn.net/raintungli/article/details/7245709) 自己编译的,测试能够通过

2012-02-15

Linux C 编程一站式学习

介绍在linux上c程序开发 适合入门学习

2011-03-28

开源技术选型手册 web2.0 for java

最新的比较流行的开源软件使用手册,web 2.0全面介绍

2009-04-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除