With Mduduzi Mdantsane suspended, City started Katlego Mokhuoane in midfield while Riyaaz Ismail, Genino Palace and Amadou Soukouna were recalled for Maritzburg.
After a difficult start, Maritzburg began to settle and created their first opportunity on 12 minutes from a shot on the turn outside the area by Friday Samu.
Though, the Citizens should have been in the lead two minutes later after a cross right of the area went all the way through to Tashreeq Morris to convert but he drilled well wide.
City provided more danger during the middle of the first half when another delivery out right from Khanyisa Mayo fell perfectly for Thabo Nodada, who stung the gloves of Marcel Engelhardt.
The Citizens made their dominance count in the final minute of the half as Mayo sent Engelhardt the opposite direction from the penalty spot after a foul by Keegan Ritchie on Thamsanqa Mkhize.
Ernst Middendorp unleashed a triple substitution right at the resumption of the second half, with Ryan Rae, Daylon Claasen and Steven Pereira introduced for Ismail, Palace and Tawonda Macheke respectively.
The Team of Choice looked energised following the fresh faces, as a speculative strike from afar by Claasen flew wide of goal, while Nodada went close for City a while thereafter.
Maritzburg conceded another penalty with five minutes to go when Pereira fouled Mogamat May in the area, but Mayo wasn't able to make it two from two spot-kicks as he struck the woodwork.
City weren't bothered by the missed effort and continued to search for a second goal in the final seconds, but the one goal was enough to send the side up to fourth spot.
Maritzburg: Engelhardt, Daniels, Allie, Ismail, Palace, Lukhubeni, Ritchie, Ndengane, Samu, Macheke, Soukouna.
Subs: Petersen, Human, Pereira, Baloyi, Claasen, Njoti, Rae, Kewuti, Van der Ross
City: Marques, Mkhize, Fielies, Cupido, Mashego, Ambina, Nodada, Mokhuane, Mayo, Martin, Morris.
Subs: Keet, Fisher, Fasika, Rhodes, Mokeke, Goedeman, May, Nel, Makola