网络安全
文章平均质量分 89
song->_->
调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步
展开
-
java安全——java本地命令执行分析
近几年里,java安全威胁性较高的就是反序列化漏洞了,原因在于反序列化漏洞通常会利用Runtime类来实现RCE命令执行从而控制目标服务器,但有时候我们会发现在某些情况下,Runtime类并不能执行一些较为复杂的命令,或者说无法获得我们想要的预期结果。例如我们在linux系统下执行该命令是没问题,可以执行成功但是通过java本地命令执行的Runtime类的exec方法来执行该命令无法获得我们预期的结果我们换一种方式,不执行这么复杂的命令,Runtime类可以成功执行命..原创 2021-09-15 18:47:56 · 2047 阅读 · 1 评论 -
java安全——类加载和Unsafe类(ClassLoader,URLClassLoader)
当要执行某一个类时,java程序在运行前会将java文件编译成class字节码文件,然后调用ClassLoader类加载器加载类字节码,通过JVM的native方法来创建类的class对象。使用javap命令反编译HelloTest.class文件查看其内容用工具以十六进制打开.class文件的二进制内容,jvm执行HelloTest类会解析class文件中的字节码内容(ByteCode)ClassLoader类加载器ClassLoader类加载器主要是用于加载jav..原创 2021-09-13 18:53:47 · 1743 阅读 · 0 评论 -
java安全——ysoserial工具URLDNS链分析
本篇我们将学习ysoserial工具的URLDNS链,相对于前面学习的CC链来说,URLDNS链就比较简单了。URLDNS是ysoserial工具用于检测是否存在Java反序列化漏洞的一个利用链,通过URLDNS利用链可以发起一次DNS查询请求,从而可以验证目标站点是否存在反序列化漏洞,并且该利用链任何不需要第三方依赖,也没有JDK版本的限制。但是URLDNS利用链也只能用于发起DNS查询请求,也不能做其他事情,因此URLDNS链更多的是用于POC检测。有了前面的基础,这里直接上URLD原创 2021-09-08 10:52:26 · 1766 阅读 · 0 评论 -
17-java安全——shiro1.2.4反序列化分析(CVE-2016-4437)
漏洞原理在shiro1.2.4版本中,用户认证信息rememberMe通常会进行Base64编码和AES加密存储在cookie中,当shiro安全框架对用户身份进行认证时,会对rememberMe的内容进行Base64解码和AES解密,然后反序列化还原成java对象,由于rememberMe可控,攻击者则可以利用rememberMe来构造恶意数据,产生反序列化漏洞。漏洞环境shiro1.2.4jdk7u80漏洞复现在github下载shiro1.2.4版本,下载链接:原创 2021-09-06 14:48:21 · 1920 阅读 · 0 评论 -
16-java安全——shiro1.2.4用户认证流程分析
1. shiro的基础shiro 是apache开源的一个安全框架,它将软件系统的安全认证相关功能抽取出来,例如把用户身份安全认证,权限授权、加密、会话管理等功能组成了一个通用的安全认证框架,然后开发人员通过shiro提供的API接口可以使用身份认证,权限管理等功能来保护web应用程序。shiro中有两个概念比较重要,一个是身份认证,另一个是授权:身份认证就是判断一个用户是否为合法用户的处理过程。简单来理解就是系统通过用户输入的用户名和口令是否正确来校验用户的身份信息。所谓授权就是原创 2021-09-06 10:30:23 · 609 阅读 · 0 评论 -
15-java安全——fastjson反序列化的历史版本绕过(开启AutoType功能)
1.2.24 版本爆出反序列化漏洞之后,fastjson1.2.25之后的版本使用了checkAutoType函数定义黑白名单的方式来防御反序列化漏洞。com.alibaba.fastjson.parser.ParserConfig类中有一个String[]类型的denyList数组,denyList中定义了反序列化的黑名单的类包名,1.2.25-1.2.41版本中会对以下包名进行过滤bshcom.mchangecom.sun.java.lang.Threadjava.net.Sock原创 2021-09-03 18:24:33 · 2765 阅读 · 1 评论 -
14-java安全——fastjson1.2.24反序列化JdbcRowSetImpl利用链分析
fastjson在1.2.24版本中,除了TemplatesImpl链之外,还有一个JdbcRowSetImpl利用链,JdbcRowSetImpl链有两种利用方式:一种是RMI和JNDI利用方式,另一种是JNDI和LDAP利用方式,关于JNDI的相关概念之前在java安全基础中已经介绍过了,而且底层原理已经分析过了,大家可自行参考以下文章。4-java安全基础——RMI远程调用5-java安全基础——RMI和JNDI实现漏洞利用6-java安全基础——JNDI和LDAP利用1. RMI原创 2021-09-01 11:31:02 · 825 阅读 · 1 评论 -
13-java安全——fastjson1.2.24反序列化TemplatesImpl利用链分析
漏洞环境:fastjson1.2.24jdk1.7.80新建一个maven项目在pom.xml文件中引入fastjson的依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</v原创 2021-08-27 14:21:52 · 2930 阅读 · 2 评论 -
12-java安全——java反序列化CC7链分析
在分析CC7链之前,需要对Hashtable集合的源码有一定的了解。从思路上来说,我觉得CC7利用链更像是从CC6利用链改造而来,只不过是CC7链没有使用HashSet,而是使用了Hashtable来构造新的利用链。经过测试,CC7利用链在jdk8u071和jdk7u81都可以利用成功,payload代码如下:package com.cc;import org.apache.commons.collections.Transformer;import org.apache.commo原创 2021-08-23 10:15:29 · 2858 阅读 · 1 评论 -
11-java安全基础——java中的sql注入
jdbc中的sql注入JDBC是sun公司制定的使用java语言来操作数据库的驱动接口,程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。新建一个maven项目,导入jdbc依赖包: <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>原创 2021-08-15 20:24:10 · 1186 阅读 · 0 评论 -
10-java安全基础——javassist字节码编程
javassist是一个开源的分析、编辑和创建Java字节码的类库,通过javassist提供的API可以在java程序运行时编辑一个类的字节码信息,改变该类的结构信息。除了Javassist,常见的字节码编程工具有ASM和byte-buddy,但是这两个工具相对来说更加偏向于底层,需要了解关于jvm的指令。使用javassist可以不需要了解jvm指令,只需使用javassist类库提供的API接口就可以实现字节码编程。javassist字节码编程常用的类:ClassPool:Cla.原创 2021-08-15 15:17:11 · 1142 阅读 · 0 评论 -
2-java安全——tomcat AJP协议文件包含分析[CVE-2020-1938]
漏洞描述:tomcat是Apache组织开发的中小型的JavaEE服务器,它实现了servlet,JSP等javaEE规范,可以提供web资源访问服务,tomcat主要提供了两种通信方式访问web资源:http协议和AJP协议。tomcat服务器默认会在8009端口开放了一个AJP服务,客户端(浏览器)通过与tomcat8009端口建立AJP通信,可以访问服务器的web资源。但是tomcat的AJP协议在设计上存在一些缺陷,攻击者通过这点可以构造恶意的请求进行文件包含操作,从而读取tomcat服务器原创 2021-08-12 18:34:59 · 1831 阅读 · 0 评论 -
9-java安全基础——Servlet
Servlet程序Servlet是Servlet Applet的简称,翻译过来大概就是一个运行在服务端的小程序,用于处理服务器的请求,什么是服务器程序?我们知道一般在Web应用程序中都是通过浏览器来访问web服务器资源的,通常浏览器要访问一个网页时会发送一个http请求给web服务器,然后web服务器接收到该请求会进行相应的处理,然后把处理的结果再返回给浏览器,因此不难看出Servlet是用于处理服务器的请求(业务逻辑)。如何编写一个Servlet程序servlet是Sun公司提供了原创 2021-08-05 20:42:39 · 335 阅读 · 0 评论 -
8-java安全基础——HashSet,HashMap源码分析
HashSet集合set接口和list接口一样是collection接口的子接口,set接口的元素是无序的(添加和取出顺序不一致),没有索引,不允许重复元素,HashSet集合实现了set接口,也具有set接口的特点。来看一个HashSet的示例程序:...原创 2021-07-29 19:31:50 · 467 阅读 · 0 评论 -
7-java安全基础——ArrayList,Vector源码分析
ArrayList集合当创建ArrayList对象时,如果使用的是无参构造器,那么初始elementData数组的容量为0,第一次添加元素时elementData数组的容量则扩容到10,如果再次扩容则为1.5倍。通过一个示例程序来分析ArrayList集合底层扩容的机制public class CollectionTest1 { public static void main(String[] args) { ArrayList arrayList = new Ar原创 2021-07-29 15:08:21 · 356 阅读 · 0 评论 -
11-java安全——java反序列化CC5和CC6链分析
CC5链分析复习LazyMap利用链: https://blog.csdn.net/qq_35733751/article/details/118462281在学习CC2链时我们知道由于JDK8版本改写了AnnotationInvocationHandler类的readobject方法,CC1链中LazyMap的get方法已经无法使用,CC5链使用了BadAttributeValueExpException类来代替AnnotationInvocationHandler类,并且还用了一个新的类原创 2021-07-25 10:33:34 · 1937 阅读 · 5 评论 -
9-java安全——关于构造CC2链的几个问题
思考一下:CC2链的poc利用代码中为什么要向queue队列中添加至少2个元素?并且PriorityQueue队列中的queue属性被transient关键字修饰具有“不会序列化”语义,在反序列化过程中为什么还能从流中读取queue的数据,流中的数据又从何而来?readObject方法是怎么从流中读取queue的数据使用SerializationDumper工具解析对象序列化的数据,Fields字段中并没有看到PriorityQueue的queue属性,说明queue确实没有参与序列化.原创 2021-07-23 09:53:35 · 527 阅读 · 0 评论 -
10-java安全——java反序列化CC3和CC4链分析
漏洞分析环境:JDK1.7.0_80apache commons collections-3.0在maven项目中的pom文件中添加3.1版本的依赖<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version原创 2021-07-20 21:15:40 · 2144 阅读 · 2 评论 -
8-java安全——java反序列化CC2链分析
上一篇分析了CC1链,本篇继续分析ysoserial工具的 apache commons collections 2利用链。CC1链在实际利用过程存在一些限制,例如jdk1.8版本以上已经无法利用反序列化漏洞了,通过分析发现jdk8u181版本中改写了sun.reflect.annotation.AnnotationInvocationHandler类的readObject方法,CC1链在jdk8版本以上已经被修复了,因此jdk8版本以上重新构造了一条新的利用链(CC2链)。不过CC2链使用原创 2021-07-19 11:11:46 · 2875 阅读 · 4 评论 -
6-java安全基础——JNDI和LDAP利用
在java JDK的6u141,7u131,8u121这几个版本中,jndi中的Naming/Directory服务中限制了Reference远程加载Object Factory类的特性,对com.sun.jndi.rmi.object.trustURLCodebase的值默认设置为false,即禁止从远程的URLCodebase加载Reference工厂类。同样的代码,这里把jdk版本切换成JDK8u121版本为什么会抛出ConfigurationException异常?以jdk8u.原创 2021-07-16 08:54:05 · 3598 阅读 · 0 评论 -
5-java安全基础——RMI和JNDI实现漏洞利用
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的接口,jndi可以实现给当前服务器的所有资源定义一个唯一的访问标识(例如数据库,网页,文件,连接池等等),方便开发者通过指定的标识来访问对象(目标资源文件,数据库等等)。关于什么是标识符?可参考RMI注册表,例如在RMI中通过rmi://10.100.0.1:10086/userRmiServices来映射RMI注册表中的userRmiServices远原创 2021-07-14 17:16:20 · 3667 阅读 · 0 评论 -
4-java安全基础——RMI远程调用
1. RMI远程调用java RMI (Java Remote Method Invocation)即远程方法调用,是分布式编程中的一种编程思想,java jdk1.2就开始支持RMI,通过RMI可以实现一个虚拟机中的对象调用另一个虚拟机上中的对象的方法,并且这两个虚拟机可以跨主机,也可以跨网络。RMI解决的问题是实现和本地方法调用一样的远程方法调用,但是又屏蔽了远程调用的具体实现的细节,使得远程方法调用看起来和本地方法调用一样。2. RMI通信流程来看一下RMI的实际通信过程(这图原创 2021-07-13 14:32:59 · 1557 阅读 · 4 评论 -
3-java安全基础——jdk动态代理
静态代理什么是静态代理,假设现在有这样一个需求:要求在所有类的addUser方法前后添加打印日志。那么如何在不修改源代码的情况下完成需求?通常做法是:为每一个目标类创建一个代理类,并让目标类和代理类实现同一个接口。在创建代理对象的时候通把目标对象传入构造中,然后在代理对象内部的方法中调用目标对象的方法前后输出日志。静态代理实现://同一接口interface UserService { public void addUser();}//目标类class UserS原创 2021-07-11 09:21:44 · 394 阅读 · 2 评论 -
1-java安全基础——内部类和代码块
1. 代码块代码块又称为初始块,是属于类的一部分。代码块有些类似于方法,将代码逻辑封装在方法体并用“{ }”符号括起来。代码块与方法的区别在于,方法拥有函数名,返回值,参数,方法体。但代码块只有方法体,并且代码块不会通过类或对象来显示调用,而是在加载类或创建对象时隐式调用。代码块的语法:[修饰符]{ //代码逻辑} 修饰符的内容是可选的,如果要写的话只能写static,表示这是一个静态代码块,如果不写的话表示这是一个普通代码块。 代码块可以理解为...原创 2021-07-09 14:25:00 · 447 阅读 · 2 评论 -
2-java安全基础——动态类加载(反射)
1. 类加载当程序想要使用一个类时,如果这个类还没加载到内存中,jvm会负责把这个类加载到内存中,那么jvm把类加载到内存中做了哪些事情?一般jvm会按照类加载,类连接,类初始化这三个步骤把这个类加载到内存,完成初始化工作,但这里我们暂时不讨论类连接,类初始化。什么是类加载?java编译器将写好的.java源文件编译成.class⽂件,然后jvm再将.class文件加载到内存中并为之创建一个java.lang.Class对象的过程称为类加载。2. java程序的三个阶段当一个程序文件从磁原创 2021-07-10 19:24:15 · 820 阅读 · 2 评论 -
7-java安全——java反序列化CC1链分析
apache commons-collections组件反序列化漏洞的反射链也称为CC链,自从apache commons-collections组件爆出java第一个反序列化漏洞后,就像打开了新世界大门一样,之后很多java中间件也相继爆出反序列化漏洞。例如比较常用的反序列化漏洞利用工具ysoserial就使用了LazyMap类的利用链,本文将继续学习LazyMap类的利用链。...原创 2021-07-04 15:39:31 · 3746 阅读 · 0 评论 -
0-java安全基础——搭建tomcat调试环境
首先在官网下载tomcat的源码包和安装包,以tomcat8为例,下载链接:https://archive.apache.org/dist/tomcat/tomcat-8///安装包apache-tomcat-8.0.50.exe//源码apache-tomcat-8.0.50-srcapache-tomcat-8.0.50-src就是tomcat的源码,如果是windows系统,下载.exe安装包,下载完后直接默认下一步安装。打开idea工具,直接打开apach原创 2021-07-09 14:04:53 · 484 阅读 · 3 评论 -
1-java安全——tomcat任意文件写入分析[CVE_2017-12615]
tomcat8.0.45写入任意文件漏洞的编号为CVE_2017-12615,该漏洞的利用场景为当tomcat运行在windows下,允许PUT方式的http请求并且tomcat的web.xml配置文件中readonly值为false,攻击者就可以向服务器上传恶意jsp文件或webshell文件。原创 2021-07-03 09:59:53 · 1017 阅读 · 0 评论 -
6-java安全——java反序列化漏洞利用链
本篇将学习java反序列化漏洞原理,然后结合一个apache commons-collections组件反序列化漏洞来学习如何构造利用链。我们知道序列化操作主要是由ObjectOutputStream类的 writeObject()方法来完成,反序列化操作主要是由ObjectInputStream类的readObject()方法来完成。当可序列化对象重写了readObject方法后,在反序列化时一般会调用序列化对象的readObject方法。在Student类中重写ObjectInputSt原创 2021-07-01 17:28:58 · 4243 阅读 · 10 评论 -
5-java安全——java反序列化机制分析
通过上一篇的学习相信大家对java序列化机制非常熟悉了,本篇继续分析java反序列化底层机制。反序列化机制主要由以下代码实现的:ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);Student student = (Student) objectInputStream.readObject(); 不同的是,反序列化需要通过对象输入流ObjectInputStream 类从文...原创 2021-06-25 09:15:35 · 848 阅读 · 1 评论 -
4-java安全——java序列化机制分析
本文是根据java的序列化机制来分析java序列化的流程,从而理解序列化后res文件中的字符串具体含义(看不懂的同学建议先看完《java的序列化机制》)。通过前面的学习不难发现其实整个序列化过程就两行代码:ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);objectOutputStream.writeObject(student);本次分析是以实现Serializab..原创 2021-06-23 19:53:24 · 473 阅读 · 1 评论 -
3-java安全——java序列化机制
最近在学习java反序列化漏洞,为了更好的理解漏洞的原理,打算从零开始学习java序列化和反序列机制。java序列化跟C语言类似,C语言中的序列化的数据类型对象是结构体,java反序列化的数据类型则是java对象,但java对象的反序列化不涉及方法和静态属性的操作。为什么不涉及方法和静态属性?因为方法一般都固定存放在代码区,内容是不变的,静态属性则是属于java类的,而对象的成员属性的内容是不固定,说白了java反序列化是对java对象成员属性的操作,C语言中的序列化也验证了这一点。..原创 2021-06-22 22:23:51 · 581 阅读 · 0 评论 -
20-PHP代码审计——damicms5.3-5.4支付逻辑漏洞分析
本次分析damicms的两个漏洞,一个是5.3版本的任意文件操作漏洞,另一个是5.4版本的逻辑支付漏洞。原创 2021-06-19 10:08:19 · 2055 阅读 · 4 评论 -
19-PHP代码审计——jizhicms逻辑漏洞分析(由越权引发的sql注入)
越权修改积分本质上是一个逻辑漏洞,但是在此基础上又触发了sql注入漏洞,原因在于代码逻辑不够严谨,考虑的不够全面,没有对修改的内容限制原创 2021-06-17 22:58:13 · 928 阅读 · 2 评论 -
18-PHP代码审计——kkcms逻辑漏洞分析(验证码重放)
kkcms后台用户登陆存在验证码重放,导致后台用户可进行暴力破解。定位到kkcms后台用户登陆的功能代码的目录文件admin/cms_login.php<?phprequire_once('../system/inc.php');if(isset($_POST['submit'])){ //验证验证码 if ($_SESSION['verifycode'] != $_POST['verifycode']) { alert_href('...原创 2021-06-16 10:36:38 · 663 阅读 · 2 评论 -
17-PHP代码审计——jizhicms1.6.7 sql注入漏洞分析
漏洞说明:jizhicms是一个基于thinkphp框架开发的开源php cms,1.6.7版本以下前台页面和用户中心以下存在几处sql注入,漏洞产生的原因主要是因为对于前台提交的数据过滤不足。漏洞影响版本:jizhicms_Beta1.6.7以下漏洞环境:php7.0.12jizhicms_Beta1.6.7把jizhicms解压到网站根目录,访问install目录下进行安装,jizhicms目录结构:目录结构说明:install :用...原创 2021-06-14 09:21:59 · 5295 阅读 · 9 评论 -
15-PHP代码审计——yii 2.0.37反序列化漏洞
Yii是一套基于组件、用于开发大型Web应用的高性能PHP框架。Yii2 2.0.38 之前的版本存在反序列化漏洞,如果程序内部调用了unserialize() 反序列化时,那么程序就可能存在反序列化漏洞,攻击者可通过构造特定的恶意请求执行任意命令。影响版本:yii2 v2.0.37版本以下环境:yii-basic-app-2.0.37.tgzphp7.0以上poc:http://www.yii2.com/web/index.php?r=test/sss&.原创 2021-06-06 20:17:32 · 1235 阅读 · 5 评论 -
16-PHP代码审计——Typecho1.0.14反序列化漏洞
漏洞受影响版本:Typecho_v1.0.14以下环境:php5以上Typecho_v1.0.14.tarpoc:__typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YTo1O原创 2021-05-26 18:53:01 · 1168 阅读 · 3 评论 -
2-Web安全——php反序列化漏洞
1. php反序列化前文已经详细介绍了反序列化的原理,本文将重点学习php语言中的反序列化漏洞。php提供了两个函数来完成序列化和反序列化操作:Serialize函数用于将php对象转换为字符串并存储,Unserialize函数用于将字符串转换回变量。来看一个php序列化的示例从图中可以看到test对象序列化后的字节内容是用以下格式进行保存的:O:4:"Test":3:{s:2:"id";i:10;s:4:"name";s:8:"zhangsan";s:5:"score";..原创 2021-05-26 15:41:56 · 463 阅读 · 1 评论 -
0-PHP代码审计——通用代码审计的思路
1. 代码审计前的准备工作在进行代码审计之前,我们需要对项目的整体结构有一个大概的了解,主要是了解以下几方面:项目源码文件结构:主要是了解程序的源码文件结构,以及每个文件的作用 程序入口文件:通常是程序开始执行的地方,通过入口文件可以了解程序的执行流程,熟悉业务的具体实现逻辑 配置文件:一般都是以config开头的文件,这些文件保存了数据库和程序的一些配置信息 过滤功能:阅读项目的源码文件,分析公共的安全检查函数,过滤函数的功能2. 代码审计思路1. 检查敏...原创 2021-05-09 19:56:23 · 548 阅读 · 0 评论