Bangladesh were skittled out just after tea on the third day with three wickets apiece for Dilhara Fernando and Lasith Malinga and two each for Muralitharan and Malinga Bandara.
Muralitharan, playing in his 101st test, joined Australia's Shane Warne, who holds the world record with 659 dismissals, as the only player to reach the landmark when he had Khaled Mashud caught at square leg for six.
Bangladesh's cause would have been worse but for a solid knock of 73 from skipper Habibul Bashar, who added 52 with Mohammad Rafique after they had slumped to 110 for six. Bashar was trapped lbw by Malinga.
Rafique with 64, his third test fifty, entertained local spectators with three sixes and six fours.
Earlier, Sri Lanka added 14 runs to their overnight total of 302 for eight with opener Upul Thuranga's 444-minute innings of 165 ended by Shahadat Hossein, who finished with 5-86 for his first five-wicket haul in tests.
Bangladesh were out for 234 in their first effort.