浅析Smartbi逻辑漏洞(2)
浅析Smartbi逻辑漏洞(2)写在前面仅分享逻辑漏洞部分补丁绕过思路,不提供完整payload
厂商已发布补丁:https://www.smartbi.com.cn/patchinfo
正文简单提一下,补丁部分由smartbi.security.patch.PatchFilter(来源于SecurityPatchExt.ext)做加载并处理,这里我们主要关注补丁返回的状态码的具体含义即可,可以看到只有返回0的时候,filter链才能继续通过doFilter继续传递
123456789101112131415161718Iterator var10 = rules.iterator();while(var10.hasNext()) { URLPatchRule rule = (URLPatchRule)var10.next(); int result = rule.patch(uri, req, resp, chain); switch (result) { case 0: default: bre ...
浅析Smartbi逻辑漏洞
浅析Smartbi逻辑漏洞写在前面仅分享逻辑漏洞部分思路,全文以无害路由做演示,后续利用部分打码处理
厂商已发布补丁:https://www.smartbi.com.cn/patchinfo
分析最近可以看到smartbi官网突然发布了新的补丁,对比学习了下
利用也仍然和RMIServlet相关,在这个Servlet上还有个Filter(smartbi.freequery.filter.CheckIsLoggedFilter)
如果我们访问调用一些未授权的类方法,就会返回如下字段
我们先来看看如果正常情况程序该怎么走,首先如果调用RMIServlet,则会尝试获取到className与methodName,获取的方式也多种多样
有通过解码windowUnloading参数获取
有通过GET/POST获取
甚至支持从请求体流中解析
后面通过下面这两个判断对类与方法做鉴权,如果为true则会继续判断是否登录,未登录则抛出CLIENT_USER_NOT_LOGIN
这里对于未授权右边部分我们可以不必关心,按照运算符优先级只要FilterUtil.needToCheck返回fals ...
FastJson与原生反序列化(二)
FastJson与原生反序列化(二)很早之前在发第一篇的时候@jsjcw师傅就曾提到1.2.49后也能利用引用绕过,后面由@1ue师傅在知识星球中利用这个思路成功绕过并分享了payload,至此fastjson全版本就彻底加入原生反序列化的gadget,向师傅们致敬,想着将文章完善的缘故,并且师傅们没有提到具体的原理,因此发个第二篇进行简单介绍。
当然这里不会详细说明完整的序列化与反序列化的过程,如果有感兴趣的可以参考panda师傅的博客,关于序列化流程分析总结与反序列化流程分析总结,里面已经写的很细致了。
回顾之前提到了从1.2.49开始,我们的JSONArray以及JSONObject方法开始真正有了自己的readObject方法,
在其SecureObjectInputStream类当中重写了resolveClass,通过调用了checkAutoType方法做类的检查,这样真的是安全的么?
resolveClass的调用乍一看,这样的写法很安全,当调用JSONArray/JSONObject的Object方法触发反序列化时,将这个反序列化过程委托给SecureObjectInp ...
利用TemplatesImpl执行字节码在实战中的踩坑记录
利用TemplatesImpl执行字节码在实战中的踩坑记录在平时,无论是JNDI注入,还是反序列化,只要涉及到不出网的场景,TemplatesImpl的利用就很广泛,这里记录一个在实战中遇到的踩坑记录,篇幅不多贵在记录。
假设当前服务器存在反序列化漏洞,不出网,当你兴高采烈的拿着工具去打的时候发现怎么也打不通,内存马上不去,回显也没有,这是怎么回事呢?且看下文。
既然需要使用TemplatesImpl加载字节码,那么就需要生成恶意类的Bytecode
这里我们再温习一下,最终在getTransletInstance方法处加载字节码到jvm,并调用newInstance实例化触发恶意代码的加载
网上的各种工具,基本上都使用了javassist框架进行恶意类的生成,这里以TomcatEcho为例,大多数工具代码都类似下面的写法,创建类,添加方法,生成ByteCode
问题就出在输出ByteCode的过程中,当调用ClassPool.getDefault()的过程中,会初始化ClassFile,根据某些不同版本特定存在的类来判断当前环境的MAJOR_VERSION(Ps:这里的反编译有点 ...
FastJson与原生反序列化
FastJson与原生反序列化前言这其实是我很早前遇到的一个秋招面试题,问题大概是如果你遇到一个较高版本的FastJson有什么办法能绕过AutoType么?我一开始回答的是找黑名单外的类,后面面试官说想考察的是FastJson在原生反序列化当中的利用。因为比较有趣加上最近在网上也看到类似的东西,今天也就顺便在肝毕设之余来谈谈这个问题。
利用与限制Fastjson1版本小于等于1.2.48
Fastjson2目前通杀(目前最新版本2.0.26)
寻找既然是与原生反序列化相关,那我们去fastjson包里去看看哪些类继承了Serializable接口即可,最后找完只有两个类,JSONArray与JSONObject,这里我们就挑第一个来讲(实际上这两个在原生反序列化当中利用方式是相同的)
首先我们可以在IDEA中可以看到,虽然JSONArray有implement这个Serializable接口但是它本身没有实现readObject方法的重载,并且继承的JSON类同样没有readObject方法,那么只有一个思路了,通过其他类的readObject做中转来触发JSONArray或者JSO ...
2023BiosCTF-VulnDrive2(很实战推荐)
2023BiosCTF-VulnDrive2吐槽比赛的时候后面完整利用已经串起来了,脑抽卡在了SSRF利用上,还是太死脑筋了
Docker备份:https://github.com/Y4tacker/CTFBackup/blob/main/2023/BiosCTF/vulndrive2.zip
正文环境首先简单看看docker-compose.yml,发现php环境在外网
根据networks配置可知waf与其他两个环境互通,frontend与app不互通
审计以下为了方便叙述思路,将调整讲解的顺序,其中会涉及到部分穿插
waf这个容器中运行了一个go程序
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport ( "fmt" "log" "net/http" "net/http/httputil& ...
2023IdekCTFWriteup
2023 IdekCTF Writeup由于对xss不是很懂所以一般都是做的非xss部分,很高兴最终被强大的队友带飞下拿到第二名
环境环境可以在我的仓库下,备份了Dockerfile,可以本地搭建自己学习
https://github.com/Y4tacker/CTFBackup/tree/main/2023/IdekCTF
Task Manager一个python写的好看的TODO LIST
那么我们具体来看看如何实现,这里重点看,通过json传入task与status两个参数,不同参数条件进入不同分支,通过tasks对象实现了基本的功能
12345678910111213141516171819202122@app.route("/api/manage_tasks", methods=["POST"])def manage_tasks(): task, status = request.json.get('task'), request.json.get('status') try: ...
2023RealWorldCTF-由于有很多day就不公开了
3875a73fa8e4580fbc359407ee55bcf6a63908237e63cbc8c1fbc66be766f5673be64868a2a40278b08e1aa262b65f8da93dada42a15620da02e2432e9354d3cacc4b1e4ace1d59cc7f83b9fd0bea7864e9d7dbdcf9bc111839c9eb46360119481c3a3d6b3b68b59bd2e414081b26b7710cf8aa078e19b088a94d8971f8ddba96a06b91d70e69bc755cf547a1c2e6748597b3fbfd2bb762ac61fddc5ee8a30de718f2daaa2183d3eb0d623ef9b2a8e714a9933f10fb1bb52eff61f67805f05254c331d83968894a574a3b543598797f4743821846003ecb655c865ee4e9a0b0f234d7e3b502ecafbf8ff0f9990d367aea27600236699e7f7f ...
TetCTF2023&Liferay(CVE-2019-16891)(Pre-Auth RCE)
TetCTF2023&Liferay(CVE-2019-16891)(Pre-Auth RCE)这周末打了这个比赛挺不错的一个,但是主要还是写一下这题,其他题虽然也有难度但是并不值得我记录
正文首先这题被拆分为了两个部分,觉得两部分都挺有意思的,就单独讲讲
part1主要是利用node与python的requests的差异性绕过host限制
part2主要是仅仅通过一个GET触发Liferay的RCE
关于题目备份也是放在了我的Git里:https://github.com/Y4tacker/CTFBackup/tree/main/2023/TetCTF
Part1首先一眼看到这个路由
1app.post('/api/getImage', isAdmin, validate, async (req, res, next) => {
这里面有个鉴权操作,要求密码是Th!sIsS3xreT0但是长度不能大于12,很常规基础的考点了,通过数组就行?password[]=Th!sIsS3xreT0
12345678910const isAdmin ...
浅谈JspWebshell之编码
浅谈JspWebshell之编码写在前面 最近@phithon在知识星球中分享了一个多重编码的webshell姿势后,先膜一下大佬
出于对代码实现的好奇简单看了看tomcat的具体实现以及尝试是否能够更深入的目的也便有了本篇,当然后面也发现这种方式不太灵活是有一定编码限制的,后面也会提到,当然最终经过我的努力,发现了其他三种实现双重编码的方式,甚至最后发现可以实现三重编码
那么下面就进入正文吧
环境相关及其他说明 本篇以tomcat8.0.50为例进行分析,后文简称为tomcat,同时讨论的是第一次访问并编译jsp的过程(有小区别不重要)并且不涉及到其他小版本差异
正文这里没有那么多废话,我们知道其实jsp是Servlet技术的扩展,它本身也是一种模板,通过对这个模板内容的解析,根据一定规则拼接到一个java文件后最终会编译为一个class文件并加载,在这个过程当中就涉及的很多解析的过程,这里由于主题限制,我们不必太过关心,我们重点偏向于去了解它的编码是如何被识别的即可.
对于这部分处理逻辑其实是由org.apache.jasper.compiler.ParserCo ...