Luke Chambers headed the winning goal in the second half to end a four-match losing run on the road for Billy Davies' side and give them a first victory on their travels in nine attempts.
A Kris Boyd tap-in and a penalty from the on-loan Middlesbrough forward sent the Reds into half-time in control.
But Marvin Elliott halved City's arrears soon after the restart and Jon Stead headed them level on the hour mark.
Chambers had the last word, though, with his fifth goal of the season.
Source: PA
Source: PA