Milan had also started the match in stunning fashion with Alexandre Pato netting in the opening 30 seconds but Barca turned the game around and looked to be on course to claim the win thanks to goals from Pedro Rodriguez and David Villa.
However, Pep Guardiola's men could not find a third goal to wrap the tie up and they were stunned two minutes into injury time when Thiago Silva powered home Clarence Seedorf's corner to salvage a point for seven-time European champions Milan.
The Italian champions could hardly have had a better start with Pato scoring soon after kick-off
Barca again started without their first-choice central defensive partnership of Carles Puyol and Gerard Pique, and the makeshift pairing of Javier Mascherano and Sergio Busquets were badly exposed by the speedy Pato.
The Brazilian picked up possession near the centre circle and then, as the Barca defence converged on him, he pushed the ball into space behind the home backline before racing through and slotting his shot under Victor Valdes from the edge of the area.
That was a remarkable start to the clash between the two European superpowers, and it sparked Barca into an almost relentless onslaught on the Milan goal as they went in search of an equaliser.
Villa shot into the side netting but it was Messi who was at the heart of Barca's attempted fightback, the Argentina superstar having a shot turned behind by Christian Abbiati before then seeing a dipping, curling free-kick hit the outside of the post.
Messi also brought another two saves out of Abbiati after Villa had sent an acrobatic volley over the crossbar.
During that spell, Milan briefly threatened on the counter-attack but Kevin-Prince Boateng blazed over from a decent opening on the right of the area.
Milan's rearguard was finally breached in the 36th minute when Barca drew level, with Messi again taking centre stage.
Milan defender Ignazio Abate looked favourite to reach the ball as Messi tried to go past him, but the diminutive playmaker did superbly to burst past the full-back before poking a pass across the face of goal, where the unmarked Pedro was on hand to tap in at the far post.
Barca suffered a setback just before half-time when Andres Iniesta limped off injured, but his replacement was the in-form Cesc Fabregas.
While Milan were quickest out of the blocks at the start of the game, it was Barca who enjoyed the much better start in the second period.
Xavi brought a fine diving save out of Abbiati before the home side took the lead in the 49th minute through a brilliant free-kick from Villa, the Spain international finding the top corner from almost 30 yards out.
That goal was good enough to win any match and it looked like settling this contest as Milan, despite going close with a 72nd-minute header from Pato that was saved by Valdes, still trailed as the match entered injury time.
However, there was to be a late twist as, after Milan had won a corner on the right, Thiago Silva climbed highest in the middle to head Seedorf's cross past Valdes.