The Proteas recovered from a disastrous 42-5 within the first hour to post 213-8 before Pakistan were themselves reduced to 27-6 and bowled out for 89 in the eventful day-night international on Friday.
South Africa joined New Zealand in the semi-finals from group B with two wins each, topping the group on the basis of a superior run-rate.
The South Africans will travel to Jaipur for the second semi-final against the runners-up of group A on November 2.
New Zealand will face the group A winners in the first semi-final in Mohali on November 1.
Defending champions the West Indies have already qualified from group A while Australia and hosts India will battle for the last semi-final spot here on Sunday.
South Africa made a terrible start in the key match when they lost half their side by the 13th over after captain Graeme Smith won the toss and elected to bat on a seaming wicket.
Mark Boucher (69) and Justin Kemp (64) led their team's recovery by adding 131 for the sixth wicket, South Africa's best sixth-wicket stand against Pakistan surpassing the 88 by Jonty Rhodes and Dave Richardson at Durban in 1994.
Pakistan, chasing a modest target of 4.3 runs an over, were stunned by a lightening spell from the fired-up Ntini.
The right-arm fast bowler had Mohammad Hafeez caught by Smith at first slip with his second ball and had Imran Farhat taken at third man by Shaun Pollock in his next over.
Pollock celebrated his 100th one-day catch by bowling Mohammad Yousuf for five before Ntini dismissed captain Younis Khan and Shoaib Malik in his fourth over.
Pakistan slipped to 42-7 in the 13th over when Ntini trapped Kamran Akmal leg-before and Pollock claimed Shahid Afridi (14) in the same fashion.
Pakistan's lowest total against South Africa - their previous low was 109 in Johannesburg in 1995 - undid the good work done by their bowlers in the first session.
Pakistan had decimated the South African top order after Umar Gul removed Smith and Herschelle Gibbs in the first over of the match as the ball moved alarmingly in the air and off the wicket.
Fellow-seamer Rao Iftikhar enjoyed the conditions as much as Gul, conceding his first run on his 19th delivery.
Iftikhar had Boeta Dippenaar (13) and Jacques Kallis (17) caught by wicket-keeper Akmal as the Proteas slipped to 36-4.
It soon became 42-5 as Yasir Arafat, playing his first match in the tournament in place of Rana Naved, forced A.B. de Villiers to edge a catch to Akmal.
South Africa's top order had failed for the third successive time in the tournament.
They were reduced to 25-3 by New Zealand before being bowled out for 108 on a dusty track at the Brabourne stadium in Mumbai. Against Sri Lanka, the Proteas tumbled to 30-3 before ending at a below-par 219-9.
But the bowlers made up for the batting lapses to earn South Africa a superb victory.