The 21-year-old Australian, who has missed most of this season with a back injury, struck moments prior to the interval.

Rangers had gone ahead through Lee Wallace on 11 minutes, but were reduced to 10 men when Lee McCulloch saw red on 24 minutes for violent conduct after a clash with Graham Carey.

St Mirren then made their numerical advantage count, with Mooy levelling, after he turned Steven Whittaker before unleashing a wonderful left-foot strike which went in off Alan McGregor's post.

A minute later, the Saints were ahead when Paul McGowan took his chance to stun the Gers.

Mooy would be replaced on 62 minutes, as Rangers couldn't find a way through with Dorin Goian sent off late to rub salt into the wounds. Matt McKay wasn't in the Rangers squad.

Elsewhere, Ryan McGowan played a full game at full-back as Hearts knocked off Motherwell 2-0.