The visitors had begun at their overnight score of 255 for 5, but could only add 25 runs for the loss of five wickets.
Philander finished with 4 for 61 from 27 overs, while Morkel picked 3 for 34, adding another two from the last evening.
Steyn bowled three overs on the second morning but he failed to add to his tally, finishing with 1 for 61. Jacques Kallis (1-37) took a wicket as well, while Imran Tahir (0-47) and JP Duminy (0-30) had gone wicketless in their short spells on day one.
Starting at their overnight score of 255/5, Indian skipper MS Dhoni (17 not out) and Ajinkya Rahane (42 not out) looked to build on the platform provided by Virat Kohli's hundred.
Also Read
They started off well against Dale Steyn and Vernon Philander, who were bowling with the second new ball, only 10 overs old.
Rahane struck the first boundary of the day in the 93rd over, punching Steyn through the covers. At the other end, Dhoni was fiddling with a few played and missed shots, as the South African attack learnt from their mistakes on day one and were bowling a lot fuller, closer to the stumps.
In the 99th over of the innings, Morne Morkel tested Dhoni with a couple short of length deliveries, which the Indian captain left well.