The left-arm spinner finished with a career-best haul of 5-33 as the hosts defended their modest total of 220 by dismissing Zimbabwe for 194 on Tuesday.
Middle-order batsman Sean Williams slammed a career-best 68 for a second successive half-century, but his effort failed to stop Bangladesh from winning the day-night match.
Williams, who made 61 in the previous game, sustained Zimbabwe's hopes when he put on 75 for the fifth wicket with Elton Chigumbura (31) and 58 for the next with Keith Dabengwa (31).
Razzak swung the match in Bangladesh's favour when he bowled Dabengwa and then had Williams caught by substitute Farhad Reza in the closing stages, which saw Zimbabwe lose five wickets for 13 runs in the last four overs.
He was named man of the match for his maiden five-wicket haul.
Seamer Christopher Mpofu (4-42) and spinner Dabengwa (3-19) had earlier shared seven wickets to raise Zimbabwe's hopes of posting a win.
Dabengwa, with just three wickets in seven one-dayers before this game, was brilliantly supported by off-spinner Prosper Utseya, who took 1-21 off 10 economical overs on a slow track.
Bangladesh raced to 64 in fewer than 10 overs after being put in to bat, thanks to left-handed Shahriar Nafees (35) and teenager Mehrab Hossain (38), who began with a flurry of boundaries.
Zimbabwe fought back through spinners Dabengwa, Utseya and Williams, who did not allow the Bangladeshi batsmen to score freely during their tight spells.
Mohammad Ashraful (36), Saqibul Hasan (26) and Mashrafe Mortaza (23 not out) were the other notable contributors.
Bangladesh 220 all out in 49.2 overs (Shahriah Nafees 35, Mehrab Hossain 38, Mohd Ashraful 36, Saqibul 26; Mpofu 4 for 49, Dabengwa 3 for 19) beat Zimbabwe 194 all out in 49 overs ( S Williams 68, Chigumbura 31, Dabengwa 31; Abdur Razzak 5 for 33, Mortaza 3 for 34)