In a typically ill-tempered affair, Barcelona took the lead after 15 minutes when Andres Iniesta lifted the ball over Iker Casillas from close range.
Lionel Messi gave his side the edge just before the break when he collected Gerard Pique's backheel to lift the ball into the far corner.
With time running out, Madrid equalised when Benzema turned in the area to fire low past Victor Valdes in the Barca goal.
Just as the game looked as though it was going into extra time, Messi struck again, this time finishing a tidy move involving substitutes Adriano and Cesc Fabregas by volleying into the net.
The game was soured deep into injury time when Marcelo was sent off for a lunge on Fabregas, before players and coaches from both sides brawled by the touchline. Mesut Ozil and David Villa received additional red cards, while Jose Mourinho appeared to pinch the face of a Catalan assistant.