After Pakistan totalled 233 for nine, Elliott's 75 not out led his team to 234 for five with 13 balls to spare as the Kiwis set up a final meeting with Australia in Centurion on Monday.

Elliott, who hit five fours and one six in his 103-ball innings, shared a 104-run stand with Daniel Vettori (41) for the fifth wicket before the captain was stumped by Kamran Akmal off spinner Saeed Ajmal.

New Zealand had struggled to 71 for three before Elliott and Ross Taylor combined for a partnership of 55.

Taylor was then bowled by leg-spinner Shahid Afridi for 38 in 61 deliveries.

Ajmal was Pakistan's most successful bowler with two for 39 in eight overs.

Earlier, Ian Butler took four wickets after Pakistan had won the toss and elected to bat.

The 27-year-old fast bowler claimed career-best one-day international (ODI) figures of four for 44 in 10 overs, fighting back in style after his first two overs had cost 20 runs.

Pakistan's score was built on Umar Akmal's second ODI half-century.

The 19-year-old, playing in only his eighth ODI, scored 55 off 62 balls before being trapped leg-before by Vettori.

Akmal helped Pakistan recover from 86 for four by putting on 80 for the fifth wicket with Mohammad Yousuf (45).

Yousuf went when he played a delivery from seamer Kyle Mills on to his stumps.

Spinner Vettori, 30, bowled with guile to take three for 43 in 10 overs, reaching 250 ODI wickets in the process.