Robert Lewandowski put Dortmund ahead in the first half only to be sent off a quarter of an hour later as Hamburg roared back with two goals each from Son and Latvia’s Artjoms Rudnevs. Hamburg responded immediately with Rudnevs converting a superb cross from the left from Dennis Aogo just 60 seconds later.
The visitors then took the lead on 26 minutes when Son beat Germany defender Mats Hummels on the right, broke down the wing and cut inside stand-in left-back Sven Bender to unleash his shot into the far corner.
Lewandowski was then shown a straight red card following a challenge onPer Ciljan Skjelbred, while Hamburg’s Dutch star Rafael van der Vaart was shown a yellow for angrily shoving the Dortmund star on 31 minutes to leave it 2-1 at the break.
The numbers were evened up when Hamburg’s Dutch defender Jeffrey Bruma was shown a straight red for bringing down Marco Reus when he was clear on goal after 59 minutes. But Hamburg recovered from that blow as Rudnevs headed home on 62 minutes and then Son’s 89th-minute strike completed the rout of Dortmund as he turned in Marcell Jansen’s pass to move Hamburg up to fifth.
Meanwhile, David Alaba scored twice as Bayern Munich extended their lead at the top of the Bundesliga to 15 points with an 4-0 thrashing of struggling Schalke.
Alaba opened the scoring from the penalty spot in the 19th minute and then made it 3-0 at the start of the second half after Bastian Schweinsteiger had doubled Bayern’s lead with a free-kick.
Mario Gomez completed the rout in the 63rd minute as Bayern took full advantage of second-placed Borussia Dortmund’s surprising 4-1 home defeat to Hamburg.
Hanover 96 striker Mame Diouf added to Hoffenheim’s woes with a first-half winner in their 1-0 home victory, while Chelsea’s Kevin de Bruyne, on loan at Werder Bremen, scored the final goal in his team’s 4-1 win at Stuttgart.
Borussia Moenchengladbach last beat Bayer Leverkusen at home in 1989 and the hosts must wait another year to break the league’s record for a winless run, but there was plenty of drama in their 3-3 draw. The lead changed hands three times before an 86th-minute equaliser by ‘Gladbach’s Patrick Herrmann shared the points, while Leverkusen stay third in the table.
Bottom side Greuther Fuerth went down 1-0 at home to Wolfsburg, while Eintracht Frankfurt stay fourth despite their goalless draw at home to Nuremberg.