北京新浪网站制作公司太原网站制作
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"})@ResponseBodypublic 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
 

