The result leaves Tony Mowbray’s side two points behind sixth-placed Cardiff with one game to play, while Southampton remain second, needing a win in their last game to guarantee promotion.
Reading have been crowned as the division’s champions as a result and, should third-place West Ham beat Leicester on Monday, the pressure will be on Southampton next weekend.
Knowing a win would have taken them up, Saints made the perfect start, scoring after 46 seconds through Billy Sharp.
Adam Lallana cushioned a header into the path of Rickie Lambert. His first touch was heavy but the second deadly, laying the ball into the path of Sharp who could not miss.
Middlesbrough, on an awful run of one win in 10, reacted to that early setback well.
Faris Haroun played a low cross in from the right which would have led to a tap-in but for the reactions of Danny Fox who cleared back to Haroun. He found Barry Robson at the edge of the area but he could only fire over.
Robson went close again after 14 minutes. He received the ball from Nicky Bailey and brought it under control with a wonderful first touch, but lashed just over.
Southampton went close again 10 minutes before half-time. Zemmama fouled Richard Chaplow just outside the box and from the resulting free-kick, Fox whipped his effort just wide, with Jason Steele beaten.
But Middlesbrough gave their play-off hopes a boost in first half injury time.
A Robson cross was headed out into the path of Bailey, who let fly with a left-foot volley that found Kelvin Davis’ bottom left corner via a Chaplow deflection.
Despite the equaliser at the end of the first half, only Middlesbrough’s seventh goal in 11 games, it was Southampton who came flying out for the second half, and Lambert went close with a ferocious free-kick that went just over.
Sharp also tried his luck minutes later. Lambert could not control when the ball fell to him and Sharp was on hand but sliced over.
Controversy reigned moments later when the already booked Seb Hines fouled Lallana when he was ready to let fly at the edge of the area, but the referee elected not to book the Middlesbrough defender again. Lambert’s resulting free-kick was off target.
Southampton’s 31-goal top scorer continued to threaten. This time he found enough space in the box to attempt an audacious overhead kick, but could only direct the effort wide.
It took more than 25 minutes for Middlesbrough’s first attempt of the half, and Davis had to be alert to tip wide a Tony McMahon free-kick.
After being on the back foot for so long, it was Middlesbrough who went ahead 13 minutes from time, with a goal worthy of winning any game.
Jose Fonte was penalised for holding back Lukas Jutkiewicz and from the resulting free-kick, Zemmama curled a beautiful free-kick into the top left corner.
Southampton struggled to find their rhythm after that goal.
They went close with two minutes remaining when Guly Do Prado directed a Lallana volley goalwards, but he was just wide with his effort and Middlesbrough held on.