Stand in coach David Notoane named a youthful team which was dominated by South Africa under-23 internationals.
Versatile defender Tercious Malepe was handed the captaincy, while goalkeeper Reyaad Pieterse started as Notoane opted for some experience in goal.
On the other hand, caretaker coach Mogomotsi Mpote named an experienced team which was led by former Bloemfontein Celtic winger Joel Mogorosi.
Experienced players such as Mosha Gaolaolwe, Lebogang Ditsele and Segolame Boy also started for the Zebras.
Bafana Bafana were the better side in the opening exchanges with Luther Singh looking lively upfront and he was also on set-piece duty.
The 21-year-old striker's corner-kick found Katlego Mohamme, who failed to steer the ball towards the target with the Zebras defence caught ball watching.
The deadlock was broken in the 19th minute when Singh scored with a low shot to make it 1-0 to South Africa in the 19th minute after being sent through on goal by Teboho Mokoena.
The momentum was with Bafana and they managed to double their lead when Grant Margeman scored with a well-taken shot to make it 2-0 to South Africa in the 28th minute.
The Zebras then grew into the game and they were able to test Pieterse, who made two magnificent saves to deny Mogorosi and Thero Setsile with the half-time break approaching.
South Africa were able to contain Botswana and the tournament hosts were deservedly leading 2-0 at the interval.
Bafana defended too deep after the restart as they looked to launch quick counter-attacks, but this allowed the Zebras to attack in numbers.
Mpote's men pulled one back just after the hour mark when former Highlands Park midfielder Ditsele headed home from a corner kick to make it 2-1 with Pieterse well-beaten.
Notoane then substituted Reeve Frosler, who looked tired, and he was replaced by fellow right-back Thendo Mukumela as the South Africa under-23 head coach tightened up the defence.
It was end-to-end stuff towards the end of the game as Boy unleashed a left-footed shot which was saved by Pieterse, while Botswana keeper Ezekiel Morake denied Mokoena with a finger-tip save at the other end.
Botswana never lost hope and they did grab an equaliser in stoppage time when Thatayaone Ditlhokwe scored with a header to ensure that the game ended in a 2-2 draw in regulation time and a penalty shootout followed.
The Zebras went on to win 5-4 on penalties with Mothusi Johnson scoring the winning spot-kick after sending Pieterse the wrong way.
The result saw Botswana advance to the semi-finals where they will face Lesotho on Wednesday, while South Africa are set to take on Uganda in the plate semi-finals on Tuesday.