Montreal halted a three-game losing streak and also ended the Flyers' winning streak at five.
The Canadiens scored the game's first three goals and got a 29-save performance from Jaroslav Halak. Eleven Montreal players recorded at least one point.
Antero Niittymaki allowed all five goals on 31 shots to take the loss. Philadelphia failed to make up ground on the New York Rangers, who are six points in front of the Flyers atop the Atlantic Division.
Montreal, which came into the game with just one power-play goal in its last six games, produced two against the Flyers.