The bus, which was on its way to Chakwal, was carrying more than 100 people returning from a wedding.
It fell into a ravine about 25 km from Kahuta town in Rawalpindi district.
Rescue teams and local residents rushed to the spot and took the injured to nearby hospitals.
People had to cut through the mangled metal of the bus to remove bodies and the injured.
Rawalpindi police chief Azhar Hameed said an investigation was being conducted to determine the cause of the accident.