Keshav Maharaj took the wicket of Mitchell Starc with the last ball before lunch as South Africa had Australia at 300-8 on day two of the first Test at Kingsmead.
Starc had batted well for the Australians, and hit two sixes off Maharaj two overs before, as the visitors looked to put on a respectable total in Durban.
Maharaj finished the first session with 4-103.
Mitchell Marsh and Tim Paine had earlier begun the day on a 48-run partnership, and it was soon worth 50 runs in the second over of the day.
Proteas captain Faf du Plessis waited until the 82nd over to take the second new ball, which was given to Kagiso Rabada.
Rabada struck immediately with the new ball when he found the perfect line and length, as he took the wicket of Tim Paine, who edged the ball to wicketkeeper Quinton de Kock for 25, which brought Pat Cummins to the middle.
Cummins initially played conservatively, taking 21 balls to get off the mark as the Australians attempted to set the South Africans a respectable total.
Maharaj joined the attack, and his impact was immediate as he bamboozled and bowled Cummins for just three runs, which left Australia on 251-7.
Starc walked out to the middle as the Australian innings entered the tail end.
Morne Morkel, looking to pick up his first wicket in the game, pitched one up to Marsh, who smashed it to the boundary for four, bringing up his third half-century.
At the other end, Starc was batting with intent, and hit the first six of the Australian innings off Maharaj, sending him to the deep midwicket grass bank as he reached 25 runs off just 15 balls.
Starc went after Maharaj two overs later, sending the ball to the same place as before, for six.
Marsh brought up 300 runs for Australia with a single off Maharaj, but the spinner got his revenge on Starc when he bowled him for 35 for his fourth wicket.
Photo: Lee Warren/Gallo Images