This has been solved, I misinterpreted the SUB_DATE() function output, for anyone's reference the answer I needed was
SELECT name FROM visitor WHERE dob <= DATE_SUB(CURDATE(), INTERVAL 21 YEAR) AND dob >= DATE_SUB(CURDATE(), INTERVAL 25 YEAR)
Sorry for the noise ;)