Chris Boyd's side shipped three tries in the first quarter of the Champions Cup clash at the Kingspan Stadium, losing Alex Mitchell to the sin bin in the process.
Mitchell returned to grab his side's first try of the night but Ulster bagged a bonus-point score thanks to an Ahsee Tuala error.
Saints fought to the end and some fine work from Mitchell and George Furbank allowed Courtnall Skosan to cut the gap to five points with a minute to go.
But Ulster held out to secure a win that keeps them well in the hunt for a last-eight place.
Saints are all but out of the competition with two pool games still to play in January, having been beaten by Racing 92 and Ulster in successive weeks.
The black, green and gold were much improved from the previous week's 45-14 defeat at the hands of the French giants, but they never really looked like winning in Belfast.
Saints had headed to the Kingspan Stadium looking to summon up the spirit of 2012, when they secured a sensational 10-9 Ravenhill win just eight days after being humbled at home by Ulster.
But the away side were immediately on the back foot on this occasion, and it didn't take long for the men in red to break through.
Ulster played on the edge but retained their patience, and they exposed Saints in defence as hooker Rob Herring ran in for a score inside two minutes.
John Cooney converted but Furbank soon cut the gap, kicking the second of two penalties won in the Ulster half.
But the respite didn't last long and referee Andrea Piardi was soon sending Mitchell to the sin bin for a deliberate knock-on close to his own line, awarding a penalty try in the process.
Saints again responded with a successful Furbank penalty, and Ulster lost key centre Stuart McCloskey to injury.
But McCloskey's midfield partner soon had a big part to play in his team's third try of the night, as James Hume chipped ahead for Ethan McIlroy to gather, step and score.
Cooney missed the conversion and Furbank again notched a penalty almost immediately after an Ulster try to reduce the deficit to 10 points.
Ollie Sleightholme looked hungry to carry the fight to Ulster and after the hosts were penalised for going off their feet at the breakdown, Furbank slotted another three points.
Unlike seven days earlier, when they were 28-7 down to Racing 92 at the break, Saints were still very much in the game when the second half began.
Saints tried to come out on the front foot but they were struggling to find way through a solid Ulster defence, and it was to be the hosts who notched the first points of the second period.
Furbank won the ball back at the breakdown, but Fraser Dingwall soon found himself isolated, allowing Nick Timoney to win a penalty for Ulster, which Cooney kicked to make it 22-12.
But Saints' defence had been so much better after the difficult opening 20 minutes and Ulster were being frustrated.
That was until Saints lost a lineout in their own 22, allowing Ulster to build a platform.
With a penalty coming, Billy Burns sent a hopeful crossfield kick in the directon of Craig Gilroy, but Tuala failed to catch it and instead the ball fell into the path of Gilroy, who bagged the bonus-point try with glee.
Cooney missed the conversion but Saints were now 15 points down with little more than 20 minutes to go.
Four the fourth time on the night though, Saints hit back almost immediately.
Mitchell dragged three Ulster defenders in and after they failed to get a grip on him, the scrum-half dived over for the score.
Furbank couldn't convert and Saints were soon under pressure again as Skosan was penalised for blocking and Ulster set up another attack.
Saints held firm and they still had plenty of time to try to really rattle Ulster.
But the home defence was proving tough to penetrate and Saints weren't able to find the speed and accuracy they needed to truly cause problems.
However, Mitchell changed all that, grabbing the ball and speeding through the Ulster defence before combining with Furbank to get Skosan in for his trademark score.
Furbank missed the conversion to leave Saints five points behind with a minute to go.
Ulster won a penalty in Saints territory with the clock in the red but they opted to kick the ball out rather than go for goal, giving the black, green and gold a deserved losing bonus point.
Ulster: Lowry; Gilroy, Hume, McCloskey (S Moore 18), McIlroy; Burns, Cooney; Warwick (McGrath 61), Herring (Andrew 56), M Moore (O'Toole 58); O'Connor (Carter 65), Henderson (c) (Treadwell 47); Rea (Jones 73), Timoney, Vermeulen.
Saints: Tuala (Hutchinson 60); Sleightholme, Proctor, Dingwall, Skosan; Furbank, Mitchell; Waller (Iyogun 52), Haywood (Fish 52), Painter (Carey 52); Ribbans, Ratuniyarawa (Coles 67); Lawes, Ludlam (c), Wood (Augustus 56).
Referee: Andrea Piardi