Fast bowler Nantie Hayward spearheaded South Africa's bowling, claiming four for 31 to help bowl out India for 164 in 48.5 overs in the Coca-Cola Cup tournament.
To reach the target of 165 in 50 overs, South Africa will have to score at a run rate of 3.30 runs per over.
A victory will see South Africa through to Friday's final against either India or Pakistan, the third team in this three-nation tournament.
South Africa started brightly. In the fifth over, Hayward forced Indian skipper Sourav Ganguly to flash at a rising delivery and edge to keeper Mark Boucher. He went for six and the score was ten for one.
Star batsman Sachin Tendulkar, who had scored just 26 runs from his three previous innings in the tournament, however, combined in a second-wicket partnership with Mohammad Azharuddin that added 70 runs in 110 balls.
The partnership ended when Azharuddin was run out after pushing the ball towards mid-on and losing out to fielder Neil McKenzie in the race to make his ground. He made 36 from 64 balls with five fours.
His departure sparked a mid-innings crisis for India as Ajay Jadeja followed Azharuddin to the pavilion two balls later, adjudged leg before wicket to Steve Elworthy's credit.
Even at 80 for three in the 23rd over, the Indians were comforted by the fact that Tendulkar was still at the crease and was beginning to look like his old self.
But his downfall in the 28th over was a crushing blow to team's morale.
He was run out for 39 by the ever-alert Herschelle Gibbs who ran in from point and threw at the stumps, after Rahul Dravid turned down a single.
Dravid, unaccustomed to batting at five, struggled to raise the tempo. India only registered 100 in the 32nd over, to emphasize the stranglehold that South Africa's accurate bowlers had on the Indians.
Along with Robin Singh, Dravid found runs hard to come by and when he tried to force the run rate, Klusener had him caught at mid-wicket for a drawn-out 26 in 60 balls.
Robin Singh's straight driven four in the 42nd over was India's first boundary in 79 balls and 51 minutes. Three overs later the 150 came up in 44.3 overs.
Indian wickets further tumbled without the addition of many more runs. Hayward's third spell was three for nine from two overs and with it went India's chances of an end of innings run spree.
India won the toss
India Sachin Tendulkar run out 39 Sourav Ganguly c Mark Boucher b Nantie Hayward 6 Mohammad Azharuddin run out 36 Ajay Jadeja lbw b Steve Elworthy 0 Rahul Dravid c Neil McKenzie b Lance Klusener 26 Robin Singh c Boucher b Hayward 28 Saba Karim c McKenzie b Hayward 12 Anil Kumble b Klusener 2 Nikhil Chopra not out 1 Ajit Agarkar c Boucher b Hayward 4 Venkatesh Prasad c Boucher b Makhaya Ntini 1 Extras (w 4, lb 5): 9 Total (all out): 164 (Overs: 48.5)
Fall of wickets: 1-10, 2-80, 3-80, 4-93, 5-124, 6-154, 7-157, 8-159, 9-163, 10-164.
Bowling: Hayward 10-2-31-4, Kallis 10-2-30-0, Ntini 8.5-1-25-1, Elworthy 8-1-28-1, Klusener 10-1-35-2, Boje 2-0-10-0.Reuse content