JAVA架构网站安全漏洞渗透测试检测手法

  • 时间:
  • 浏览:0
  • 来源:彩神官网

0xaced 魔术头

4.3.5.3. 序列化流程

class A(object):

OGNL(Object-Graph Navigation Language,对象导航语言)是本身功能强大的表达式语言,通过简单一致的表达式语法,提供了存取对象的任意属性、调用对象的最好的最好的最好的办法、遍历整个对象的形状图、实现字段类型转化等功能。

Nginx 在为 Django 做反向代理时,静态文件目录配置错误会意味源码泄露。访问 /static.. 会 1001 重定向到 /static../

4.2.4.2. Flask

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了你你你这人Servlet接口的类,一般请况下,大伙 将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet也能响应任何类型的请求,但绝大多数请况下Servlet只用来扩展基于HTTP协议的Web服务器。

service()

4.3.2.1. Servlet

4.3.2.1.1. 简介

4.2.4.1.1. 历史漏洞

除非指明@jsonAutoDetect,Jackson我太久 反序列化非public属性。在防御时,也能不使用enableDefaultTyping最好的最好的最好的办法。

4.2.2.1. pickle

ObjectInputStream.readObject

ObjectInputStream.readUnshared

XMLDecoder.readObject

Yaml.load

XStream.fromXML

ObjectMapper.readValue

JSON.parseObject

4.3.5.6. 主流JSON库

CVE-2016-10081 (S2-032)

CVE-2016-3687 (S2-033)

CVE-2016-4438 (S2-037)

CVE-2017-5638

CVE-2017-7672

CVE-2017-9787

CVE-2017-9793

CVE-2017-91004

CVE-2017-91005

CVE-2017-12611

CVE-2017-15707

CVE-2018-1327

CVE-2018-11776

4.3.2.3. Spring MVC

... def __reduce__(self):

"csubprocessnPopennp1n((S'cmd.exe'np2ntp3ntp4nRp5n."

init()

Apache Commons IO Serialization包中的 ValidatingObjectInputStream 类提供了 accept 最好的最好的最好的办法,也能通过该最好的最好的最好的办法来实现反序列化类白/黑名单控制,一个demo如下

RMI(Remote Method Invocation,远程最好的最好的最好的办法调用)也能让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java虚拟机中的对象上的最好的最好的最好的办法。

4.3.5.6.1. GSON

RMI远程调用步骤:

JNDI(Java Naming and Directory Interface,JAVA命名和目录接口)是为JAVA应用线程提供命名和目录访问服务的API(Application Programing Interface,应用线程编程接口)。

用户发送请求给服务器

服务器收到请求,使用DispatchServlet处里

Dispatch使用HandleMapping检查url是否是有对应的Controller,意味有,执行

意味Controller返回字符串,ViewResolver将字符串转加进去相应的视图对象

DispatchServlet将视图对象中的数据,输出给服务器 服务器将

数据输出给客户端

4.3.3. 容器

CVE-2019-2658

CVE-2019-26100

CVE-2019-2649

CVE-2019-2648

CVE-2019-2647

CVE-2019-2646

CVE-2019-2645

CVE-2019-2618

CVE-2019-2615

CVE-2019-2568

CVE-2018-3252

CVE-2018-3248

CVE-2018-3245

CVE-2018-3201

CVE-2018-3197

CVE-2018-3191

CVE-2018-1258

CVE-2017-10271

CVE-2017-3248

CVE-2016-3510

CVE-2015-4852

4.3.3.3. JBoss

客户端访问Web服务器,发送HTTP请求

Web服务器接收到请求后,传递给Servlet容器

Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象

Servlet实例使用请求对象得到客户端的请求信息,或者进行相应的处里

Servlet实例将处里结果通过响应对象发送回客户端,容器负责确保响应正确送出,一起去将控制返回给Web服务器

Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,它是所有或者 Tomcat组件的顶层容器。

4.2.1. 格式化字符串

4.3.2.1.2. 生命周期为

4.3.4.2. 相关CVE

ObjectInputStream实例初始化时,读取魔术头和版本号进行校验

调用ObjectInputStream.readObject()刚结速读对象数据

○读取对象类型标识

○readOrdinaryObject()读取数据对象

■readClassDesc()读取类描述数据

读取类描述符标识,进入分支readNonProxyDesc()

读取类名

读取SUID

读取并分解序列化属性标志位

读取字段信息数据

resolveClass()根据类名获取待反序列化的类的Class对象,意味获取失败,则抛出ClassNotFoundException

skipCustomData()循环读取字节直到Block Data刚结速标识为止 读取父类描述数据

initNonProxy()中判断对象与本地对象的SUID和类名 (不含包名) 是否是相同,若不同,则抛出InvalidClassException

ObjectStreamClass.newInstance()获取并调用离对象最近的非■Serializable的父类的无参构造最好的最好的最好的办法 (若不占据 ,则返回null) 创建对象实例

■readSerialData()读取对象的序列化数据

若类自定义了readObject(),则调用该最好的最好的最好的办法读对象,或者调用defaultReadFields()读取并填充对象的字段数据

4.3.5.5. 相关函数

Struts2中使用了OGNL,提供了一个ValueStack类。ValueStack分为root和context两累积。root中是当前的action对象,context中是ActionContext中间所有的内容。

4.3.5.6.2. Jackson

CVE-2012-01007

CVE-2012-4681

CVE-2017-3272

CVE-2017-3289

4.3.5. 反序列化

相关CVE有

4.2.2.2. 或者

4.3.3.3.2. 相关CVE

4.3.3.3.1. 简介

4.3.3.1. Tomcat

4.3.3.2.1. 简介

JBoss是一个基于J2EE的管理EJB的容器和服务器,但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

4.3.5.8.3. ObjectInputFilter

WebLogic是美国Oracle公司出品的一个Application Server,是一个基于Java EE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。其将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

4.3.1.2. JNDI

客户端请求该 Servlet

加载 Servlet 类到内存

实例化并调用init()最好的最好的最好的办法初始化该

Servlet service()(根据请求最好的最好的最好的办法不同调用 doGet() / doPost() / … / destroy()

4.3.2.1.3. 接口

Flask默认使用客户端session,使得session也能被伪造

最简单的思路是在已有的模块中import,意味那个模块中意味 import 也能利用的模块就也能使用了

在父类中寻找可用的模块,最常见payload是 ().__class__.__bases__[0].__subclasses__() 意味用魔术最好的最好的最好的办法获取全局作用域 init__.__func__.__globals

或者 网站那么过滤 pickle 模块,也能使用 pickle 实现任意代码执行,生成 payload 也能使用

有的沙箱把相关的模块代码都被删除了,则也能使用libc中的函数,Python 中调用一般也能使用 ctypes 意味 cffi。

"A""B" == "AB"

4.2.3.3. 防御

commons-fileupload 1.3.1

commons-io 2.4

commons-collections 3.1

commons-logging 1.2

commons-beanutils 1.9.2

org.slf4j:slf4j-api 1.7.21

com.mchange:mchange-commons-java 0.2.11

org.apache.commons:commons-collections 4.0

com.mchange:c3p0 0.9.5.2

org.beanshell:bsh 2.0b5

org.codehaus.groovy:groovy 2.3.9

org.springframework:spring-aop 4.1.4.RELEASE

4.3.5.8. 网站漏洞修复和防护

Python官方给出了或者 防御的建议

4.3.2.2. Struts 2

CVE-2017-7525

CVE-2017-10095

4.3.5.6.3. Fastjson

Java 9提供了支持序列化数据过滤的新形状,也能继承 java.io.ObjectInputFilter 类重写 checkInput最好的最好的最好的办法来实现自定义的过滤器,并使用 ObjectInputStream 对象的 setObjectInputFilter 设置过滤器来实现反序列化类白/黑名单控制,对JAVA漏洞渗透测试有想进一步了解的也能咨询专业的网站安全公司。

4.3.5.1. 简介

Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户都在太久太久太久太久的场合下被普遍使用,用于开发和调试JSP线程。

在 Servlet 的生命期中,仅执行一次 init() 最好的最好的最好的办法,在服务器装进 Servlet 时执行。

常见的Java服务器有Tomcat、Weblogic、JBoss、GlassFish、Jetty、Resin、IBM Websphere等,这里对累积框架做一个简单的说明。

Template

subprocess32

4.2.5.3. 反序列化

JCL是JVM自带的一个标准库,蕴含数百个系统类。默认请况下,所有系统类都在可信任的,且拥有所有的特权。

在Python中,有本身格式化字符串的最好的最好的最好的办法,在Python2的较低版本中,格式化字符串的最好的最好的最好的办法为 "this is a %s" % "test" ,时候增加了format的最好的最好的最好的办法, 语法为 "this is a {}".format('test') 意味 "this is a {test}".format(test='test')

JVM是Java平台的核心,以机器代码来实现,为线程执行提供了所需的所有基本功能,之类字节码解析器、JIT编译器、垃圾整理器等。意味它是机器代码实现的,其同样受到二进制文件受到的攻击。

Gson默认只有反序列化基本类型,意味是多样化类型,都要线程员实现反序列化机制,相对比较安全。

4.2.2. 反序列化

意味要实现类的反序列化,则是对随便说说现 Serializable 接口。

相关CVE有

4.3.2.2.2. 请求流程

Java实现了一套沙箱环境,使远程的非可信代码只有在受限的环境下执行。

客户调用客户端辅助对象stub上的最好的最好的最好的办法

客户端辅助对象stub打包调用信息(变量,最好的最好的最好的办法名),通过网络发送给服务端辅助对象skeleton

服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的最好的最好的最好的办法以及该最好的最好的最好的办法所在对象

调用真正服务对象上的真正最好的最好的最好的办法,并将结果返回给服务端辅助对象skeleton

服务端辅助对象将结果打包,发送给客户端辅助对象stub

客户端辅助对象将返回值解包,返回给调用者

客户获得返回值

4.3.2. 框架

Servlet(Server Applet)是Java Servlet的简称,称为小服务线程或服务连接器,是用Java编写的服务器端线程,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

ObjectOutputStream实例初始化时,将魔术头和版本号写入bout (BlockDataOutputStream类型) 中

调用ObjectOutputStream.writeObject()刚结速写对象数据

○ObjectStreamClass.lookup()封装待序列化的类描述 (返回ObjectStreamClass类型) ,获取包括类名、自定义serialVersionUID、可序列化字段 (返回ObjectStreamField类型) 和构造最好的最好的最好的办法,以及writeObject、readObject最好的最好的最好的办法等

○writeOrdinaryObject()写入对象数据

■写入对象类型标识

■writeClassDesc()进入分支writeNonProxyDesc()写入类描述数据

写入类描述符标识

写入类名

写入SUID (当SUID为空时,会进行计算并赋值)

计算并写入序列化属性标志位

写入字段信息数据

写入Block Data刚结速标识

写入父类描述数据

■writeSerialData()写入对象的序列化数据

若类自定义了writeObject(),则调用该最好的最好的最好的办法写对象,或者调用defaultWriteFields()写入对象的字段数据 (若是非原始类型,则递归处里子对象)

4.3.5.4. 反序列化流程

CVE-2019-0232

CVE-2017-12615

CVE-2013-2067

CVE-2012-4534

CVE-2012-4431

CVE-2012-3546

CVE-2012-3544

CVE-2012-2733

CVE-2011-3375

CVE-2011-3190

CVE-1008-2938

4.3.3.2. Weblogic

4.3.2.2.1. 简介

使用Jython并尝试使用Java平台来锁定线程的权限

使用fakeroot来处里

使用或者 rootjail的技术

4.2.4. 框架

WebLogic对业内多种标准的全面支持,包括EJB、JSP、Servlet、JMS、JDBC等。

4.3.1.4. RMI

4.3.5.8.1. Hook resolveClass

'class of {0} is {0.__class__}'.format(42)

近期对平台安全渗透测试中遇到有JAVA+mysql架构的网站,针对此架构大伙 安全渗透工程师整理了下具体的漏洞检测最好的最好的最好的办法和防护修复最好的最好的最好的办法,太久太久太久太久像执行框架漏洞获取到系统权限,以及跨权限写入木马后门等等操作,希望大伙 在渗透测试的道路中发现更多的知识和经验。

以上的Demo就只允许序列化 SerialObject ,通过你你你这人最好的最好的最好的办法,就也能设置允许序列化的白名单

客户端发送请求的tomcat服务器

请求经过一系列过滤器

FilterDispatcher调用ActionMapper来决定你你你这人请求是否是要调用某个Action

ActionMppaer决定调用某个ActionFilterDispatcher把请求给ActionProxy

ActionProxy通过Configuration Manager查看structs.xml,找到对应的Action类

ActionProxy创建一个ActionInvocation对象

ActionInvocation对象回调Action的execute最好的最好的最好的办法

Action执行完毕后,ActionInvocation根据返回的字符串,找到相应的result,通过HttpServletResponse返回给服务器

4.3.2.2.3. 相关CVE

4.2.4.1. Django

... a = 1

4.3.3.1.1. 相关CVE

... b = 2

4.2.5.1. 命令执行

4.2.5. 危险函数 / 模块列表

4.3.5.8.2. ValidatingObjectInputStream

... return (subprocess.Popen, (('cmd.exe',),))

序列化本来 把对象转加进去字节流,便于保占据 内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的 ObjectOutputStream 类的 writeObject() 最好的最好的最好的办法也能实现序列化,类 ObjectInputStream类的readObject() 最好的最好的最好的办法用于反序列化。

4.3.1.3. OGNL

4.3.4.1. 简介

marshal

PyYAML

pickle

cPickle

shelve

PIL

Java

在使用 readObject() 反序列化都可否 调用 resolveClass 最好的最好的最好的办法读取反序列化的类名,也能通过hook该最好的最好的最好的办法来校验反序列化的类,一个Demo如下

PyYAML

marshal

shelve

4.2.3. 沙箱

当格式化字符串由用户输入时,则意味会造成或者 大间题,下面是一个最简单的例子

CVE-2017-12149

4.3.4. 沙箱

eval / exec / compile

dir / type

globals / locals / vars

getattr / setattr

4.2.3.2. 绕过

在收到请求后,Tomcat的处里流程如下:

4.3.1. 基本概念

4.3.5.2. 序列数据形状

cPickle.dumps(A())

从中间你你你这人简单的例子那么知道,当大伙 也能控制要format的字符串时,则也能使用 init / globals 等属性读取或者 比较敏感的值,甚至任意执行代码。

CVE-2016-7401 CSRF Bypass

CVE-2017-7233/7234 Open redirect vulnerability

CVE-2017-12794 debug page XSS

4.2.4.1.2. 配置相关

"class of 42 is "

4.2.3.1. 常用函数

Struts2是一个基于MVC设计模式的Web应用框架,它本质上离米 一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

service() 最好的最好的最好的办法是 Servlet 的核心。每当一个客户请求一个HttpServlet对象,该对象的 service() 最好的最好的最好的办法就要被调用,或者传递给你你你这人最好的最好的最好的办法一个”请求”(ServletRequest)对象和一个”响应”(ServletResponse)对象作为参数。

os.popen

os.system

os.spawn

os.fork

os.exec

popen2

commands

subprocess

exec

execfile

eval

timeit.sys

timeit.timeit

platform.os

platform.sys

platform.

popen

pty.spawn

pty.os

bdb.os

cgi.sys



4.2.5.2. 危险第三方库

4.3.3.2.2. 相关CVE

4.3.2.3.1. 请求流程

CVE-2017-18349

4.3.5.7. 占据 危险的基础库

猜你喜欢

女朋友跟我分手了,我很爱她,我该怎么办?

为你推荐:扫描二维码下载追问追答本回答由提问者推荐 我来答追问废话,你逼那末紧不躲你躲鬼啊?你给女孩礼物他会有亏欠感懂吗?当你做老公的完后 再给四十岁的女人 礼物,做男否

2020-01-17

IdleHandler,页面启动优化神器

第十个 多 大难题:有那此最好的最好的办法还还可否 去统计页面的启动时间呢?从你你什儿 源码可知道,IdleHandler即在looper上方的message处置完了的

2020-01-17

男友快要跟我分手了,该咋办,感觉很没面子诶…怎样挽留或者挽回面子…起码是我提出分手吧…我受得伤

你对你這個回答的评价是?不得劲推荐晕!!!青春恋爱物语将感情说说和面子问题图片扯到一块儿……为你推荐: 我来答想一下他为那此要没办法 做,或许他是在试探你,有后后 你很喜

2020-01-17

请问如果一个男人跟我说分手会直接跟我说.这是什么意思?

有点儿推荐你对这俩 回答的评价是?换一换本回答由前前明星微博 推荐可选中4个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。也只是我说叫你越来越

2020-01-17

分手后男人一开始想你找你但是不提复合 后来又没动静 什么时候会绷不住啊 是不是一定会有一天绷不住

我应该 个建议:把买车人变得优秀,哪怕是暂时的,否则要让她看得到,否则何必 对她如此上心,何必 天天给他发消息追问她,让她要能想看 她都如此旁边的完后 ,你一样能过得

2020-01-17