A Model-driven Penetration Test Framework for Web Applications