NSS [NUSTCTF 2022 新生赛]Ezjava1
题目描述:你能获取flag{1}吗
开题,一眼java web中的index.jsp
。
默认index.jsp
中的body
内容是$END$
附件jar包导入IDEA,会自动反编译。看看源码。
附件结构大致如此。主要看classes.com.joe1sn
中的代码就好啦。
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传入的。
由于这里没有指定GET或者POST提交,所以都行。注意路由是/addUser1
。
payload:
/addUser1?department.name1=xxxnjustxxx&name=xxx2022xxx