Bangladesh, riding on Mahmudullah (69) and Mushfiqur Rahim's (44) 108-run seventh wicket alliance, fought back to go for tea at 228 for eight but fell apart soon after.
Zaheer Khan (3-54) and Amit Mishra (3-65) were the wicket-takers.
After Zaheer and Ishant (2-47) ripped the Bangladesh batting with three quick wickets in the morning, Mahmudullah and Mushfiqur dug their heels, with the hosts losing only two wickets in the second session.
They in fact looked well poised to take the first innings lead but Mushfiqur's attempt to slog-sweep Mishra resulted in a top edge and Virendra Sehwag made no mistake in taking the catch a few minutes before tea.
Mishra soon got his second wicket when Shahadat Hossain holed out a catch to Yuvraj Singh at point.
Earlier, Zaheer and Ishant Sharma ran through the Bangladesh batting line-up to leave the hosts reeling at 118 for six at lunch.
Zaheer and Ishant (2-47) continued to be impressive on the third day as they extracted movement and bounce off the pitch to rattle the Bangladesh batting.
Resuming at 59 for three, Mohammad Ashraful (2) and Raqibul Hasan could only add nine runs before Ashraful edged an Ishant delivery to Rahul Dravid at first slip.
Skipper Shakib Al Hasan (17) paced up the scoring with four boundaries in the next four overs and just when he looked to settle down he slashed Zaheer over gully, only to be caught by Virender Sehwag.
Sreesanth came back to end Raqibul's resistance, having him caught behind.