Stunned South Africa must defeat hosts Zimbabwe to reach the non-cap Twenty20 tri-nations tournament final at Harare Sports Club after losing by three wickets to Bangladesh Friday.
South Africa won the toss and elected to bat, then lost wickets at regular intervals en route to 129-7 off 20 overs as they sought to put a shock loss by Zimbabwe two days ago behind them.
Bangladesh tossed away several wickets through reckless shots and needed 19.5 overs to reach 132-7 and claim a second win in as many days after losing their first two games.
Zimbabwe and Bangladesh have eight points each and South Africa four in an unofficial tournament designed to prepare the three countries for the World Twenty20 in Sri Lanka during September and October.
Victory for South Africa over Zimbabwe would mean the three teams finishing level on points and net run rates deciding which two advance to the Sunday climax of a drama-filled tournament South Africa were expected to dominate.
"I am very happy with our spin and seam bowlers for doing a superb job again," said Bangladesh skipper Mushfiqur Rahim. "Chasing the total was not easy on a tough wicket but we got there."
South African captain Hashim Amla said: "I am very disappointed because I believed 129 was a defendable total. Our match with Zimbabwe has become a big one and I am hoping for a better showing all round."
South Africa never built batting momentum with only Justin Ontong (41) and Farhaan Behardien (16) spending a reasonable amount of time in the middle, but they scored slowly against an attack in which Elias Sunny (2-22) did best.
Bangladesh scored more quickly, but the loss of leading scorer Mohammad Ashraful (40) after 12.2 overs while trying to slam the ball over mid-on made life more anxious than it should have been for the tail.
Excellent final-over bowling by Chris Morris left Bangladesh needing two runs from the last two balls for victory and Ziaur Rahman rose to the occasion by latching on to a wide full toss and cracking it for four on the off side.