The hosts trailed by 162 runs, with nine wickets in hand in their first innings, after dismissing the tourists for 280 in the morning session.
Captain Graeme Smith shared 37 runs with fellow opener Alviro Petersen, who was trapped lbw by paceman Ishant Sharma for 21.
And while the skipper was given a life when he was spilled by Ravichandran Ashwin on 19, he and Hashim Amla steadied the ship to put the hosts firmly in control.
Smith racked up his 38th career half-century and was unbeaten on 62 at the break, with Amla on 30.
Earlier, South Africa’s pace attack had steamrolled India’s lower order as the tourists, who resumed their first innings on 255/5 in overcast conditions, added only 25 runs to their overnight score.
Ajinkya Rahane and MS Dhoni got off to a slow start before seamers Vernon Philander and Morne Morkel combined to grab five wickets in the space of four overs.
Morkel had Dhoni caught behind for 19 and Philander removed Rahane in the next over for 47 runs.
The duo then tore through the tail, with Philander taking 4/61 and Morkel returning 3/34.
Follow @TheCitizenSport for more updates.