Milan substitute Filippo Inzaghi poached two trademark second-half goals to put Milan ahead after Real Madrid had taken the lead on the stroke of halftime through Gonzalo Higuain in the Group G clash.
Real had more chances but Milan conjured an equaliser from nowhere on 68 minutes when goalkeeper Iker Casillas could only flap at Zlatan Ibrahimovic’s cross and 37-year-old Inzaghi nodded in.
Inzaghi prodded in his second 10 minutes later although there were suspicions of offside, but substitute Pedro Leon had the last laugh.
Real coach Jose Mourinho, who led Inter Milan to the trophy last term, was loudly whistled by nearly 75,000 Milan fans on his first return to the San Siro but Real dominated the early stages.
The returning Ronaldinho presented Ibrahimovic with a good opportunity for Milan but as so often in the very big games, the Swede’s lob over Casillas drifted wide and his striker partner Alexandre Pato had another match to forget.
The visitors, who beat Massimiliano Allegri’s side 2-0 at the Bernabeu two weeks ago, had good chances to open the scoring with Andrea Pirlo having to head off the line twice in succession from Argentina duo Higuain and Di Maria.
They also hit the post in a scramble but World Cup final referee Howard Webb blew for a foul despite Milan goalkeeper Christian Abbiati tumbling after colliding with his own player.
His appearance sparked a volley of obscene chants, which were also directed at Real’s Cristiano Ronaldo when he went down theatrically clutching his face after a minor tangle with Ignazio Abate in an action-packed first half.
Inzaghi 68, Inzaghi 78
Real Madrid 2
Higuain 45, Pedro Leon 90