South Africa were bowled out for 162 shortly before the close, giving Australia a lead of 189 runs on the first innings.
Lyon started the slide for the hosts and finished with three for 50 before the tall left-armer Starc gave a magnificent display of fast, reverse swing bowling to take five for 34.
AB de Villiers played almost a lone hand for South Africa, making 71 not out.
Mitchell Marsh struck 96 for Australia. Largely through his efforts, as well as an aggressive innings of 35 by Starc, Australia's last three wickets added 100 runs to take them to a total of 351.
On a pitch which has proved even slower than predicted by both captains, left-arm spinner Keshav Maharaj took five for 123 for South Africa.
Spin continued to be effective when South Africa batted. Off-spinner Lyon was brought on in the eighth over and took two wickets in his first over.
Starc used reverse swing bowled from around the wicket to make the ball move disconcertingly away from the right-handed batsmen before blasting out the last two batsmen, both left-handers, with full deliveries bowled from over the wicket.
Dean Elgar and Aiden Markram put on 27 for South Africa's first wicket and were looking reasonably comfortable until Australian captain Steve Smith brought Lyon into the attack in the eighth over.
- South Africa left reeling -
He had almost immediate success, catching Elgar off his own bowling with his second delivery. Three balls later he had Hashim Amla caught off bat and pad at short leg.
Markram (32) fended a short ball from Pat Cummins to give Cameron Bancroft a second catch at short leg to leave South Africa reeling at 55 for three at tea.
De Villiers and captain Faf du Plessis batted confidently after tea, scoring freely off Lyon so that the spinner was taken off after a spell of two for 36 in ten overs.
He was replaced by the Starc, who struck twice with reverse swing, having both Du Plessis and Theunis de Bruyn caught behind off balls which moved away from them.
Brought back into the attack, Lyon ended a promising sixth-wicket stand of 42 between De Villiers and Quinton de Kock, bowling De Kock for 20.
Almost from the start of his innings, De Villiers looked in a different class to his teammates, timing the ball superbly despite the slow pitch. He reached his fifty off 81 balls with nine fours.
Mitchell Marsh, who had made centuries in two of his previous Tests, both against England, looked set for another until he drove Vernon Philander to mid-on, where Morne Morkel, South Africa's tallest fielder, leapt to take the catch.
Marsh batted cautiously to be on 60 not out off 147 balls at lunch, seeing off the second new ball, before adding another 36 runs off only 26 balls after the interval. He hit 13 fours and a six.
Starc hit 35 off 25 balls to provide a momentum shift for Australia before being bowled by Maharaj in the last over before lunch.
First Published: March 3, 2018, 7:30 AM IST