After the 0-0 first leg last week, a 'home' tie for Milan, it was Milan who looked set for victory when Ukrainian striker Andriy Shevchenko put them ahead on the stroke of halftime.
But Inter's desperate second half search for a goal bore fruit seven minutes from the end when 18-year-old Nigerian striker Obafemi Martins, brought on at the break, equalised, prompting a dramatic end to the game.
With the Milan defence rocking, Mohammed Kallon forced a save out of Milan keeper Christian Abbiati and Inter even threw their keeper Francesco Toldo forward for a last minute corner but it was to no avail for Hector Cuper's side.
Milan go forward to the final in Manchester on May 28 against either Serie A rivals Juventus or defending European champions Real Madrid who meet in Turin on Wednesday. The Spaniards lead 2-1 after the first leg.
It is a bitter irony for Inter that they fall victim to the away goals rule in the first ever Champions League semi-final between two teams that share the same stadium.
The final at Old Trafford will be Milan's first appearance in that European showpiece since their 1995 defeat to Ajax.
If the first leg, also at the San Siro, was in many ways a restrained affair with not a single yellow card, this time nothing was held back as five players received bookings.
PLENTY OF ERRORS
At times in the first half the tension threatened to spill over with several off-the-ball clashes and the hurried and nervous nature of the game led to plenty of errors.
Inter's Hernan Crespo shot weakly at Milan keeper Abbiati in the 13th minute and then Shevchenko fired wide after latching on to a pass from Paolo Maldini.
But it was former Dynamo Kiev striker Shevchenko, whose place in the side had been in doubt after a recent lapse in form, who broke the deadlock.
The Ukrainian fought past Inter defender Ivan Cordoba as he cut into the penalty after latching on to a pass from Clarence Seedorf and then lifted his shot over the advancing Inter keeper.
Inter coach Cuper made two changes at the interval with Luigi Di Biagio replaced by the more attack-minded French midfielder Stephane Dalmat at the break and Martins on for the ineffective Uruguayan Alvaro Recoba.
The switch certainly gave Inter, who knew they needed to score twice to make it through, a greater forward thrust as they took the game to Milan after the break.
The danger for Inter was the risk of leaving holes in defence and Milan almost took advantage when Rui Costa was given plenty of room to pick out Shevchenko but this time the Ukrainian curled his shot wide.
Finally Inter's efforts were rewarded when Martins took advantage of a hesitant Maldini and fired the ball past a sprawling Abbiati.
That raised the volume and prompted a wave of attacks on a Milan defence that was looking far from certain of itself.
But Carlo Ancelotti's side hung on and now have a chance to get their first European honour since 1994.
More from rediff