Bafana Bafana got off to a pacey start when Keagan Dolly raced into the box and was brought down, but the match official waved play on.
Zambia responded with a quick counterattack looking to catch the visitors napping, but they were lacking in the final third.
Justin Shonga went one-on-one with Itumeleng Khune, who returned to goal after missing the previous clash, and the Kaizer Chiefs goalkeeper came out tops.
Khune made another goal-saving stop from a free-kick off the boot of Shonga once again on 12 minutes with the game starting to open up at both ends.
Bafana went ahead three minutes later courtesy of Percy Tau following a goalmouth scramble in which the goalkeeper failed to handle properly.
The goal-scorer got an opportunity to hit a second with just the keeper to beat, but failed to make the chance count on 22 minutes.
Zambia threatened to get the equaliser after Brian Mwila capitalised on a poor pass from Thulani Hlatshwayo, but the striker misfired his effort a minute after the half-hour mark.
The first change off the bench came from the home side when Lazarus Kambole made way for Mwila after 33 minutes, however, they failed to make any serious attempts at goal as Bafana took a slight lead into the break.
In the second half, Bafana were almost punished after a poor pass from Ramahlwe Mphahlele to Khune instead found Fashion Sakala, but the goalkeeper was on hand to make a save.
The Kaizer Chiefs skipper was keeping the host in the game with another blinding save off the head of Ziyo Tembo.
The tie was sealed a minute from added time after substitute Lebohang Mothiba capitalised on a looping delivery for his second goal in his many matches.
Bafana: Itumeleng Khune, Thulani Hlatshwayo, Daniel Cardoso, Ramahlwe Mphahlele, Innocent Maela, Teboho Mokoena, Siphesihle Ndlovu, Kamohelo Mokotjo, Keegan Dolly, Sibusiso Vilakazi, Percy Tau.
Substitutes: Brendan Peterson, Reeve Frosler, Sifiso Hlanti, Motjeka Madisha, Dean Furman, Aubrey Modiba, Themba Zwane, Phakamani Mahlambi, Lebogang Mothiba, Thembinkosi Lorch, Ryan Moon.