Jupp Heynckes' men succumbed to their second consecutive defeat at the AWD Arena this year, conceding for the first time in the league since Round 1 of the Bundesliga
Mohammed Abdellaoue converted a penalty for a foul by Philipp Lahm on Christian Schulz in the first half, and shortly after Jerome Boateng was sent off after a melee on the sidelines.
The 96ers did not stop there, however, as minutes after the restart a deflected shot by Christian Pander put the game beyond Bayern Munich reach.
The Bavarians went all guns blazing after Hannover were reduced to 10 men themselves midway through the second half as Steven Cherundolo was dismissed. Substitute David Alaba clawed one back for Jupp Heynckes' men, but it was too little, too late.
The match started well for the 96ers as in the 12th minute a quick counter-attack saw Abdellaoue break free in the Bavarians' half, but his finish from inside the box hit the left post before going to safety.
Moments later, however, Ron-Robert Zieler could only watch as a stunning drive by Toni Kroos hit the bar. Thing took a turn for the worse for Jupp Heynckes' men in the 21st minute, when Lahm brought down Schulz in the box, conceding a penalty.
Abdellaoue duly converted, putting a stop to Bayern's run of nine Bundesliga games without conceding.
Ugly scenes ensued shortly after the goal as Boateng was shown a straight red card in a melee on the touchline, following a foul by Rafinha on Sergio Pinto.
Bayern Munich continue to press and nearly got the equaliser in the 39th minute, when Mario Gomez fired just over from seven yards out after a cross by Thomas Muller. The ex-Stuttgart striker was presented with another great chance shortly after the restart, but was denied in a one-on-one by Zieler.
Things went from bad to worse for Bayern Munich as in the 50th minute a Pander shot deflected wickedly off Luiz Gustavo, nestling past Manuel Neuer, who could only stand and watch as the ball rolled over the line.
Hannover were reduced to 10 men as well in the 63rd minute, when Steven Cherundolo picked up his second yellow card for a foul on Franck Ribery.
Bayern Munich threw everything forward and were finally rewarded with a goal seven minutes from the final whistle as Alaba scored after a great run on the left side of the box.
Bastian Schweinsteiger gave a dramatic ending to the game as he hit the right post moments before the final whistle, but the Bavarians lost in the end, and Bayern were subjected to just their second league defeat of the season.