The Mariners led by a point going into the game but a goal from substitute Labinot Haliti nine minutes from time proved decisive for the visitors and meant the sides swapped places.
Third-placed Adelaide United slipped up, with a 1-0 defeat at home to Brisbane Roar meaning they fell further off the pace.
Substitute Ben Halloran scored eight minutes from time, before a bad day for the hosts was capped by the last-minute dismissal of Osama Malik.
The win lifts Brisbane three places in the standings to sixth.
Perth Glory moved four points clear of bottom club Wellington Phoenix, beating fellow strugglers Sydney FC 2-1.
Chris Harold gave Glory a 20th minute lead and although Alessandro Del Piero levelled nine minutes later, Shane Smeltz's goal 10 minutes before the break restored the home side's advantage.
Sydney's Fabio Alves was sent off 12 minutes into the second half, helping Glory's quest for the win. They are now just two points behind their opponents and Melbourne Heart.