Network Penetration Testing: Identifying and Exploiting Weaknesses