Ilya Bryzgalov stopped 18 shots for the Flyers (12-14-1), who are still on the outside of the Eastern Conference playoff race.
They are ahead of the Sabres, who are buried in last place in the Northeast Division and have lost four straight. Brian Flynn and Jochen Hecht scored for Buffalo.
With both teams struggling, tempers were short. Buffalo's Mike Weber slugged it out with Wayne Simmonds, and Sabres center Steve Ott threw a punch at Kimmo Timonen.
Hecht scored early in the third to make it 3-2 and give the Sabres some life. The Sabres didn't let up minutes later and had a shot trickle past Bryzgalov. Philadelphia's Braydon Schenn made a split-second lunge and knocked away the puck just before it crossed the line for the tying goal.
The Flyers will take the stops however they come. They needed this one a day after a 3-0 loss at Boston. The Flyers held a closed-door team meeting after the game.
Philadelphia was coming off a 5-4 loss to Pittsburgh on Thursday, going scoreless in the final two periods and blowing a 4-1 lead. The scoring drought reached five periods on Saturday.
There was no danger of a scoring slump against the Sabres. Gagne scored his second goal since he was reacquired from Los Angeles on a slow trickler past Ryan Miller on the power play. Talbot scored a short-handed goal minutes later for a 2-0 lead.
Flynn punched in the rebound to make it 2-1 midway through the first.
Then they rumbled.
Simmonds took out Tyler Ennis and followed it with a fight against Weber. Simmonds connected with three straight rights to the side of the face and easily won that fight as the crowd roared in appreciation. Weber was hit with a misconduct.
Ott threw a punch at Timonen to end the first. Flyers forward Scott Hartnell went up to Ott, and the two jawed at each other as they left the ice to end the period.
Giroux made Buffalo pay when he scored only 17 seconds into the third for Philadelphia's second power-play goal and a 3-1 lead.
The Flyers fumbled the puck at the blue line, and Hecht capitalized with a short-handed goal to make it 3-2.
Each team had more hits than goals from there. Buffalo forward Nathan Gerbe tried to rough up Giroux along the back boards with hits to the back and head. Luke Schenn stood up for Giroux and sent Gerbe into the boards.