Boro had led through George Friend, but Yossi Benayoun pegged it back and the game appeared to be heading for a draw.
However Boro keeper Dimi Konstantopoulos completely misjudged a back-pass leaving Zamora free to stroll in and score during second half injury time.
And there was still time for Morrison to wrap it up for Harry Redknapp's side.
QPR went close twice within the opening two minutes as Boro failed to clear a corner and Joey Barton's 25-yard drive was palmed away by Konstantopoulos.
Tom Carroll got to the rebound the Greek keeper blocked his close range follow up with his feet.
The home team then took control and Friend and Jacob Butterfield had shots turned over and Kei Kamara bundled behind from a free-kick.
Boro got a scrappy opener on 18 minutes as left-back Friend wriggled into the box from the flank and although he stumbled and lost the ball it was generously deflected back into his path to stab a low eight yard effort that squirmed through the hands of Rob Green and over the line.
Rangers grabbed an equaliser in first half stoppage time as Boro's defence was pulled out of shape and Niko Kranjcar nipped it to drill in a shot that was deflected kindly for Benayoun to rifle in from close range.
Rangers were brighter after the break and had the bulk of the play but it was scrappy.
Boro went close on 63 minutes as Albert Adomah brought down a ball to the edge of the box neatly then skipped past his marker to fire in a low shot that was straight at Green.
Rangers responded as Junior Hoilett streaked forward to slam a low 25-yard shot straight at Konstantopoulos.
The game seemed to be heading for a draw, when Boro lost concentration in stoppage time.
On 94 minutes a routine ball was played back towards Konstantopoulos and the keeper came out and took a swing at an attempted clearance and missed completely leaving Zamora free to stroll through and tap home.
And then on 96 minutes Morrison ran behind the defence to collect a diagonal cross and slammed home from 15 yards.