Ligue 1 Wrap: Saint-Etienne stay in Euro race
Christophe Galtier's side produced an excellent performance to hand the Corsicans only their third home league defeat of the campaign.
Brazilian striker Brandao opened the scoring with his second goal in as many games after 33 minutes before an injury-time own goal from defender Fethi Harek settled the game to move Saint-Etienne into third ahead of Lille, who face Lyon on Sunday.
Andre-Pierre Gignac was the hero as Marseille stayed in the hunt for the final Champions League place with a 1-0 triumph against Lorient.
Gignac scored the only goal seven minutes from time, the 28-year-old finding the net for the 14th time this season with a tap-in following good link-up play between Mathieu Valbuena and Dimitri Payet.
At the other end of the table, Valenciennes missed the chance to move out of the bottom three as they were held to a 2-2 draw in their crucial relegation clash with Sochaux.
An Abdul Waris penalty gave the hosts the lead early in the second half, only for Sochaux to equalise shortly after with a fantastic curling free-kick from Sebastien Corchia.
Ghana striker Waris looked to have ensured victory for Ariel Jacobs' men with his second in 86th minute but, again, Valenciennes' lead did not last, Florian Marange earning Herve Renard's visitors a point three minutes later.
That result keeps Valenciennes two points adrift of 17th-placed Evian, who fell victim to a late goal from Henri Saivet in a 2-1 defeat at Bordeaux.
Bottom club Ajaccio's hopes of survival were further dented by a 2-0 loss at Montpellier, Anthony Mounier and Remy Cabella netting as the hosts made it seven league games unbeaten.
Elsewhere, Mustapha Yatabare scored in the 93rd minute to give Guingamp a 1-0 win over Nice, whose goalkeeper David Ospina was sent off just a minute later.