Kiev: Real Madrid's Champions League hopes are hanging in the balance after they lost 2-0 at Shakhtar Donetsk on Wednesday (AEDT), leaving them third in group B with one round of matches remaining.
The 13-time European champions went behind in the 57th minute when Shakhtar substitute Dentinho capitalised on a lapse in concentration by Raphael Varane to score in an empty Olympic Stadium, where Madrid won their last Champions League in 2018.
Israeli forward Manor Solomon then wrapped up the home side's shock win over the Spaniards in the 82nd with a solo run on the counter and finish into the bottom corner.
Dentinho came on in the first half to replace striker Junior Moraes, who was injured after being hauled down by Varane in a bid to prevent the forward racing towards goal unchallenged.
Shakhtar, who beat Madrid 3-2 away in October, are second in group B on seven points, level with Zinedine Zidane's Real side but ahead due to their superior head-to-head record.
Real host leaders Borussia Moenchengladbach next week in their final game when Shakhtar visit bottom side Inter Milan.
On Wednesday, Inter Milan forward Romelu Lukaku scored twice in the second half to steer them to a 3-2 win at Borussia Moenchengladbach and keep their hopes alive.
The Belgium international has proved a lifesaver for Inter, having also scored twice, including a last-minute equaliser, in their 2-2 draw with the Germans in Italy on the first match-day.
Madrid's run of qualifying from the group stage for a record 23 consecutive seasons is in serious danger but Zidane vowed to fight on, dismissing suggestions he could resign as he did in May 2018 after lifting a third straight Champions League crown.
"I'm optimistic. This is a difficult moment but we need to show our character now and stand tall," he said.
UEFA Champions League matchday 5 results
- Shakhtar Donetsk 2 Real Madrid 0
- Lokomotiv Moscow 1 RB Salzburg 3
- Borussia Moenchengladbach 2 Inter Milan 3
- Marseille 2 Olympiacos 1
- Atletico Madrid 1 Bayern 1
- Liverpool 1 Ajax 0
- Atalanta 1 Midtjylland 1
- Porto 0 Manchester City 0
"What happened today is a real shame because we did not deserve it but we have to win our next game. We're going to believe in ourselves and we're going to fight, you can be sure about that."
The Spanish champions pulled off a 2-0 win at Inter in their last European game while the Ukrainians were hammered 4-0 away to Gladbach, though Zidane's side were brought back to earth with Saturday's shock 2-1 home loss to Alaves in La Liga.
Real were missing record signing Eden Hazard after another injury to the Belgian and were still without captain Sergio Ramos, though they were boosted by the return of Karim Benzema.
They looked the better side before the interval and nearly scored an early goal when Marco Asensio hit the post from a tight angle, but the second half belonged to Shakhtar who savoured another upset win.
Shakhtar's Solomon said: "It's been a great match and great result for us. Six points in two games against Real is a dream come true. Now we have a good chance to qualify for the knockout stage but we have a very tough game with Inter ahead of us."
Meanwhile, FC Porto joined Manchester City in advancing after the two played out a goalless draw in their group C clash.
The point, combined with defeat for Olympiacos in France, was enough to ensure Porto finished second while City, who had already qualified last week, are assured of top place.
But Pep Guardiola’s team surrendered their 100 per cent record in the group despite dominating their hosts as they set up a myriad of chances but proved unable to make the breakthrough.
With one round left to play, City are on 13 points – three more than Porto – with both well clear of Olympiacos and Marseille, who have three points each.
Elsewhere, a first-half brace by Mergim Berisha helped earn Salzburg a 3-1 win at Lokomotiv Moscow as the Austrian champions kept their hopes of a last-16 spot alive.
Atletico Madrid face a nerve-racking final game to ensure they reach the knockout stage after they could only draw 1-1 at home to a much-changed Bayern Munich side following a late penalty from Thomas Mueller. Substitute Mueller beat goalkeeper Jan Oblak from the spot in the 86th minute after being felled by defender Felipe.
Cristian Romero’s late equaliser secured a potentially precious point for Atalanta in a hard-fought 1-1 home draw with Socceroo Awer Mabil's Danish side Midtjylland in Group D.