Ambati Rayudu (14 batting) and Perveez Rasool (0 batting) were at the crease during close of play as the visitors need another 47 runs to reach the magic figure of 192 in order to avoid follow on.
India lost five wickets for only 50 runs after being comfortably placed at 95 for one with skipper Cheteshwar Pujara (54) well set. The moment Indian captain was dismissed by left-arm seamer Beuran Hendricks at the stroke of tea, the final session turned completely in favour of hosts.
While one of the replacements Dinesh Karthik (9) was dismissed by offie Simon Harmer caught by Rilee Russouw, the other Stuart Binny (0) was cleaned up playing to a wrong line.
Murali Vijay (4) and Ajinkya Rahane (36, 5x4), who got set, couldn't read the angle of left-arm seamer Hendricks' delivery. Wriddhiman Saha (14) was done in by pace of Kyle Abbott.
Pujara looked solid during his innings of 54 as he hit five fours facing 97 balls. One cover drive off Wayne Parnell stood out.