Despite going behind, Barca dominated the rest of the half as Alexis Sanchez's looping header came back off the crossbar.
As the visitors increased the pressure, Lionel Messi had a left-footed drive parried away by Iker Casillas before Andres Inista flashed his shot over the bar.
Pep Guardiola's team ended the half the strongest as Cesc Fabregas fired over from the edge of the area.
The La Liga champions were level five minutes after the break as Carles Puyol headed in unmarked from Xavi's corner.
Iniesta nearly put his side ahead five minutes later, but some inventive defending by Sergio Ramos denied the midfielder.
Real could have gone in front on the hour when Karim Benzema's header from Hamit Altintop's cross clipped the outside of the post.
However, it was Barcelona who took the lead with 13 minutes to play as Eric Abidal collected Messi's pass to poke home from 10 yards.