Off-spinner Ravichandran Ashwin battered top-ranked South Africa with a five-wicket haul to leave India in control of the bowler-dominated first cricket Test in Mohali.
India, bowled out for 201 in the first innings on a dusty, dry wicket, hit back to skittle the Proteas for 184 on the second day of the match.
The hosts went to stumps on 125 for two in their second knock to take an overall lead of 142 runs with eight wickets in hand in conditions that are tailor-made for the bowlers.
Murali Vijay followed his top-score of 75 in the first innings with 47, sharing a second wicket partnership of 86 with Cheteshwar Pujara, who remained unbeaten on 63 with six fours and a six.
The pair came together after left-handed Shikhar Dhawan bagged a pair, edging Vernon Philander to the slip cordon for the second time in the match without scoring.
Vijay fell to a brilliant one-handed catch at short-leg by substitute fielder Temba Bavuma off Imran Tahir, but Indian captain Virat Kohli kept Pujara company at stumps on 11.
South Africa missed pace spearhead Dale Steyn, who did not take the field in the second innings due to a "tight right groin", according to Cricket South Africa.
The tourists' spin bowling coach Claude Henderson said Steyn was unlikely to bowl again in the Test as India attempt to build a match-winning lead on a treacherous pitch that has already seen 22 wickets fall on the first two days.
"I think he is struggling," Henderson said of Steyn. "I can't see him bowling tomorrow."
Henderson said a target of above 200 will be tough to chase in the fourth innings.
"We need early wickets tomorrow to try and create pressure," he said. "A target beyond 200 will be challenging but I have seen this team doing some special things. Anything can happen because there is a lot of time left in the match."
Ashwin proved almost unplayable as he finished with five for 51, reaching the 150-wicket mark in his 29th Test with the dismissal of last man Imran Tahir.
All 10 South African wickets fell to Indian spinners with left-armer Ravindra Jadeja taking three for 55 and leg-break bowler Amit Mishra taking two for 35.
AB de Villiers (63) and skipper Hashim Amla (43) were the only visiting batsmen to offer resistance after Dean Elgar's 37 as the rest failed to reach double figures.