Ziaur Rahman led the Bangladesh attack with four wickets as they completed a 143-run win over Zimbabwe on Monday to draw the two-match series 1-1 and gain revenge for their mauling in the first Test.
Set a target of 401 runs to win in their second innings at the Harare Sports Club, Zimbabwe were bowled out for 257 just before tea on day five to hand Bangladesh only their fourth Test victory.
Hamilton Masakadza provided the only real resistance as he finished unbeaten on 111.
Zimbabwe resumed on their overnight score of 138 for four wickets, but nobody could build a significant partnership with Masakadza.
Medium-pacer Rahman finished with figures of 4-63 and was the best of the visiting bowlers, though he was ably supported by spinner Shakib Al Hasan who bagged 3-52.
Bangladesh captain Mushfiqur Rahim was pleased with the way his team responded after being humiliated in the first Test in a 335-run defeat.
"A Test win is a big achievement for us and after the first Test all the pressure was on us," Rahim said in a TV interview.
"The boys have stuck their hands up, especially the senior guys who all played well. That shows the character of our team. Hopefully we can take this momentum into the one-dayers."
Zimbabwe captain Brendan Taylor defended his decision to bowl having won the toss on the first morning and admitted they were simply out-performed.
"We expected them to come back strongly, we let ourselves down on the first day and that set the tone," Taylor said.
"The wicket played a little bit better than we thought it would on day one. There were some quality performances from them and they deserve the win. But we are fairly pleased with some of our own performances and can be proud with a drawn series."
Bangladesh's only other victories in their 79 Tests to date came with a 2-0 series win against a weakened West Indies outfit in 2009, as well as a win against Zimbabwe in Dhaka in 2005.
Scorecard
Bangladesh (1st innings): 391
Zimbabwe (1st innings): 282
Bangladesh (2nd innings): 291-9d
Zimbabwe (2nd innings):
V Sibanda c Sohag Gazi b Shakib Al Hasan 32
R Chakabva b Shakib Al Hasan 22
H Masakadza not out 111
B Taylor lbw Ziaur Rahman 10
M Waller b Ziaur Rahman 15
S Masakadza lbw Mohammad Ashraful 24
E Chigumbura c Robiul Islam b Sohag Gazi 2
R Mutumbami b Ziaur Rahman 12
G Cremer c Nasir Hossain b Ziaur Rahman 3
K Meth lbw Robiul Islam 4
K Jarvis lbw Shakib Al Hasan 7
Extras (b-4, lb-7, nb-4) 15
Total (all out, 95.3 overs) 257
Fall of wickets: 1-36, 2-66, 3-96, 4-118, 5-164, 6-169, 7-200, 8-214, 9-219
Bowling: Robiul Islam 20-5-53-1 (nb4), Sajidul Islam 3-1-9-0, Shakib Al Hasan 11.3-0-52-3, Sohag Gazi 31-11-56-1, Ziaur Rahman 23-8-63-4, Mohammad Ashraful 7-1-13-1.
Photograph: Andrew Biraj/Reuters