South Africa were bowled out for 206 before lunch on day three of the first Test against Australia at Centurion.
The hosts began the day on 140-6, trailing by 257 runs, with AB de Villiers and Robin Peterson at the crease.
Mitchell Johnson claimed his fifth wicket of the innings when Peterson edged a delivery to slip, with the Proteas having failed to add a single run to their overnight total.
Vernon Philander was the next to go when he was given out lbw to Nathan Lyon following a review, but De Villiers offered some resistance as he hit several boundaries to take his side past 200.
However, he became Johnson's sixth victim on 91 when he lofted a slower delivery to David Warner at mid-off, before Johnson wrapped up the innings when he bowled out Morne Morkel for a duck to leave South Africa trailing by 191.
The Proteas made an early breakthrough when Dale Steyn bowled Chris Rogers for one, but Australia saw out seven overs before lunch without suffering another loss. They will resume the afternoon session with Warner (12*) and Alex Doolan (3*) at the crease.