JavaSec 反序列化篇-shiro
Shiro-550(CVE-2016-4437)0x01 漏洞原理Apache Shiro框架提供了记住我(RememberMe)的功能,关闭浏览器再次访问时无需再登录即可访问。shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。服务器端识别身份解密处理cookie的流程则是:
获取rememberMe cookie ->base64 解码->AES解密(加密密钥硬编码)->反序列化(未作过滤处理)。但是AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化的RCE漏洞。只要rememb ...
JavaSec 反序列化篇-CC链
[toc]
CC012345678910111213141516171819202122232425262728293031323334353637383940/*Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() AbstractInputCheckedMapDecorator.setValue() AnnotationInvocationHandler.invoke() TransformeredMap.checkSetValue() ChainedTransformer.transform() ConstantTransformer.transform() InvokerTransformer.transform() Met ...
Json parse解析差异导致的安全问题
[toc]
0x01 前言json 解析是当前web开发中必不可少的组件,而在现代多语言微服务架构中,json解析可能依赖于多个不同的标准库实现,而不同的组件通常存在一些差异,parser之间的差异与多阶段请求处理相结合可能会引入严重的漏洞。
0x02 不同的规范
IETF JSON RFC (8259 and prior): This is the official Internet Engineering Task Force (IETF) specification.
ECMAScript Standard: Changes to JSON are released in lockstep with RFC releases, and the standard refers to the RFC for guidance on JSON. However, non-spec conveniences provided by the JavaScript interpreter, such as quoteless strings and comments, have inspi ...
0CTF/TCTF-2022 Web复现
Where are you from?一道TCTF的题目,考点ajp走私+幽灵猫
环境搭建由于本题没有docker,只能自己本地搭一个
Tomcat 9.0.30 服务器该漏洞修复版本为9.0.31,这里选用9.0.30
在server.xml中使用默认配置开启ajp端口8009(不对外暴露,只有反代可以访问)
Apache 2.4.43 反向代理作反代,/cat路由代理到8009端口上
index.jsp12345678910111213141516171819<html><body><h2> <% out.println("hhhhhhhhh, it's tomcat!!"); String remote_addr = request.getRemoteAddr(); if (remote_addr.equals("8.8.8.8")) { String flag = "f ...
Apache Httpd AJP请求走私 CVE-2022-26377
[toc]
漏洞描述Apache HTTP Server的mod_proxy_ajp模块与tomcat ajp解析模块存在差异,当用户配置了mod_proxy_ajp模块与后端tomcat服务器通信时,攻击者能够在正常的HTTP请求中走私一条自定义HTTP请求到后端tomcat。攻击者可利用该漏洞实现对tomcat AJP端口的访问,比如自定义attributes属性值来攻击存在幽灵猫漏洞但AJP协议端口未对外开放的tomcat服务器。
影响范围受影响版本:
Apache HTTP Server < 2.4.54
漏洞分析AJP协议分析ajp数据包格式
1234567891011121314AJP13_FORWARD_REQUEST := prefix_code (byte) 0x02 = JK_AJP13_FORWARD_REQUEST method (byte) protocol (string) req_uri (string) remote_addr (string) ...
Tomcat AJP 文件包含漏洞(CVE-2020-1938)
[toc]
漏洞概述CVE-2020-1938 又名GhostCat
ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat 上所有 webapp 目录下的任意文件
该漏洞是一个单独的文件包含漏洞,依赖于 Tomcat 的 AJP(定向包协议)。AJP 自身存在一定缺陷,由于Tomcat在处理AJP请求时,未对请求做任何验证,通过设置AJP连接器封装的request对象的属性, 导致产生任意文件读取漏洞和代码执行漏洞
影响范围1234Tomcat 9.x < 9.0.31Tomcat 8.x < 8.5.51Tomcat 7.x < 7.0.100Tomcat 6.x
环境搭建Tomcat 9.0.30 服务器
该漏洞修复版本为9.0.31,这里选用9.0.30
在server.xml中使用默认配置开启ajp端口8009
Apache 2.4.43 反向代理
作反代,/cat路由代理到8009端口上
漏洞分析AJP ConnectorApache Tomcat服务器通过Connector连接器组件与客户程序建 ...
Tomcat任意文件上传 CVE-2017-12615
[toc]
一. 漏洞概述2017年9月19日,Apache Tomcat 官方确认并修复了两个高危漏洞,漏洞 CVE 编号:CVE-2017-12615 ,该漏洞受影响版本为7.0-7.80之间,官方评级为高危,通过精心构造的攻击请求,向用户服务器上传恶意 JSP 文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,存在高安全风险。
二. 漏洞基本信息漏洞编号:
CVE-2017-12615
漏洞名称:
CVE-2017-12615-远程代码执行漏洞
官方评级:
高危,实际测试漏洞危害较低
漏洞描述:
CVE-2017-12615:远程代码执行漏洞
当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
在一定的条件下,通过以上两个漏洞可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存 ...
JavaSec 反序列化篇-URLDNS链
URLDNS算是一条比较简单的利用链,这条链不依赖第三方库,它无法执行系统命令,成功利用的结果也只是实现服务器的一次url解析,主要用这条链来判断服务器是否存在反序列化。
URLDNS 反序列化分析1)Source 入口类重写readObject方法
2)Gadget Chain 入口类可传入任意对象(这种类一般为集合类)
3)Sink 执行类可被利用执行危险或任意函数
这条链的入口类是java.util.HashMap ,入口类需要具备以下条件
实现Serializable接口;
重写readObject方法,调用一个常见的函数;
接收参数类型宽泛;
最好JDK自带;
我们的执行类为URL类,调用链如下,最终会触发lookupAllHostAddr从而发起dns请求
123456HashMap->readObject()HashMap->hash()URL->hashCode()URLStreamHandler->hashCode()URLStreamHandler->getHostAddress()InetAddress->getByName ...
JavaSec 基础篇笔记
[toc]
Java 反射机制java安全可以从反序列化说起,而反序列化漏洞又可以从反射说起,
Java 的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。
反射是大多数语言里都必不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有方法(包括私有),拿到的方法可以调用,总之通过”反射”,我们可以将Java这种静态语言附加上动态特性。
ReferenceJava 序列化和反序列化Java 动态代理代理模式定义:为其他对象提供一种代理以控制对这个对象的访问
代理模式的通用类图
上图中,Subject是一个抽象类或者接口,RealSubject是实现方法类,具体的业务执行,Proxy则是RealSubject的代理,直接和client接触的。
代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。值得注意的是,代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。
代理模式优点
职责清晰
高扩 ...
profile-picture(每周一题)
本题是一个简单的php应用,我们传入一个图片的url,然后会把读到的内容写入uuid.png,我们访问这个图片即可看到内容
[toc]
vulnerability注意此处file_get_contents参数可控,可以用各种伪协议读本地的文件,这个题目的目标也就是达到任意文件读,但是本题在把内容写入时会使用getimagesize对读到的内容进行检查,需要是图片才能写入(检查文件头)
显然我们不能保证想读的文件都是图片形式的文件头,所以这里需要我们用php的filter来进行bypass,我们只需要将读到的内容经过某种编码,使得最终的文件头是图片形式即可,我们得到编码后的内容,再把filter反着写一遍就可以解密
环境搭建Ubuntu 20.04
Apache/2.4.43
PHP/7.4.32
12345678910111213141516171819202122232425//index.php<h1>Update profile picture</h1><?php$user_uuid = 'uuid';fun ...