The 20-year-old, playing only his sixth Test, claimed 7-112 to help bowl England out for 342, a first-innings deficit of 133.
Alastair Cook and Joe Root made 76 and Moeen Ali was last out for 61.
Hashim Amla was dropped on nought as South Africa reached 42-1- a lead of 175 - before bad light ended play.
James Anderson gave England faint hope of an attainable fourth-innings chase when Dean Elgar was caught behind in the third over, and England's record wicket-taker then saw Amla put down by a diving Alex Hales at third slip.
But Rabada's heroics will make the home side - 2-0 down in the series - confident of a consolation victory.
England resumed on 138-2 and lost four wickets for 73 runs in the 26 overs bowled before lunch. Cook and Root had calmly negotiated the first 13 of them but Morne Morkel began an impressive spell that yielded a collapse.
The big fast bowler produced a near unplayable delivery to Cook, with pace and steepling bounce that found the edge and was smartly taken by wicketkeeper Quinton de Kock.
Then Rabada utilised the overcast conditions to devastating effect, bowling a consistently dangerous line around the off stump and extracting sufficient pace and movement to find the edges.
Root, who successfully overturned a caught-behind decision off spinner Dane Piedt, had hit Rabada for three fours in an over but edged one that that nipped away off the seam.
"He is a real prospect, he's got something," former England opening batsman Geoffrey Boycott told BBC Test Match Special.
"You would think he would learn a lot from bowling with Dale Steyn when he comes back into the side. The world is his oyster."
James Taylor, who struck his first ball delightfully down the ground for four, appeared intent on hooking anything short and a swipe at Rabada resulted in an edge to the wicketkeeper.
That forced Jonny Bairstow to begin his innings on the stroke of lunch and he fell third ball as another rising delivery from Rabada brushed his glove, which ended the morning session with England losing three wickets for three runs in 18 balls.
Cape Town hero Ben Stokes launched Piedt for four and a towering six in an over but he was caught at slip for 33 off Rabada in the first over with the new ball.
Moeen, who was dropped on 45, brought up a first Test fifty in 15 innings before he was last out, caught at deep point.
With the pitch showing signs of uneven bounce, England's chances of victory - with two days remaining - appear slim.
Boycott said: "I don't think England can win from here. They haven't got a cat in hell's chance. All they can do is try to save the game."
Former South Africa wicketkeeper Mark Boucher told TMS: "South Africa are on top but they're not out of danger yet.
"What if England come back tomorrow and bowl them out for 80? It's not impossible."
One concern for the Proteas in the fourth innings is opening bowler Kyle Abbott, who left the field with a hamstring injury and is unlikely to bowl again in this match.
Play on Sunday will start earlier at 08:04 GMT to make up for the overs lost to rain.
Kagiso Rabada became the youngest South Africa bowler to take seven wickets in an innings as the home side took command of the final Test in Centurion.