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).