Delron Buckley, Byrone Hendricks, Frank Gyamfi and Mario Booysen scored their spot kicks while Mohammed Awal ballooned his over the bar.
For Swallows Mpho Maleka, Giorgi Nergadze and Dikgang Mabalane scored. But Felix Obada and Luvhengo Mungomeni missed their efforts.
Lefa Tsutsulupa went really close in the opening minute with a shot towards the near post, but Shuaib Walters did enough to save the danger.
In the 15th minute Peter Petersen almost scored an own goal. When trying to clear a cross, he got his direction wrong and almost put it into the top corner of goal.
The home side can thank Walters for a very good save in the 21st minute when he stopped Katlego Mashego from scoring an excellent goal.
In the 37th minute Cuthbert Malajila got his head onto a cross but could not get direction or power on his header.
Visiting Swallows came close in the 62nd minute when Chabangu and Mashego combined cleverly, but the ball slipped away from Mashego just when it mattered most.
A minute later Mashego got into space down the left channel and on the edge of the danger area he pulled the trigger only to mis-time his shot and did not trouble Walters at all.
In the 73rd minute the impressive Philani Zulu picked up a loose ball outside the danger area and fired in a shot, but it was partially blocked and deflected out for a corner.
The game needed penalties to decide a winner after the teams ran out of ideas in the final third of the field.
After extra time, Maritzburg win 4-3 on penalties.
Penalty sequence: Buckley scores, Maleka scores; B Hendricks scores, Mabalane scores; Awal misses, Obada saved; Gyamfi scores, Nergadze scores; Booysen scores, Mungomeni misses
Maritzburg: Walters, Petersen, Awal, Booysen, De Jongh (Smeekes 58’) [Evans 99’], B Hendricks, Zulu, Cloete, Buckley, Mandaza (Gyamfi 58’), Malajila
Swallows: Etafia, Mapemba, A Hendricks, Mungomeni, Lekgothoane, Obada, Nergadze, Tsutsulupa, Chenene (Mabalane 69’), Chabangu (Mathebula 71’), Mashego (Maleka 110’)