Veteran fly-half David Humphreys kept Ulster in the title hunt with five penalties as Glasgow's Celtic League woes deepened at Firhill.
Glasgow (3) 18:
Tries: J Beattie, H O'Hare
Cons: D Parks
Pens: D Parks (2)
Ulster (18) 27:
Try: I Boss, J Harrison
Cons: D Humphreys
Pens: D Humphreys (5)
Ulster scrum-half Isaac Boss squeezed over for a try after confusing his markers with a clever dummy.
And former Australian Test lock Justin Harrison snapped up the visitors' second touchdown of the evening.
Glasgow responded with tries from John Beattie and Hefin O'Hare but Ulster were not to be denied.
Ulster - backed by a big contingent of noisy fans - made a storming start and Humphreys broke the deadlock within 60 seconds.
The Warriors replied in positive fashion but could not make their territorial advantage count.
Ulster went further ahead after 19 minutes when they surged across the 22-metre line before Boss showed some nice footwork to outfox his opponents and secure a try.
Humphreys converted, while Glasgow hit back with a Dan Parks penalty.
However, Humphreys then thumped over a long-range penalty after Warriors hooker Scott Lawson was warned for dissent.
And even worse was to come for the Scots when former Harrison snapped up Ulster's second touchdown.
Humphreys was successful with his kick again to leave Glasgow trailing further but they rallied to create a fine try for substitute Beattie.
Parks traded penalties with Humphreys before dangerman Beattie set up another home score for O'Hare - Parks converting to ensure a tense finale.
Any prospect of the Warriors completing their comeback was dashed when Humphreys took his penalty tally to five.
Glasgow: Staniforth, Lamont, O'Hare, Henderson, Shaw, Parks, Pinder, Tckachuk, Lawson, Murray, Turner, Hamilton, Wilson, MacFadyen, Petrie. Replacements: Thomson, Prescott, Eddie, Beattie, Barclay, Howarth, Davey.
Ulster: Cunningham, Bowe, Trimble, Bell, Maxwell, Humphreys, Boss, B. Young, R. Best, S. Best, Harrison, McCullough, N. Best, Ferris, Wilson. Replacements: Brady, J. Fitzpatrick, Caldwell, McMillan, Campbell, Larkin, Topping.
Referee: Tim Hayes (WRFU)