Real, who have won three of the past four editions and are seeking their third title in a row, conceded after just three minutes when leg-one goalscorer Joshua Kimmich stabbed past Keylor Navas from close range after Real failed to deal with a Thomas Muller cross into the box.
Los Blancos didn't take long to respond, and it was surprise starter Benzema who did the honours eight minutes later with a simple header of a sumptuous Marcelo cross from the left.
Benzema's strike didn't change Bayern's objective of needing two goals on the day, however, and Jupp Heycnkes' side continued to take the game at the hosts, causing some nervy moments in the Real box.
Real were unlucky not to add a second not long after -- Cristiano Ronaldo playing in Marcelo who failed to see two Real teammates left alone at the back post.
James Rodriguez should have scored on 33 minutes after a fine Navas save from a clear Robert Lewandowski chance eventually saw the ball pop into the air and fall into his path, but the Real loanee couldn't manage to keep his close-range volley down with the entire goal to shoot at.
There were shouts for handball on the Bayern side just before half-time when a leaping Marcelo appeared to touch Kimmich's cross with his hand although his arm was tucked into his body.
And Real capitalised seconds after the break, again through Benzema, who tapped home after an indecisive Ulreich completely missed Corentin Tolisso's back pass, allowing a chasing Benzema to waltz in.
The goal marked the struggling Frenchman's fourth goal in eight Champions League appearances this season and 55th of his UCL career, which is the fifth-most in the competition's history.
With Bayern now needing two more goals, Navas was quick to react to David Alaba's snapshot in the 51st minute, doing well to palm away after a slight deflection on the way in.
Ronaldo missed a golden chance to put the tie away soon after when Marcelo's floated cross fell perfectly for the Portuguese striker who somehow volleyed well over the bar from inside 10 yards after being left all alone.
The miss would prove costly as Bayern moved within a goal of advancing just after the hour mark.
Rodriguez made up for his previous failure in the 63rd minute -- the Colombia captain pouncing onto his own rebound and sliding his second effort under Navas from an angle on the right.
Real boss Zinedine Zidane made a double-change in the 72nd minute, bringing on Gareth Bale and Casemiro for Lucas Vazquez and Mateo Kovacic, respectively. Sando Wagner came on for Tolisso three minutes later.
Navas saved Real a minute later, reacting quickly to a Tolisso shot inside the box after a cross wasn't cleared.
The Costa Rica international then got down well to push a Muller header past the post in the 80th minute.
Javi Martinez was brought on for Rodriguez in the 84th minute, the same time an injured Marco Asensio made way for Nacho.
Navas bravely punched away a dangerous Thiago free kick just before 90 minutes and was worse for wear following the ensuing collision with onrushing Bayern players.
A minute into stoppage-time, Mats Hummels headed wide of Navas post and Navas raced out to claim a squared cross begging for a Bayern boot a minute later.
Bayern threw players forward in search of a tie-clinching goal but a last-ditch cross near the goalmouth went begging and Real held on to book another Champions League final on a dramatic night in Madrid.