Télécharger bugged.tgz
Ce site est un exemple de site vulnérable aux injections JPQL. Après avoir lancé le site, vous pouvez y accéder sur localhost:8080/directory.
La vulnérabilité se trouve dans la classe UserService
:
@Service public class UserService { @PersistenceContext EntityManager em; @Transactional public List<User> searchByLastName(String lastName) { var q = "SELECT s FROM User s WHERE s.lastName = '"+lastName+"'"; return em.createQuery(q,User.class).getResultList(); } }
Cette classe est appelée dans le controlleur:
@Controller public class DirectoryController { @Autowired UserService userService; @GetMapping("/directory") public String rectangleForm(){ return "form"; } @PostMapping("/directoryAction") public String rectangleFormProcess(@ModelAttribute("search") Search search, Model model){ var answers = userService.searchByLastName(search.getLastName()); model.addAttribute("answers", answers ); return "results"; } private static class Search { private String lastName; ... } }
Lancez le site. Votre but est de trouver le numéro de téléphone d'Arnaud Carayol dans ce site (sans regarder dans la base ou dans le fichier Application.java
).