Having been crowned German league champions on Sunday, Bayern missed all four of their spot-kicks to put Dortmund in the German Cup final on May 30.
Bayern — who did win the treble of European, Cup and Bundesliga titles in 2013 — can still win the Champions League and face Barcelona next Wednesday in the semi-final, first-leg.
“The shoot-out had a stupid start, it summed up our game,” said goalkeeper Manuel Neuer, who failed to convert Bayern’s fourth penalty.
“We could have decided it over 90 minutes and also in extra-time. It’s a bitter defeat.”
Robert Lewandowski scored against his former employers to give Bayern a first-half lead before Dortmund striker Pierre-Emerick Aubameyang equalised 15 minutes from time to take the game into extra-time.
The shoot-out got off to a dramatic start when Philipp Lahm and Xabi Alonso both slipped to fire Bayern’s first two penalties over the bar.
Ilkay Gundogan and Sebastian Kehl converted theirs for Dortmund before Mario Goetze had his effort saved by Borussia’s Australia goalkeeper Mitchell Langerak.
Dortmund captain Mats Hummels had his shot saved before Munich’s shot-stopper Manuel Neuer hit the cross bar with Bayern’s fourth spot-kick to send Borussia to Berlin.
“That was a hell of a game, both teams gave everything and Bayern were certainly superior in the first-half, but we more than deserved to equalise in the second-half, today was our day,” said Dortmund coach Jurgen Klopp.
Dortmund have reached their third Cup final in four years under Klopp and will face either VfL Wolfsburg or third-division leaders Arminia Bielefeld, who meet in Wednesday’s other semi-final.
Klopp is leaving Dortmund at the end of the season after seven years and two German league titles.
The 47-year-old wants to bow out with one last title and his side lived up to his pre-match promise that they were ‘spoiling for a fight’ in Munich.
Dortmund were reduced to ten men when replacement midfielder Kevin Kampel was dismissed in the second period of extra time for a second booking after being on the field just 25 minutes.
Bayern coach Pep Guardiola has a few concerns ahead of their Champions League semi-final as striker Robert Lewandowski appeared to finish the match with concussion.
Lewandowski netted Munich’s 29th-minute opener when he finished off a counter-attack and then hit the cross-bar in the second half.
The Polish hot-shot should have had a second when he hit the woodwork on 55 minutes before referee Peter Gagelmann missed a clear hand-ball from Dortmund defender Marcel Schmelzer.
Dortmund equalised when replacement Henrikh Mkhitaryan fired across goal and Pierre-Emerick Aubameyang’s shot crossed the line before the ball was caught by Neuer on 75 minutes.
There was no need for goal-line technology to prove the goal was legitimate.
Germany captain Bastian Schweinsteiger came on and had two headers saved in extra time by Socceroos goalkeeper Langerak, who like Neuer, had a superb game.
Langerak flattened Lewandowski in the final five minutes when he punched the ball clear, but collided with the striker’s head, which left Guardiola outraged and the Poland star groggy.
The Poland star was a bemused figure on the bench as the penalty shoot-out unfolded in front of his vacant eyes.