Thabo Matlaba made it 1-0 for SuperSport in the first half, before Lennox Bacela equalised in the second.
Mogogi Gabonamong put Matsatsantsa ahead at the start of extra time, before Bacela snatched his second to bring Bucs equal again and send the match to extra-time.
Both teams hit the ground running, but Roger de Sa’s men were dealt a blow when Collins Mbesuma was stretched off inside 15 minutes with an ankle injury after colliding with Thabo September.
The Zambian international was replaced by Bacela, who proved his critics wrong with two goals.
Bucs kept pressing, and Thandani Ntshumayelo had a long drive go narrowly wide, before Ronwen Williams made a save from Daine Klate’s free-kick.
Klate looked determined to make the difference, and he had a header hit the woodwork two minutes later.
Thuso Phala had a crack at goal on the half-hour mark but Senzo Meyiwa saved.
A minute later, under bizarre circumstances, SuperSport took the lead when Matlaba flicked a Matsatsantsa throw into his own net to beat Meyiwa, who was off his line.
Bucs had a good opportunity to get back into the game just after half-time, when Sifiso Myeni was brought down at the edge of the box by Edwin Gyimah, and Klate’s free-kick came off Kurt Lentjies’ head for a corner.
The pace of the game slowed in the second half, althouth Rooi Mahamutsa came close from a corner.
De Sa sent Erasmus on to find a goal against his former employers, and a few minutes later the move paid off when he combined well with Bacela, who made no mistake for the goal, his shot blasting the roof of the net.
With 18 minutes to play, Meyiwa pushed away a Sibusiso Khumalo shot, which had looked harmless until it hit a bump in the surface.
Gabonamong brought down Erasmus a few yards outside the box in the final minutes of the match, but Bacela’s free-kick was over the bar.
SuperSport took the lead again three minutes into extra time when Mame Niang challenged Meyiwa in a cross, causing him to drop the ball, which Gabonamong smashed into an empty net.
Eight minutes from time substitute Thulasizwe Mbuyane played a cross into the box and Bacela rose to the occasion and brought Bucs level again.
Sibusiso Khumalo was sent off for a second yellow card, but Matsatsantsa managed to hold on for the shoot-out.
Orlando Pirates join Bidvest Wits, Platinum Stars and Kaizer Chiefs in the last four. The draw will be held tomorrow at noon.
Shoot-out: Wiliams (saved), Jali (saved); Niang (scored), Erasmus (scored); Maluleke (scored), Mahamutsa (scored); September (missed), Bacela (scored); Fransman (scored), Lekgwathi (scored)