JP Duminy, AB de Villiers, Wayne Parnell and Vernon Philander put South Africa on top as the hosts reduced Australia to 112 for four on the second day of the second test at St George's Park on Friday (local time).
All-rounder Parnell, playing his first test in four years, and paceman Philander grabbed two wickets apiece after South Africa had amassed 423 in their first innings thanks to centuries from Duminy and De Villiers.
It might have been even worse for the tourists as wicketkeeper De Villiers dropped David Warner on 43. The left-handed opener was still there on 65 at the close of play with Nathan Lyon 12 not out.
Nightwatchman Lyon was also dropped by Duminy in the gully and received another let-off when South Africa failed to go to the television review after the umpire gave him not out when he edged a rising ball down the leg side straight to De Villiers.
Earlier, Duminy answered his critics with 123 while De Villiers struck 116 as the pair shared a stand of 149 for the sixth wicket.
Duminy, who averaged 11 in his previous seven test innings, looked assured from the start on Friday and brought up his third hundred off 199 balls before becoming off-spinner Lyon's fifth victim, trapped leg before.
"I knew today was going to be a big one for me personally and for the team and luckily it worked out well," Duminy told reporters.
"The most important thing on this wicket was to build a partnership and AB and I managed to do that. We had to be patient and wait for the bad ball.
"We knew Australia were going to come out and play their shots and that it would create opportunities for us," said Duminy.
"We also knew if we kept them in the field for a long time that when they came to bat there would be some tired legs and tired eyes and that if we put the ball in the right area we could get wickets."
De Villiers, who on Thursday passed 7,000 test runs and became the first player to score half-centuries in 12 tests in a row, reached his 19th century off 201 balls.
He was removed with the score on 349, offering a sharp caught and bowled chance to Lyon who was the pick of the bowlers with five for 130.
Philander claimed the first Australian wicket when he trapped Chris Rogers leg before for five.
Parnell then accounted for two of the heroes from the first test, Alex Doolan (eight) and Shaun Marsh (duck), both caught behind by De Villiers.
Marsh now has five ducks in his last 14 test innings.
Captain Michael Clarke looked fluent in compiling 19 before spooning an easy catch to Dean Elgar at cover as a ball from Philander appeared to hold up in the pitch.
Lyon then held out in brave fashion for the final 37 minutes, surviving a hostile onslaught from Parnell, Morne Morkel and Dale Steyn.
"South Africa bowled very well. We have to give them credit but the pleasing thing is we got to 112 so the game has moved forward quite quickly," said Australia coach Darren Lehmann.
"It could have been worse if they had taken their chances and we were also quite pleased to keep them to 423 in the 150 overs we bowled."
Australia are 1-0 up in the three-match series.
Scoreboard on the second day of the second Test between Australia and South Africa at St George's Park:
G SMITH lbw Harris 9
D ELGAR c Harris b Lyon 83
H AMLA lbw Johnson 0
F DU PLESSIS c Smith b Lyon 55
AB de VILLIERS c & b Lyon 116
Q DE KOCK c (sub) b Smith 7
J DUMINY lbw Lyon 123
V PHILANDER c & b Clarke 6
W PARNELL c Haddin b Lyon 10
D STEYN not out 4
M MORKEL run out (Smith) 1
Extras (4b 4lb 1w) 9
Fall: 10 (Smith), 11 (Amla), 123 (du Plessis), 181 (Elgar), 200 (de Kock), 349 (de Villiers), 378 (Philander), 413 (Parnell), 420 (Duminy), 423 (Morkel).
Bowling: R Harris 27-6-63-1, M Johnson 25-5-70-1 (1w), P Siddle 34-9-96-0, N Lyon 46-7-130-5, D Warner 3-0-10-0, S Smith 8-0-30-1, M Clarke 7.5-2-16-1.
C ROGERS lbw Philander 5
D WARNER not out 65
A DOOLAN c de Villiers b Parnell 8
S MARSH c de Villiers b Parnell 0
M CLARKE c Elgar b Philander 19
N LYON not out 12
Extras (3lb) 3
Total (for four wickets) 112
Fall: 7 (Rogers), 41 (Doolan), 41 (Marsh), 81 (Clarke).
Bowling: D Steyn 6-1-33-0, V Philander 6-0-26-2, M Morkel 7-0-31-0, W Parnell 6-2-19-2.
Who's the best test cricket captain?