NewStarCTF2025-Week5-Web:从计算器到博客系统的安全攻防实战

1. 眼熟的计算器:Java反序列化与黑名单绕过的实战

这题一上来就挺有意思的,一个看起来平平无奇的在线计算器,但背后藏着Java反序列化的坑。我拿到题目后,第一反应就是去反编译那个JAR包看看源码。果然,里面有个黑名单机制,把java.lang.Runtimenew这些关键字给禁了,想直接执行命令?没门儿。

但咱们搞安全的,最擅长的就是“绕”。黑名单这玩意儿,本质上就是个猫鼠游戏,你禁你的,我绕我的。我当时的思路是,既然不能直接new一个Runtime对象,那我能不能用反射(Reflection) 来曲线救国呢?反射是Java里一个非常强大的特性,它允许程序在运行时获取类的信息并动态调用方法,很多时候能绕过编译期的限制。

我写了个JavaScript的Payload,核心思路是这样的:先把java.lang.Runtime这个类名拆开,用字符串拼接绕过关键字检测,比如'java.lang.Run' + 'time'。然后通过Java.type()动态加载这个类。获取到Runtime类之后,再用getRuntime()方法拿到实例。执行命令的部分和正常情况一样,runtime.exec('cat /flag')。但这里又有个小麻烦,黑名单也禁了new关键字,我怎么创建Scanner对象来读取命令执行结果呢?

还是得靠反射。我通过Scanner.class.getConstructor()拿到了Scanner的构造方法对象,然后关键的一步来了:不能用new,那就用构造方法对象的newInstance方法来创建实例。但newInstance这个词本身也可能被过滤,所以我又用了字符串拼接,把'n'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值