India stretched their overall lead to 311 when they scored 146 for five in their second innings by the close of play. They were well placed to win a Test match in South Africa for the first time on three tours of the country, although South African coach Mickey Arthur said his players were confident they could chase down any target they were set.
Opening bowler Shanthakumaran Sreesanth claimed his first Test five-wicket haul as South Africa crashed to their lowest Test total since their return to international cricket in 1991.
Replying to a modest Indian total of 249, South Africa were bowled out in only 25.1 overs to give India a first innings lead of 165.
India made a bad start to their second innings before VVS Laxman (42 not out) and Sourav Ganguly (25) shared a 58-run stand for the fifth wicket.
Twenty wickets fell for 323 runs during the day.
Sreesanth, 23, took five for 40 with a fine display of attacking seam and swing bowling. Playing in his sixth Test, at one stage he had five for 19 after dismissing five of the first seven batsmen. He singled out the wicket of Jacques Kallis, South Africa's senior batsman, as a highlight. "Seeing him on the screen then getting his wicket was special," he said.
Sreesanth said: "I tried to stick to one line and be patient. It was a good wicket to bowl on."
He said a chat with South African bowling legend Allan Donald - another player he had seen "on the screen," had helped him relax before the match.
In one of the few bright spots for South Africa, Shaun Pollock became the first bowler from the host nation to take 400 Test wickets when he had Indian captain Rahul Dravid caught behind in the second innings.
In a message passed on to the press conference he said he was "chuffed" (pleased) to have reached the mark and hoped to take some more wickets Sunday and contribute to a South African win.
The day's play was a dramatic change of fortune after South Africa dominated a one-day series leading up to the Tests and appeared on target to take charge on a pitch which offered bounce and some movement to the fast bowlers.
But the Indians used the conditions better as they sent the home side tumbling. Whereas the South Africans peppered the Indian batsmen with short-pitched bowling, Sreesanth and new ball partner Zaheer Khan bowled a fuller length and made the batsmen play at more deliveries.
Arthur admitted: "The Indian bowlers hit better areas. They made us play which we didn't do (to India) in the first innings. Our bowlers were still bowling one-day lines and lengths."
But Arthur refused to concede defeat. "We had a poor day but we're still in it. We had a heart to heart in the dressing room and the guys have taken responsibility for a poor performance. We want to knock over the last few Indian wickets early and whatever we have to chase we believe we can."
South Africa's first three wickets fell with the total on five.
Captain Graeme Smith was out leg before to Sreesanth for five and Herschelle Gibbs was out without scoring in the next over when he edged a drive off Khan to backward point.
Hashim Amla was also out for nought, edging an out-swinger from Sreesanth to VVS Laxman at second slip.
Kallis survived a close appeal for leg before by Khan before relieving the pressure slightly by hitting two boundaries in the same over. But Kallis was out soon after lunch for 12 when he edged Sreesanth to provide Laxman with a second catch.
Left-hander Ashwell Prince, who top-scored with 24, staged a brief fightback as he and Andre Nel put on 39 for the eighth wicket before Prince was caught behind off leg-spinner Anil Kumble. Makhaya Ntini was bowled first ball by Kumble and although Dale Steyn survived the hat-trick ball, Nel was out for 21 in the next over when he skied VRV Singh to deep mid-off.
India earlier lost their last five first innings wickets for 93 runs. Ganguly scored 51 not out while last man Singh slogged effectively to make 29 in a last wicket stand of 44 before Pollock wrapped up the Indian innings.
Pollock held a sensational catch and took four wickets for 39 runs. He followed up with two for 24 in the second innings.
Fast bowler Dale Steyn, who left the field with a thigh strain on the first afternoon, took the field briefly in the second innings before going off again. He will not bowl again in the match.