前言
题目所给附件为war,由于只有部分源码,加上本地tomcat+idea调试没搞好,这里就用springboot直接搭了一个
根据sq师傅的writeup复现,具体参考D^3CTF 2025 writeup by Mini-Venom
分析
Controller中给出三个路由
view
page可控,这里可以直接解析jsp文件
Upload
可以上传文件,但是有黑名单,过滤了jsp jspx这些
BackUp
打包和解压两个操作,deepseek生成的流程图:
这里的文件上传没有问题,我们直接来看BackUp
路由,跟进tarDirectory
方法
这里有putNextEntry
和new TarEntry
方法
继续跟进putNextEntry
方法
这里调用了writeEntryHeader
方法
然后调用了TarHeader#getNameBytes
方法
(byte)name.charAt(i)
这里存在强制类型转换,会把char强制转换成byte,也就是字符转换为字节数组
Java的char是16位Unicode字符,而byte[]是8位字节数组,这里的转换就相当于取字符的低八位
那么思路就很明显了,我们只要构造低八位是0x70的Unicode字符,经过tar->untar就可以得到jsp文件
这里借用sq师傅的脚本
1 | target_byte_value = 0x70 # 对应 ASCII 字符 'p' |
生成了很多,我们随便选一个,构造exp.jsɰ
1 | 由于是本地测试,内容就不写了,一个回显马就行 |
上传
打包解包后得到jsp文件
About this Post
This post is written by p0l1st, licensed under CC BY-NC 4.0.