Centuries from Ashwell Prince and Jacques Kallis have put South Africa in a commanding position at 195 runs ahead.
The hosts scored 348 runs of 88 overs in the day for the loss of just three wickets as they had their most prosperous day of the series.
Prince – overnight on 37 – went to his century with consecutive boundaries off inept leggie Bryce McGain, taking off his helmet and kissing the badge.
He proved his aptitude for the opening role with his score of 150 and the only way he could be removed was by a dubious decision via the referral system. Prince was adjudged to have gloved one down the legside, but the verdict took third umpire Billy Bowden 12 minutes to reach a conclusion, with benefit of the doubt not coming into his reckoning.
Kallis was peppered with the short-stuff early on, but the introduction of McGain (who went for 102 runs in 11 overs), set him on his way. His 31st Test century was his first in 21 innings, while it was also his first in almost three years against Australia.
South Africa resumed at 57-0 but in the fourth over of the morning Imraan Khan was dismissed, after a great diving catch from Peter Siddle in his follow through.
That was the only damage done in the first session for 91 runs as the pair of Prince and Hashim Amla set the platform and took the hosts to 148-1 at lunch.
The Aussies also struck early in the middle session, Amla failing to capitalise on yet another start as he lost concentration as he fell to Mitchell Johnson for 46.
The hosts will be looking for more of the same on day three from Kallis and AB de Villiers (39*), while Ricky Ponting’s men will somehow have to work their way back into the Test.
Australia 209 (1st innings)
Simon Katich 55, Brad Haddin 42, Dale Steyn 4-56, Paul Harris 3-34.
South Africa 404-3 (1st innings)
Ashwell Prince 150, Jacques Kallis 102*, Peter Siddle 1-35.
South Africa lead by 195 runs.
For the full scorecard click here.