Khan's 300th wicket gets India closer to victory against S.Africa
Indian bowler Zaheer Khan (right) celebrates after claiming a South African wicket on the 5th day of the first Test in Johannesburg on December 22, 2013
South Africa, set an unlikely 458 to win, were 236 for four at lunch.
Left-armer Khan won a leg before wicket decision against Jacques Kallis, South Africa's senior batsman.
Kallis, who made 34, looked surprised when he was given out by umpire Rod Tucker, and replays showed the ball had come off an inside edge.
In a series in which the decision review system is not being used, it was the first major error made by umpires Tucker and Steve Davis.
Fast bowler Shami bowled Alviro Petersen in the fifth over of the day, after South Africa resumed at 138 for two, with Petersen failing to add to his overnight score of 76.
Petersen played a tentative defensive shot to a ball outside his off stump and was bowled off an inside edge.
Kallis, who was leg before wicket first ball to a full delivery from Ishant Sharma in the first innings, came within millimetres of suffering a similar fate to the first ball he faced from Shami. It was full and struck Kallis on the pads but umpire Davis ruled correctly that it was just outside the line of leg stump.
Kallis, who failed to reach double figures in six of his previous seven Test innings, struck Shami through the covers for four in his next over to open his score but was then dropped by Cheteshwar Pujara at short leg, with the fielder getting his left hand to the ball but failing to hold a sharp chance.
After his initial struggles, Kallis batted with authority to score his 34 runs off 37 balls before he was given out.
Faf du Plessis continued to play an anchor role and was 42 not out at lunch, while AB de Villiers played positively to be on 24 not out.