India lost their last nine wickets for 136 as they crashed from 198 for one to 334 all out, with Steyn the catalyst for the collapse as he ended a barren run of 414 deliveries between wickets in the series with a fiery spell of bowling after lunch.
South Africa raced to 82 without loss in their reply during a marathon three-hour final session with openers Graeme Smith (35 not out) and Alviro Petersen (46 not out) to resume on Saturday as the Proteas aim to build a big lead.
Nine of the 10 Indian wickets were caught behind as the South African pace barrage that had looked so meek on day one came to life with Steyn’s inspired spell in the afternoon session in which he took three wickets in 10 balls.
“I said to (bowling coach) Allan (Donald) that it was one of my best fifers because I had gone so long without a wicket. Most people would have capitulated,” Steyn told reporters referring to his haul of more than five wickets.
After the morning was completely lost to rain, Cheteshwar Pujara (70) was Steyn’s first victim as India added 17 runs to their overnight 181 for one, caught by wicketkeeper AB de Villiers pushing forward to a pitched-up ball.
It brought to an end a fine second-wicket stand of 157 between Pujara and Murali Vijay that had so frustrated South Africa on the opening day.
“After it rained there was a little bit of moisture in the wicket and in the first hour it was doing a bit. The ball had more carry and was skidding off the wicket,” Pujara said in a TV interview.
“We could have got 400, but we are happy with this total we have. The ball has started turning a bit and once we get the reverse swing the fast bowlers will come into the picture.”
Vijay moved to within three of his century before he succumbed to Steyn’s short-pitched attack, gloving the ball down the leg-side to De Villiers.
On the very next ball Rohit Sharma (zero) misjudged the bounce as he shouldered arms to a delivery that always looked destined to crash into middle stump.
Virat Kohli was on course for his third half-century in as many innings in the series before he was out 10 minutes before tea for 46, another catch down the leg-side by De Villiers, this time off Morne Morkel.
India advanced to 320 before they lost their sixth wicket, MS Dhoni (24) providing a catch for Smith at first slip off Steyn.
Jacques Kallis, playing his 166th and last test, reached perhaps one final milestone when he pouched Ravindra Jadeja (zero) at slip off spinner JP Duminy – his 200th catch in five-day cricket.
Kallis is second only to former Indian batsman Rahul Dravid (210) on the all-time list for a fielder.
Zaheer Khan (zero) and Ishant Sharma (4) became Steyn’s fifth and sixth victims as they edged to De Villiers, before the innings was complete when Mohammed Shami was taken at first slip by Smith off Morkel.
Steyn finished with figures of six for 100 in his 30 overs, while Morkel recorded three for 50 in 23.3 miserly overs. T
Morkel said South Africa were determined to “make something happen” and win the test in honour of Kallis.
Steyn added: “There are three days left, so I hope we can get a result, especially for Jacques. We will do everything in our power to try and win it for him.
“We were on the edge of winning in Johannesburg and then we didn’t, but rather than go 1-0 down there, we stand a chance of winning the series here.
“He (Kallis) sat down and had a little talk with us and said he didn’t want to play his last test in Durban and for it to fizzle out and be a draw.
“So we have to do whatever it takes. Whatever it is, whether we have to score quickly, take 10 wickets again, whatever, we’ll do it.”
(Reporting by Nick Said; editing by Justin Palmer and Ken Ferris)