Ryan Christie fired a dominant Scotland into a 52nd-minute lead with a superb shot on the turn before substitute Luka Jovic equalised in the 90th when he headed home a Filip Mladenovic corner to force extra time.
"It's a very difficult time for Scotland because of the coronavirus pandemic and we spoke before the game about the chance to put a smile on their faces," Scotland boss Steve Clarke told a news conference.
"We know what we have achieved and what we had set out to achieve. Unbelievable, the character the players have shown. It would have been easy to crumble after conceding in the last minute of regular time from set play, but we dug in.
"We've been building towards this moment and tonight the players and the nation can be proud of themselves."
Scotland had the upper hand in driving rain as they stifled out Serbia's toothless 3-5-2 formation, with John McGinn forcing a good save from Serbia keeper Predrag Rajkovic in the first half while Sasa Lukic fired wide at the other end.
Andy Robertson missed a gilt-edged chance barely a minute before Christie struck and Serbia never looked like drawing level before Jovic popped up at the far post and beat Marshall with a downward header.
Galvanised by the late equaliser, Serbia pressed in extra time and nearly grabbed a winner when Marshall clawed out Nemanja Gudelj's dipping shot from 25 metres, tipping it around the post.
Having beaten Israel on penalties at home to reach the playoff final, the Scots held their nerve again as Rajkovic never came close to saving any of their five spot-kicks.
Scotland mobbed each other in delight after a VAR check showed Marshall kept one foot on his goal line when he saved Mitrovic's shot.
In contrast, a dejected Serbia trudged off into the tunnel, having missed an opportunity to reach their first European Championship finals as an independent nation.