South Africa skipper Graeme Smith and Jacques Kallis both scored centuries and combined for a 200-run partnership as the tourists virtually batted New Zealand out of the first Test by the close of play on the third day on Friday.
Smith (115) and Kallis (107 not out) had come together with their side on 47 for two and with just a 12-run lead after Doug Bracewell had taken two wickets in one over before lunch to give the hosts hopes of pushing for an upset victory.
The experienced duo, however, consolidated their innings before lunch then built on it afterwards to guide South Africa to 268-3 by the close of play at University Oval in Dunedin, an overall lead of 233.
Jacques Rudolph, who was given out leg before wicket to Bracewell shortly before the close but had the decision overturned when television replays showed the ball had marginally pitched outside leg stump, was with Kallis on 13.
Smith brought up his 24th Test century from 201 balls when he flicked a Daniel Vettori delivery through a packed onside field for a single, while Kallis achieved his 42nd Test century with a quick single into the off side.
The South African captain had fallen shortly before Kallis reached his ton, becoming Bracewell's third victim of the innings when he was bowled by the seventh delivery with the second new ball.
New Zealand had been buoyed before lunch when Bracewell had dismissed Alviro Petersen (25) and Hashim Amla (2) in the same over to leave South Africa struggling.
Momentum looked to be swinging the hosts' way after Trent Boult's cameo of 33 not out gave them a 35-run first innings lead.
South Africa need to sweep the series 3-0 to take over the world number one Test ranking from England.
South Africa (1st innings): 238
New Zealand (1st innings): (overnight 243-9)
R. Nicol c Smith b Philander 6
M. Guptill b Morkel 16
B. McCullum c&b Tahir 48
R. Taylor c Boucher b Morkel 44
K. Williamson c Boucher b Philander 11
D. Vettori c&b Kallis 46
K. van Wyk c Smith b Philander 36
D. Bracewell b Steyn 25
T. Southee c Smith b Philander 0
T. Boult not out 33
C. Martin c Amla b Steyn 5
Extras: (lb-3) 3
Total: (all out, 88.2 overs) 273
Fall of wickets: 1-7, 2-41, 3-106, 4-116, 5-135, 6-188, 7-229, 8-229, 9-239.
Bowling: Steyn 20.2-4-79-2; Philander 18-1-72-4; Morkel 18-5-52-2; Tahir 24-6-55-1; Kallis 8-2-12-1
South Africa (2nd innings):
A. Petersen c Southee b Bracewell 25
G. Smith b Bracewell 115
H. Amla c Guptill b Bracewell 2
J. Kallis not out 107
J. Rudolph not out 13
Extras: (nb-2, w-1, lb-1, b-2) 6
Total: (for three wickets, 89 overs) 268
Fall of wickets: 1-45, 2-47, 3-247.
Bowling: Martin 17-4-57-0; Boult 16-3-52-0; Bracewell 18-2-53-3 (nb-2); Southee 17-3-58-0; Vettori 19-2-34-0; Nicol 1-0-9-0; Williamson 1-0-2-0.
New Zealand won the toss and opted to field