Souray scored twice on the man advantage and set up another power-play goal by Alex Kovalev as the Canadiens (3-0-2) remained without a loss in regulation time.
Matthew Lombardi scored twice while Dion Phaneuf and Chuck Kobasew also scored for the Flames (2-3-1), which lost a second game in a row. Phaneuf also had two assists as the Flames struck twice on the power play.
Montreal outshot Calgary 36-24 in a game that featured high-tempo action and plenty of scoring chances, constantly testing goalies Miikka Kiprusoff of the Flames and Cristobal Huet of the Canadiens.
Bonk checked the puck away from Phaneuf and went in on a short-handed breakaway to score only 1:32 into the match.
A scary moment came at 3:38, when Montreal winger Aaron Downey looked to be knocked out cold by an open-ice hit from Robyn Regehr in the neutral zone. Downey was taken to hospital for tests and there was no immediate word on his condition.
That touched off a series of shoving matches, with a string of penalties but no fights through the rest of the period.
Lombardi fired into an open side on a power play at 7:04. Souray scored on a bullet shot from the point during a four-on-three at 13:27 and Lombardi converted a Regehr pass to tie it at 13:54.
Kobasew scored 44 seconds into the second frame, but Bonk restored the lead 33 seconds later. Phaneuf drilled in a power play point shot at at 7:46 only to see Souray do the same at 9:36.
Kovalev made a move at the blue-line, moved to the right circle and put a blast in off Kiprusoff for a 5-4 lead at 15:54.
The Flames went into the game with the league's worse power play, with only one goal in 33 chances, but got two against Montreal. The Canadiens went in wit the best penalty-killing, with one goal against in their opponents' previous 24 attempts.
The Canadiens play Wednesday night in Chicago, while the Flames end a four-game road trip Thursday in Boston.
Notes - D Rhett Warrener played his first game of the season for Calgary after missing the first five with a knee injury. . . . Lombardi, a native of Hudson, Que., had his own cheering section of family and friends in the crowd of 21,273. . . . D Mark Giordano and F Darren McCarty sat out for Calgary, while F Garth Murray was scratched by Montreal. . . . Mark Streit played his first game in place of injured D Mathieu Dandenault.