Auckland: Grant Elliott hit a six off the penultimate delivery to secure New Zealand's place in the World Cup final with a thrilling four-wicket win at Eden Park, Auckland on Tuesday.
With five needed from two deliveries, Grant Elliott hit Dale Steyn for six to finish unbeaten on 84.
Elliott smashed Dale Steyn into the stands as he hit an undefeated 84 to earn a place in Sunday's final against Australia or defending champions India.
Brendon McCullum made a 26-ball 59 and Corey Anderson 58 to also help the Black Caps to their rain-adjusted target of 298 after South Africa had made 281-5 batting first in a match reduced to 43 overs a side.
For South Africa, Faf de Plessis made 82, AB de Villiers was not out 65, while David Miller smashed an 18-ball 49.
Earlier, South Africa have won the toss and opted to bat.
South Africa have one change -- Vernon Philander comes in for Kyle Abbott. New Zealand have drafted in Matt Henry into the squad and he's going to play in place of Adam Milne.
New Zealand: Brendon McCullum (Capt.), Martin Guptill, Kane Williamson, Ross Taylor, Grant Elliott, Corey Anderson, Luke Ronchi (wk), Daniel Vettori, Tim Southee, Matt Henry, Trent Boult
South Africa: Hashim Amla, Quinton de Kock (wk), Faf du Plessis, AB de Villiers (Capt.), Rilee Rossouw, David Miller, Jean-Paul Duminy, Vernon Philander, Dale Steyn, Morne Morkel, Imran Tahir
South Africa - 281/5 (du Plessis 82, de Villiers 65*, Miller 49, Anderson 3-72)
New Zealand - 299/6 (Elliott 84*, McCullum 59, Anderson 58, Morkel 3-59)
Result - New Zealand won by 4 wickets (D/L method)
MOM - Grant Elliott (New Zealand)