NSS [NUSTCTF 2022 新生赛]Ezjava1

NSS [NUSTCTF 2022 新生赛]Ezjava1

题目描述:你能获取flag{1}吗

开题,一眼java web中的index.jsp

NSS [NUSTCTF 2022 新生赛]Ezjava1_第1张图片

默认index.jsp中的body内容是$END$

NSS [NUSTCTF 2022 新生赛]Ezjava1_第2张图片

附件jar包导入IDEA,会自动反编译。看看源码。

附件结构大致如此。主要看classes.com.joe1sn中的代码就好啦。

NSS [NUSTCTF 2022 新生赛]Ezjava1_第3张图片

HelloController.class内容如下

package com.joe1sn.controller;
import ...

@Controller
public class HelloController {
    public HelloController() {
    }

    @RequestMapping({"/hello"})
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mav = new ModelAndView("index");
        mav.addObject("message", "Do you know \"beans\"?");
        return mav;
    }

    @PostMapping({"/index"})
    public void postIndex(@ModelAttribute EvalBean evalBean, Model model) {
        System.out.println("@POST Called");
    }

    @GetMapping({"/index"})
    public void getIndex(@ModelAttribute EvalBean evalBean, Model model) {
        System.out.println("@GET Called");
    }

    @RequestMapping({"/addUser1"})
    @ResponseBody
    public String addUser(User user) throws IOException {
        System.out.println(user.getDepartment().getName1());
        if (user.getDepartment().getName1().contains("njust") && user.getName().contains("2022")) {
            return "flag{1}";
        } else {
            String var10002 = user.getDepartment().getName1();
            File f = new File("../webapps/ROOT/" + var10002 + user.getName() + ".njust.jsp");
            return f.exists() ? "flag{2}" : user.getName();
        }
    }
}

根据题目描述,我们的目标是拿到flag{1},所以核心代码是:

if (user.getDepartment().getName1().contains("njust") && user.getName().contains("2022")) {
            return "flag{1}";
}

判断条件:

调用user对象中的getDepartment方法然后再调用到Department类中的getName1方法,之后判断调用后的结果是否等于或包含”njust”

调用user对象中的getName方法,之后判断结果是否等于或包含”2022”

看了一眼User类和Department类,getxxx()方法,最后返回的就是this.xxx(user.xxx)。所以上述要求也就是:

User.department.name1        等于或包含”njust”
User.name                    等于或包含”2022”

User类的属性应该是直接GET/POST传入的。

NSS [NUSTCTF 2022 新生赛]Ezjava1_第4张图片

由于这里没有指定GET或者POST提交,所以都行。注意路由是/addUser1

payload:

/addUser1?department.name1=xxxnjustxxx&name=xxx2022xxx

NSS [NUSTCTF 2022 新生赛]Ezjava1_第5张图片

你可能感兴趣的:(Java,java)