Marsh struck a brutal 86 not out from 51 balls to boost the Australian total to 282 for seven, and then took two key wickets as South Africa were bowled out for 220 in spite of Faf du Plessis' superb hundred.
It was the best response Australia could have hoped for after they were humiliated by hosts Zimbabwe on Sunday to leave their participation in Saturday's final in doubt.
South Africa's own qualification will only be confirmed on Thursday, though they would need to be heavily beaten by Zimbabwe in the final round robin game to miss out.
Australia's innings had been pedestrian up until Marsh's arrival, with Phil Hughes rarely getting into his full stride in the course of his 85 and South Africa picking up regular wickets after winning the toss and electing to bowl.
Although Hughes put on 85 for the second wicket with Steve Smith, who returned to the Australian side and batted at No. 3 following Michael Clarke's injury-enforced departure, the spin duo of Imran Tahir and Aaron Phangiso picked up three cheap wickets.
Phangiso recorded figures of 2 for 39 in his 10 overs, and his dismissal of skipper George Bailey left Australia 187 for five in the 42nd over.
However Marsh's big hitting came to the rescue as he smashed seven sixes, including three in three balls off Dale Steyn, and ensured Australia took 85 runs from the last seven overs.
"I think if we have to pinpoint somewhere that we lost the game it was with Mitchell Marsh's innings," Du Plessis said.
"Their innings was set up to get to 240 or 250, so we as a bowling unit will be disappointed for him to score so many sixes in the way that he did," he said.

Latest News from Sports News Desk